diff --git a/plugins/proto/RemoteFortressReader.proto b/plugins/proto/RemoteFortressReader.proto index aa4c26adf..6a6e7e9ae 100644 --- a/plugins/proto/RemoteFortressReader.proto +++ b/plugins/proto/RemoteFortressReader.proto @@ -92,6 +92,14 @@ enum WorldPoles BOTH_POLES = 3; } +enum BuildingDirection +{ + NORTH = 0; + EAST = 1; + SOUTH = 2; + WEST = 3; +} + message Tiletype { required int32 id = 1; @@ -132,7 +140,7 @@ message BuildingInstance optional uint32 building_flags = 10; optional bool is_room = 11; optional BuildingExtents room = 12; - optional int32 direction = 13; //Doesn't mean anything forall buildings + optional BuildingDirection direction = 13; //Doesn't mean anything for most buildings } message MapBlock diff --git a/plugins/remotefortressreader.cpp b/plugins/remotefortressreader.cpp index 239675b7c..e43dde76f 100644 --- a/plugins/remotefortressreader.cpp +++ b/plugins/remotefortressreader.cpp @@ -254,7 +254,6 @@ void CopyBuilding(int buildingIndex, RemoteFortressReader::BuildingInstance * re } } - remote_build->set_direction(0); switch (type) { @@ -308,7 +307,26 @@ void CopyBuilding(int buildingIndex, RemoteFortressReader::BuildingInstance * re { auto actual = strict_virtual_cast(local_build); if (actual) - remote_build->set_direction(actual->facing); + { + auto facing = actual->facing; + switch (facing) + { + case df::building_siegeenginest::Left: + remote_build->set_direction(WEST); + break; + case df::building_siegeenginest::Up: + remote_build->set_direction(NORTH); + break; + case df::building_siegeenginest::Right: + remote_build->set_direction(EAST); + break; + case df::building_siegeenginest::Down: + remote_build->set_direction(SOUTH); + break; + default: + break; + } + } } break; case df::enums::building_type::Trap: @@ -335,7 +353,26 @@ void CopyBuilding(int buildingIndex, RemoteFortressReader::BuildingInstance * re { auto actual = strict_virtual_cast(local_build); if (actual) - remote_build->set_direction(actual->direction); + { + auto direction = actual->direction; + switch (direction) + { + case df::enums::screw_pump_direction::FromNorth: + remote_build->set_direction(NORTH); + break; + case df::enums::screw_pump_direction::FromEast: + remote_build->set_direction(EAST); + break; + case df::enums::screw_pump_direction::FromSouth: + remote_build->set_direction(SOUTH); + break; + case df::enums::screw_pump_direction::FromWest: + remote_build->set_direction(WEST); + break; + default: + break; + } + } } break; case df::enums::building_type::Construction: @@ -356,7 +393,12 @@ void CopyBuilding(int buildingIndex, RemoteFortressReader::BuildingInstance * re { auto actual = strict_virtual_cast(local_build); if (actual) - remote_build->set_direction(actual->is_vertical); + { + if(actual->is_vertical) + remote_build->set_direction(NORTH); + else + remote_build->set_direction(EAST); + } } break; case df::enums::building_type::AxleVertical: @@ -365,14 +407,30 @@ void CopyBuilding(int buildingIndex, RemoteFortressReader::BuildingInstance * re { auto actual = strict_virtual_cast(local_build); if (actual) - remote_build->set_direction(actual->is_vertical); + { + if (actual->is_vertical) + remote_build->set_direction(NORTH); + else + remote_build->set_direction(EAST); + } } break; case df::enums::building_type::Windmill: { auto actual = strict_virtual_cast(local_build); if (actual) - remote_build->set_direction(actual->orient_angle); + { + if (actual->orient_x < 0) + remote_build->set_direction(WEST); + else if (actual->orient_x > 0) + remote_build->set_direction(EAST); + else if (actual->orient_y < 0) + remote_build->set_direction(NORTH); + else if (actual->orient_y > 0) + remote_build->set_direction(SOUTH); + else + remote_build->set_direction(EAST); + } } break; case df::enums::building_type::TractionBench: @@ -389,7 +447,26 @@ void CopyBuilding(int buildingIndex, RemoteFortressReader::BuildingInstance * re { auto actual = strict_virtual_cast(local_build); if (actual) - remote_build->set_direction(actual->direction); + { + auto direction = actual->direction; + switch (direction) + { + case df::enums::screw_pump_direction::FromNorth: + remote_build->set_direction(NORTH); + break; + case df::enums::screw_pump_direction::FromEast: + remote_build->set_direction(EAST); + break; + case df::enums::screw_pump_direction::FromSouth: + remote_build->set_direction(SOUTH); + break; + case df::enums::screw_pump_direction::FromWest: + remote_build->set_direction(WEST); + break; + default: + break; + } + } } break; default: