Merge lp:~widelands-dev/widelands/cleanup_playercommand_enums into lp:widelands

Proposed by GunChleoc
Status: Merged
Merged at revision: 9186
Proposed branch: lp:~widelands-dev/widelands/cleanup_playercommand_enums
Merge into: lp:widelands
Diff against target: 662 lines (+112/-151)
5 files modified
src/logic/playercommand.cc (+78/-129)
src/logic/playercommand.h (+9/-6)
src/logic/queue_cmd_factory.cc (+6/-6)
src/logic/queue_cmd_ids.h (+13/-7)
src/logic/replay.cc (+6/-3)
To merge this branch: bzr merge lp:~widelands-dev/widelands/cleanup_playercommand_enums
Reviewer Review Type Date Requested Status
Toni Förster Approve
Review via email: mp+369267@code.launchpad.net

Commit message

Get rid of duplicate listing of player commands. This breaks compatibility for replays only.

Description of the change

Keeping 2 lists of the same player commands is a bit nuts, so I got rid of one of them.

Since replays become incompatible pretty fast anyway, I decided not to add any compatibility code.

To post a comment you must log in.
Revision history for this message
bunnybot (widelandsofficial) wrote :

Continuous integration builds have changed state:

Travis build 5244. State: passed. Details: https://travis-ci.org/widelands/widelands/builds/549982685.
Appveyor build 5023. State: success. Details: https://ci.appveyor.com/project/widelands-dev/widelands/build/_widelands_dev_widelands_cleanup_playercommand_enums-5023.

Revision history for this message
Benedikt Straub (nordfriese) wrote :

Looks good to me. Some comments in the diff.

Revision history for this message
bunnybot (widelandsofficial) wrote :

Continuous integration builds have changed state:

Travis build 5260. State: passed. Details: https://travis-ci.org/widelands/widelands/builds/556294766.
Appveyor build 5037. State: failed. Details: https://ci.appveyor.com/project/widelands-dev/widelands/build/_widelands_dev_widelands_cleanup_playercommand_enums-5037.

Revision history for this message
GunChleoc (gunchleoc) wrote :

Addressed code review. Thanks for the review

Revision history for this message
Toni Förster (stonerl) :
review: Approve
Revision history for this message
GunChleoc (gunchleoc) wrote :

@bunnybot merge

Revision history for this message
bunnybot (widelandsofficial) wrote :

Continuous integration builds have changed state:

Travis build 5341. State: passed. Details: https://travis-ci.org/widelands/widelands/builds/576769589.
Appveyor build 5111. State: success. Details: https://ci.appveyor.com/project/widelands-dev/widelands/build/_widelands_dev_widelands_cleanup_playercommand_enums-5111.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/logic/playercommand.cc'
--- src/logic/playercommand.cc 2019-06-23 14:28:50 +0000
+++ src/logic/playercommand.cc 2019-08-26 10:38:04 +0000
@@ -74,108 +74,83 @@
7474
75} // namespace75} // namespace
7676
77// NOTE keep numbers of existing entries as they are to ensure backward compatible savegame loading
78enum {
79 PLCMD_UNUSED = 0,
80 PLCMD_BULLDOZE = 1,
81 PLCMD_BUILD = 2,
82 PLCMD_BUILDFLAG = 3,
83 PLCMD_BUILDROAD = 4,
84 PLCMD_FLAGACTION = 5,
85 PLCMD_STARTSTOPBUILDING = 6,
86 PLCMD_ENHANCEBUILDING = 7,
87 PLCMD_CHANGETRAININGOPTIONS = 8,
88 PLCMD_DROPSOLDIER = 9,
89 PLCMD_CHANGESOLDIERCAPACITY = 10,
90 PLCMD_ENEMYFLAGACTION = 11,
91 PLCMD_SETWAREPRIORITY = 12,
92 PLCMD_SETWARETARGETQUANTITY = 13,
93 PLCMD_RESETWARETARGETQUANTITY = 14,
94 PLCMD_SETWORKERTARGETQUANTITY = 15,
95 PLCMD_RESETWORKERTARGETQUANTITY = 16,
96 // Used to be PLCMD_CHANGEMILITARYCONFIG
97 PLCMD_MESSAGESETSTATUSREAD = 18,
98 PLCMD_MESSAGESETSTATUSARCHIVED = 19,
99 PLCMD_SETSTOCKPOLICY = 20,
100 PLCMD_SETINPUTMAXFILL = 21,
101 PLCMD_DISMANTLEBUILDING = 22,
102 PLCMD_EVICTWORKER = 23,
103 PLCMD_MILITARYSITESETSOLDIERPREFERENCE = 24,
104 PLCMD_SHIP_EXPEDITION = 25,
105 PLCMD_SHIP_SCOUT = 26,
106 PLCMD_SHIP_EXPLORE = 27,
107 PLCMD_SHIP_CONSTRUCT = 28,
108 PLCMD_SHIP_SINK = 29,
109 PLCMD_SHIP_CANCELEXPEDITION = 30,
110 PLCMD_PROPOSE_TRADE = 31,
111};
112
113/*** class PlayerCommand ***/77/*** class PlayerCommand ***/
11478
115PlayerCommand::PlayerCommand(const uint32_t time, const PlayerNumber s)79PlayerCommand::PlayerCommand(const uint32_t time, const PlayerNumber s)
116 : GameLogicCommand(time), sender_(s), cmdserial_(0) {80 : GameLogicCommand(time), sender_(s), cmdserial_(0) {
117}81}
11882
83void PlayerCommand::write_id_and_sender(StreamWrite& ser) {
84 ser.unsigned_8(static_cast<uint8_t>(id()));
85 ser.unsigned_8(sender());
86}
87
119PlayerCommand* PlayerCommand::deserialize(StreamRead& des) {88PlayerCommand* PlayerCommand::deserialize(StreamRead& des) {
120 switch (des.unsigned_8()) {89 switch (static_cast<QueueCommandTypes>(des.unsigned_8())) {
121 case PLCMD_BULLDOZE:90 case QueueCommandTypes::kBulldoze:
122 return new CmdBulldoze(des);91 return new CmdBulldoze(des);
123 case PLCMD_BUILD:92 case QueueCommandTypes::kBuild:
124 return new CmdBuild(des);93 return new CmdBuild(des);
125 case PLCMD_BUILDFLAG:94 case QueueCommandTypes::kBuildFlag:
126 return new CmdBuildFlag(des);95 return new CmdBuildFlag(des);
127 case PLCMD_BUILDROAD:96 case QueueCommandTypes::kBuildRoad:
128 return new CmdBuildRoad(des);97 return new CmdBuildRoad(des);
129 case PLCMD_FLAGACTION:98 case QueueCommandTypes::kFlagAction:
130 return new CmdFlagAction(des);99 return new CmdFlagAction(des);
131 case PLCMD_STARTSTOPBUILDING:100 case QueueCommandTypes::kStartStopBuilding:
132 return new CmdStartStopBuilding(des);101 return new CmdStartStopBuilding(des);
133 case PLCMD_SHIP_EXPEDITION:102 case QueueCommandTypes::kEnhanceBuilding:
134 return new CmdStartOrCancelExpedition(des);
135 case PLCMD_SHIP_SCOUT:
136 return new CmdShipScoutDirection(des);
137 case PLCMD_SHIP_EXPLORE:
138 return new CmdShipExploreIsland(des);
139 case PLCMD_SHIP_CONSTRUCT:
140 return new CmdShipConstructPort(des);
141 case PLCMD_SHIP_SINK:
142 return new CmdShipSink(des);
143 case PLCMD_SHIP_CANCELEXPEDITION:
144 return new CmdShipCancelExpedition(des);
145 case PLCMD_ENHANCEBUILDING:
146 return new CmdEnhanceBuilding(des);103 return new CmdEnhanceBuilding(des);
147 case PLCMD_CHANGETRAININGOPTIONS:104
105 case QueueCommandTypes::kChangeTrainingOptions:
148 return new CmdChangeTrainingOptions(des);106 return new CmdChangeTrainingOptions(des);
149 case PLCMD_DROPSOLDIER:107 case QueueCommandTypes::kDropSoldier:
150 return new CmdDropSoldier(des);108 return new CmdDropSoldier(des);
151 case PLCMD_CHANGESOLDIERCAPACITY:109 case QueueCommandTypes::kChangeSoldierCapacity:
152 return new CmdChangeSoldierCapacity(des);110 return new CmdChangeSoldierCapacity(des);
153 case PLCMD_ENEMYFLAGACTION:111 case QueueCommandTypes::kEnemyFlagAction:
154 return new CmdEnemyFlagAction(des);112 return new CmdEnemyFlagAction(des);
155 case PLCMD_SETWAREPRIORITY:113
114 case QueueCommandTypes::kSetWarePriority:
156 return new CmdSetWarePriority(des);115 return new CmdSetWarePriority(des);
157 case PLCMD_SETWARETARGETQUANTITY:116 case QueueCommandTypes::kSetWareTargetQuantity:
158 return new CmdSetWareTargetQuantity(des);117 return new CmdSetWareTargetQuantity(des);
159 case PLCMD_RESETWARETARGETQUANTITY:118 case QueueCommandTypes::kResetWareTargetQuantity:
160 return new CmdResetWareTargetQuantity(des);119 return new CmdResetWareTargetQuantity(des);
161 case PLCMD_SETWORKERTARGETQUANTITY:120 case QueueCommandTypes::kSetWorkerTargetQuantity:
162 return new CmdSetWorkerTargetQuantity(des);121 return new CmdSetWorkerTargetQuantity(des);
163 case PLCMD_RESETWORKERTARGETQUANTITY:122 case QueueCommandTypes::kResetWorkerTargetQuantity:
164 return new CmdResetWorkerTargetQuantity(des);123 return new CmdResetWorkerTargetQuantity(des);
165 case PLCMD_MESSAGESETSTATUSREAD:124
125 case QueueCommandTypes::kMessageSetStatusRead:
166 return new CmdMessageSetStatusRead(des);126 return new CmdMessageSetStatusRead(des);
167 case PLCMD_MESSAGESETSTATUSARCHIVED:127 case QueueCommandTypes::kMessageSetStatusArchived:
168 return new CmdMessageSetStatusArchived(des);128 return new CmdMessageSetStatusArchived(des);
169 case PLCMD_SETSTOCKPOLICY:129
130 case QueueCommandTypes::kSetStockPolicy:
170 return new CmdSetStockPolicy(des);131 return new CmdSetStockPolicy(des);
171 case PLCMD_SETINPUTMAXFILL:132 case QueueCommandTypes::kSetInputMaxFill:
172 return new CmdSetInputMaxFill(des);133 return new CmdSetInputMaxFill(des);
173 case PLCMD_DISMANTLEBUILDING:134 case QueueCommandTypes::kDismantleBuilding:
174 return new CmdDismantleBuilding(des);135 return new CmdDismantleBuilding(des);
175 case PLCMD_EVICTWORKER:136 case QueueCommandTypes::kEvictWorker:
176 return new CmdEvictWorker(des);137 return new CmdEvictWorker(des);
177 case PLCMD_MILITARYSITESETSOLDIERPREFERENCE:138 case QueueCommandTypes::kMilitarysiteSetSoldierPreference:
178 return new CmdMilitarySiteSetSoldierPreference(des);139 return new CmdMilitarySiteSetSoldierPreference(des);
140
141 case QueueCommandTypes::kStartOrCancelExpedition:
142 return new CmdStartOrCancelExpedition(des);
143 case QueueCommandTypes::kShipScoutDirection:
144 return new CmdShipScoutDirection(des);
145 case QueueCommandTypes::kShipExploreIsland:
146 return new CmdShipExploreIsland(des);
147 case QueueCommandTypes::kShipConstructPort:
148 return new CmdShipConstructPort(des);
149 case QueueCommandTypes::kShipSink:
150 return new CmdShipSink(des);
151 case QueueCommandTypes::kShipCancelExpedition:
152 return new CmdShipCancelExpedition(des);
153
179 default:154 default:
180 throw wexception("PlayerCommand::deserialize(): Invalid command id encountered");155 throw wexception("PlayerCommand::deserialize(): Invalid command id encountered");
181 }156 }
@@ -226,8 +201,7 @@
226}201}
227202
228void CmdBulldoze::serialize(StreamWrite& ser) {203void CmdBulldoze::serialize(StreamWrite& ser) {
229 ser.unsigned_8(PLCMD_BULLDOZE);204 write_id_and_sender(ser);
230 ser.unsigned_8(sender());
231 ser.unsigned_32(serial);205 ser.unsigned_32(serial);
232 ser.unsigned_8(recurse);206 ser.unsigned_8(recurse);
233}207}
@@ -273,8 +247,7 @@
273}247}
274248
275void CmdBuild::serialize(StreamWrite& ser) {249void CmdBuild::serialize(StreamWrite& ser) {
276 ser.unsigned_8(PLCMD_BUILD);250 write_id_and_sender(ser);
277 ser.unsigned_8(sender());
278 ser.signed_16(bi);251 ser.signed_16(bi);
279 write_coords_32(&ser, coords);252 write_coords_32(&ser, coords);
280}253}
@@ -317,8 +290,7 @@
317}290}
318291
319void CmdBuildFlag::serialize(StreamWrite& ser) {292void CmdBuildFlag::serialize(StreamWrite& ser) {
320 ser.unsigned_8(PLCMD_BUILDFLAG);293 write_id_and_sender(ser);
321 ser.unsigned_8(sender());
322 write_coords_32(&ser, coords);294 write_coords_32(&ser, coords);
323}295}
324296
@@ -387,8 +359,7 @@
387}359}
388360
389void CmdBuildRoad::serialize(StreamWrite& ser) {361void CmdBuildRoad::serialize(StreamWrite& ser) {
390 ser.unsigned_8(PLCMD_BUILDROAD);362 write_id_and_sender(ser);
391 ser.unsigned_8(sender());
392 write_coords_32(&ser, start);363 write_coords_32(&ser, start);
393 ser.unsigned_16(nsteps);364 ser.unsigned_16(nsteps);
394365
@@ -444,8 +415,7 @@
444}415}
445416
446void CmdFlagAction::serialize(StreamWrite& ser) {417void CmdFlagAction::serialize(StreamWrite& ser) {
447 ser.unsigned_8(PLCMD_FLAGACTION);418 write_id_and_sender(ser);
448 ser.unsigned_8(sender());
449 ser.unsigned_8(0);419 ser.unsigned_8(0);
450 ser.unsigned_32(serial);420 ser.unsigned_32(serial);
451}421}
@@ -497,8 +467,7 @@
497}467}
498468
499void CmdStartStopBuilding::serialize(StreamWrite& ser) {469void CmdStartStopBuilding::serialize(StreamWrite& ser) {
500 ser.unsigned_8(PLCMD_STARTSTOPBUILDING);470 write_id_and_sender(ser);
501 ser.unsigned_8(sender());
502 ser.unsigned_32(serial);471 ser.unsigned_32(serial);
503}472}
504473
@@ -535,8 +504,7 @@
535}504}
536505
537void CmdMilitarySiteSetSoldierPreference::serialize(StreamWrite& ser) {506void CmdMilitarySiteSetSoldierPreference::serialize(StreamWrite& ser) {
538 ser.unsigned_8(PLCMD_MILITARYSITESETSOLDIERPREFERENCE);507 write_id_and_sender(ser);
539 ser.unsigned_8(sender());
540 ser.unsigned_32(serial);508 ser.unsigned_32(serial);
541 ser.unsigned_8(static_cast<uint8_t>(preference));509 ser.unsigned_8(static_cast<uint8_t>(preference));
542}510}
@@ -605,8 +573,7 @@
605}573}
606574
607void CmdStartOrCancelExpedition::serialize(StreamWrite& ser) {575void CmdStartOrCancelExpedition::serialize(StreamWrite& ser) {
608 ser.unsigned_8(PLCMD_SHIP_EXPEDITION);576 write_id_and_sender(ser);
609 ser.unsigned_8(sender());
610 ser.unsigned_32(serial);577 ser.unsigned_32(serial);
611}578}
612579
@@ -653,8 +620,7 @@
653}620}
654621
655void CmdEnhanceBuilding::serialize(StreamWrite& ser) {622void CmdEnhanceBuilding::serialize(StreamWrite& ser) {
656 ser.unsigned_8(PLCMD_ENHANCEBUILDING);623 write_id_and_sender(ser);
657 ser.unsigned_8(sender());
658 ser.unsigned_32(serial);624 ser.unsigned_32(serial);
659 ser.unsigned_16(bi);625 ser.unsigned_16(bi);
660}626}
@@ -700,8 +666,7 @@
700}666}
701667
702void CmdDismantleBuilding::serialize(StreamWrite& ser) {668void CmdDismantleBuilding::serialize(StreamWrite& ser) {
703 ser.unsigned_8(PLCMD_DISMANTLEBUILDING);669 write_id_and_sender(ser);
704 ser.unsigned_8(sender());
705 ser.unsigned_32(serial);670 ser.unsigned_32(serial);
706}671}
707672
@@ -744,8 +709,7 @@
744}709}
745710
746void CmdEvictWorker::serialize(StreamWrite& ser) {711void CmdEvictWorker::serialize(StreamWrite& ser) {
747 ser.unsigned_8(PLCMD_EVICTWORKER);712 write_id_and_sender(ser);
748 ser.unsigned_8(sender());
749 ser.unsigned_32(serial);713 ser.unsigned_32(serial);
750}714}
751715
@@ -799,8 +763,7 @@
799}763}
800764
801void CmdShipScoutDirection::serialize(StreamWrite& ser) {765void CmdShipScoutDirection::serialize(StreamWrite& ser) {
802 ser.unsigned_8(PLCMD_SHIP_SCOUT);766 write_id_and_sender(ser);
803 ser.unsigned_8(sender());
804 ser.unsigned_32(serial);767 ser.unsigned_32(serial);
805 ser.unsigned_8(static_cast<uint8_t>(dir));768 ser.unsigned_8(static_cast<uint8_t>(dir));
806}769}
@@ -857,8 +820,7 @@
857}820}
858821
859void CmdShipConstructPort::serialize(StreamWrite& ser) {822void CmdShipConstructPort::serialize(StreamWrite& ser) {
860 ser.unsigned_8(PLCMD_SHIP_CONSTRUCT);823 write_id_and_sender(ser);
861 ser.unsigned_8(sender());
862 ser.unsigned_32(serial);824 ser.unsigned_32(serial);
863 write_coords_32(&ser, coords);825 write_coords_32(&ser, coords);
864}826}
@@ -918,8 +880,7 @@
918}880}
919881
920void CmdShipExploreIsland::serialize(StreamWrite& ser) {882void CmdShipExploreIsland::serialize(StreamWrite& ser) {
921 ser.unsigned_8(PLCMD_SHIP_EXPLORE);883 write_id_and_sender(ser);
922 ser.unsigned_8(sender());
923 ser.unsigned_32(serial);884 ser.unsigned_32(serial);
924 ser.unsigned_8(static_cast<uint8_t>(island_explore_direction));885 ser.unsigned_8(static_cast<uint8_t>(island_explore_direction));
925}886}
@@ -967,8 +928,7 @@
967}928}
968929
969void CmdShipSink::serialize(StreamWrite& ser) {930void CmdShipSink::serialize(StreamWrite& ser) {
970 ser.unsigned_8(PLCMD_SHIP_SINK);931 write_id_and_sender(ser);
971 ser.unsigned_8(sender());
972 ser.unsigned_32(serial);932 ser.unsigned_32(serial);
973}933}
974934
@@ -1012,8 +972,7 @@
1012}972}
1013973
1014void CmdShipCancelExpedition::serialize(StreamWrite& ser) {974void CmdShipCancelExpedition::serialize(StreamWrite& ser) {
1015 ser.unsigned_8(PLCMD_SHIP_CANCELEXPEDITION);975 write_id_and_sender(ser);
1016 ser.unsigned_8(sender());
1017 ser.unsigned_32(serial);976 ser.unsigned_32(serial);
1018}977}
1019978
@@ -1124,8 +1083,7 @@
1124}1083}
11251084
1126void CmdSetWarePriority::serialize(StreamWrite& ser) {1085void CmdSetWarePriority::serialize(StreamWrite& ser) {
1127 ser.unsigned_8(PLCMD_SETWAREPRIORITY);1086 write_id_and_sender(ser);
1128 ser.unsigned_8(sender());
1129 ser.unsigned_32(serial_);1087 ser.unsigned_32(serial_);
1130 ser.unsigned_8(type_);1088 ser.unsigned_8(type_);
1131 ser.signed_32(index_);1089 ser.signed_32(index_);
@@ -1238,8 +1196,7 @@
1238}1196}
12391197
1240void CmdSetInputMaxFill::serialize(StreamWrite& ser) {1198void CmdSetInputMaxFill::serialize(StreamWrite& ser) {
1241 ser.unsigned_8(PLCMD_SETINPUTMAXFILL);1199 write_id_and_sender(ser);
1242 ser.unsigned_8(sender());
1243 ser.unsigned_32(serial_);1200 ser.unsigned_32(serial_);
1244 ser.signed_32(index_);1201 ser.signed_32(index_);
1245 if (type_ == wwWARE) {1202 if (type_ == wwWARE) {
@@ -1279,7 +1236,7 @@
1279}1236}
12801237
1281void CmdChangeTargetQuantity::serialize(StreamWrite& ser) {1238void CmdChangeTargetQuantity::serialize(StreamWrite& ser) {
1282 ser.unsigned_8(sender());1239 // Subclasses take care of writing their id() and sender()
1283 ser.unsigned_32(economy());1240 ser.unsigned_32(economy());
1284 ser.unsigned_8(ware_type());1241 ser.unsigned_8(ware_type());
1285}1242}
@@ -1330,7 +1287,7 @@
1330}1287}
13311288
1332void CmdSetWareTargetQuantity::serialize(StreamWrite& ser) {1289void CmdSetWareTargetQuantity::serialize(StreamWrite& ser) {
1333 ser.unsigned_8(PLCMD_SETWARETARGETQUANTITY);1290 write_id_and_sender(ser);
1334 CmdChangeTargetQuantity::serialize(ser);1291 CmdChangeTargetQuantity::serialize(ser);
1335 ser.unsigned_32(permanent_);1292 ser.unsigned_32(permanent_);
1336}1293}
@@ -1377,7 +1334,7 @@
1377}1334}
13781335
1379void CmdResetWareTargetQuantity::serialize(StreamWrite& ser) {1336void CmdResetWareTargetQuantity::serialize(StreamWrite& ser) {
1380 ser.unsigned_8(PLCMD_RESETWARETARGETQUANTITY);1337 write_id_and_sender(ser);
1381 CmdChangeTargetQuantity::serialize(ser);1338 CmdChangeTargetQuantity::serialize(ser);
1382}1339}
13831340
@@ -1428,7 +1385,7 @@
1428}1385}
14291386
1430void CmdSetWorkerTargetQuantity::serialize(StreamWrite& ser) {1387void CmdSetWorkerTargetQuantity::serialize(StreamWrite& ser) {
1431 ser.unsigned_8(PLCMD_SETWORKERTARGETQUANTITY);1388 write_id_and_sender(ser);
1432 CmdChangeTargetQuantity::serialize(ser);1389 CmdChangeTargetQuantity::serialize(ser);
1433 ser.unsigned_32(permanent_);1390 ser.unsigned_32(permanent_);
1434}1391}
@@ -1479,7 +1436,7 @@
1479}1436}
14801437
1481void CmdResetWorkerTargetQuantity::serialize(StreamWrite& ser) {1438void CmdResetWorkerTargetQuantity::serialize(StreamWrite& ser) {
1482 ser.unsigned_8(PLCMD_RESETWORKERTARGETQUANTITY);1439 write_id_and_sender(ser);
1483 CmdChangeTargetQuantity::serialize(ser);1440 CmdChangeTargetQuantity::serialize(ser);
1484}1441}
14851442
@@ -1497,8 +1454,7 @@
1497}1454}
14981455
1499void CmdChangeTrainingOptions::serialize(StreamWrite& ser) {1456void CmdChangeTrainingOptions::serialize(StreamWrite& ser) {
1500 ser.unsigned_8(PLCMD_CHANGETRAININGOPTIONS);1457 write_id_and_sender(ser);
1501 ser.unsigned_8(sender());
1502 ser.unsigned_32(serial);1458 ser.unsigned_32(serial);
1503 ser.unsigned_8(static_cast<uint8_t>(attribute));1459 ser.unsigned_8(static_cast<uint8_t>(attribute));
1504 ser.unsigned_16(value);1460 ser.unsigned_16(value);
@@ -1550,8 +1506,7 @@
1550}1506}
15511507
1552void CmdDropSoldier::serialize(StreamWrite& ser) {1508void CmdDropSoldier::serialize(StreamWrite& ser) {
1553 ser.unsigned_8(PLCMD_DROPSOLDIER);1509 write_id_and_sender(ser);
1554 ser.unsigned_8(sender());
1555 ser.unsigned_32(serial);1510 ser.unsigned_32(serial);
1556 ser.unsigned_32(soldier);1511 ser.unsigned_32(soldier);
1557}1512}
@@ -1625,8 +1580,7 @@
1625}1580}
16261581
1627void CmdChangeSoldierCapacity::serialize(StreamWrite& ser) {1582void CmdChangeSoldierCapacity::serialize(StreamWrite& ser) {
1628 ser.unsigned_8(PLCMD_CHANGESOLDIERCAPACITY);1583 write_id_and_sender(ser);
1629 ser.unsigned_8(sender());
1630 ser.unsigned_32(serial);1584 ser.unsigned_32(serial);
1631 ser.signed_16(val);1585 ser.signed_16(val);
1632}1586}
@@ -1702,8 +1656,7 @@
1702}1656}
17031657
1704void CmdEnemyFlagAction::serialize(StreamWrite& ser) {1658void CmdEnemyFlagAction::serialize(StreamWrite& ser) {
1705 ser.unsigned_8(PLCMD_ENEMYFLAGACTION);1659 write_id_and_sender(ser);
1706 ser.unsigned_8(sender());
1707 ser.unsigned_8(1);1660 ser.unsigned_8(1);
1708 ser.unsigned_32(serial);1661 ser.unsigned_32(serial);
1709 ser.unsigned_8(sender());1662 ser.unsigned_8(sender());
@@ -1808,8 +1761,7 @@
1808}1761}
18091762
1810void CmdMessageSetStatusRead::serialize(StreamWrite& ser) {1763void CmdMessageSetStatusRead::serialize(StreamWrite& ser) {
1811 ser.unsigned_8(PLCMD_MESSAGESETSTATUSREAD);1764 write_id_and_sender(ser);
1812 ser.unsigned_8(sender());
1813 ser.unsigned_32(message_id().value());1765 ser.unsigned_32(message_id().value());
1814}1766}
18151767
@@ -1821,8 +1773,7 @@
1821}1773}
18221774
1823void CmdMessageSetStatusArchived::serialize(StreamWrite& ser) {1775void CmdMessageSetStatusArchived::serialize(StreamWrite& ser) {
1824 ser.unsigned_8(PLCMD_MESSAGESETSTATUSARCHIVED);1776 write_id_and_sender(ser);
1825 ser.unsigned_8(sender());
1826 ser.unsigned_32(message_id().value());1777 ser.unsigned_32(message_id().value());
1827}1778}
18281779
@@ -1888,8 +1839,7 @@
1888}1839}
18891840
1890void CmdSetStockPolicy::serialize(StreamWrite& ser) {1841void CmdSetStockPolicy::serialize(StreamWrite& ser) {
1891 ser.unsigned_8(PLCMD_SETSTOCKPOLICY);1842 write_id_and_sender(ser);
1892 ser.unsigned_8(sender());
1893 ser.unsigned_32(warehouse_);1843 ser.unsigned_32(warehouse_);
1894 ser.unsigned_8(isworker_);1844 ser.unsigned_8(isworker_);
1895 ser.unsigned_8(ware_);1845 ser.unsigned_8(ware_);
@@ -1972,8 +1922,7 @@
1972}1922}
19731923
1974void CmdProposeTrade::serialize(StreamWrite& ser) {1924void CmdProposeTrade::serialize(StreamWrite& ser) {
1975 ser.unsigned_8(PLCMD_PROPOSE_TRADE);1925 write_id_and_sender(ser);
1976 ser.unsigned_8(sender());
1977 ser.unsigned_32(trade_.initiator);1926 ser.unsigned_32(trade_.initiator);
1978 ser.unsigned_32(trade_.receiver);1927 ser.unsigned_32(trade_.receiver);
1979 serialize_bill_of_materials(trade_.items_to_send, &ser);1928 serialize_bill_of_materials(trade_.items_to_send, &ser);
19801929
=== modified file 'src/logic/playercommand.h'
--- src/logic/playercommand.h 2019-06-23 14:28:50 +0000
+++ src/logic/playercommand.h 2019-08-26 10:38:04 +0000
@@ -52,6 +52,8 @@
52 PlayerCommand() : GameLogicCommand(0), sender_(0), cmdserial_(0) {52 PlayerCommand() : GameLogicCommand(0), sender_(0), cmdserial_(0) {
53 }53 }
5454
55 void write_id_and_sender(StreamWrite& ser);
56
55 PlayerNumber sender() const {57 PlayerNumber sender() const {
56 return sender_;58 return sender_;
57 }59 }
@@ -62,6 +64,7 @@
62 cmdserial_ = s;64 cmdserial_ = s;
63 }65 }
6466
67 // For networking and replays
65 virtual void serialize(StreamWrite&) = 0;68 virtual void serialize(StreamWrite&) = 0;
66 static Widelands::PlayerCommand* deserialize(StreamRead&);69 static Widelands::PlayerCommand* deserialize(StreamRead&);
6770
@@ -138,7 +141,7 @@
138 void read(FileRead&, EditorGameBase&, MapObjectLoader&) override;141 void read(FileRead&, EditorGameBase&, MapObjectLoader&) override;
139142
140 QueueCommandTypes id() const override {143 QueueCommandTypes id() const override {
141 return QueueCommandTypes::kFlag;144 return QueueCommandTypes::kBuildFlag;
142 }145 }
143146
144 void execute(Game&) override;147 void execute(Game&) override;
@@ -207,7 +210,7 @@
207 void read(FileRead&, EditorGameBase&, MapObjectLoader&) override;210 void read(FileRead&, EditorGameBase&, MapObjectLoader&) override;
208211
209 QueueCommandTypes id() const override {212 QueueCommandTypes id() const override {
210 return QueueCommandTypes::kStopBuilding;213 return QueueCommandTypes::kStartStopBuilding;
211 }214 }
212215
213 explicit CmdStartStopBuilding(StreamRead&);216 explicit CmdStartStopBuilding(StreamRead&);
@@ -257,7 +260,7 @@
257 void read(FileRead&, EditorGameBase&, MapObjectLoader&) override;260 void read(FileRead&, EditorGameBase&, MapObjectLoader&) override;
258261
259 QueueCommandTypes id() const override {262 QueueCommandTypes id() const override {
260 return QueueCommandTypes::kPortStartExpedition;263 return QueueCommandTypes::kStartOrCancelExpedition;
261 }264 }
262265
263 explicit CmdStartOrCancelExpedition(StreamRead&);266 explicit CmdStartOrCancelExpedition(StreamRead&);
@@ -356,7 +359,7 @@
356 void read(FileRead&, EditorGameBase&, MapObjectLoader&) override;359 void read(FileRead&, EditorGameBase&, MapObjectLoader&) override;
357360
358 QueueCommandTypes id() const override {361 QueueCommandTypes id() const override {
359 return QueueCommandTypes::kShipScout;362 return QueueCommandTypes::kShipScoutDirection;
360 }363 }
361364
362 explicit CmdShipScoutDirection(StreamRead&);365 explicit CmdShipScoutDirection(StreamRead&);
@@ -408,7 +411,7 @@
408 void read(FileRead&, EditorGameBase&, MapObjectLoader&) override;411 void read(FileRead&, EditorGameBase&, MapObjectLoader&) override;
409412
410 QueueCommandTypes id() const override {413 QueueCommandTypes id() const override {
411 return QueueCommandTypes::kShipExplore;414 return QueueCommandTypes::kShipExploreIsland;
412 }415 }
413416
414 explicit CmdShipExploreIsland(StreamRead&);417 explicit CmdShipExploreIsland(StreamRead&);
@@ -431,7 +434,7 @@
431 void read(FileRead&, EditorGameBase&, MapObjectLoader&) override;434 void read(FileRead&, EditorGameBase&, MapObjectLoader&) override;
432435
433 QueueCommandTypes id() const override {436 QueueCommandTypes id() const override {
434 return QueueCommandTypes::kSinkShip;437 return QueueCommandTypes::kShipSink;
435 }438 }
436439
437 explicit CmdShipSink(StreamRead&);440 explicit CmdShipSink(StreamRead&);
438441
=== modified file 'src/logic/queue_cmd_factory.cc'
--- src/logic/queue_cmd_factory.cc 2019-06-09 10:33:51 +0000
+++ src/logic/queue_cmd_factory.cc 2019-08-26 10:38:04 +0000
@@ -34,13 +34,13 @@
34 switch (id) {34 switch (id) {
35 case QueueCommandTypes::kBuild:35 case QueueCommandTypes::kBuild:
36 return *new CmdBuild();36 return *new CmdBuild();
37 case QueueCommandTypes::kFlag:37 case QueueCommandTypes::kBuildFlag:
38 return *new CmdBuildFlag();38 return *new CmdBuildFlag();
39 case QueueCommandTypes::kBuildRoad:39 case QueueCommandTypes::kBuildRoad:
40 return *new CmdBuildRoad();40 return *new CmdBuildRoad();
41 case QueueCommandTypes::kFlagAction:41 case QueueCommandTypes::kFlagAction:
42 return *new CmdFlagAction();42 return *new CmdFlagAction();
43 case QueueCommandTypes::kStopBuilding:43 case QueueCommandTypes::kStartStopBuilding:
44 return *new CmdStartStopBuilding();44 return *new CmdStartStopBuilding();
45 case QueueCommandTypes::kEnhanceBuilding:45 case QueueCommandTypes::kEnhanceBuilding:
46 return *new CmdEnhanceBuilding();46 return *new CmdEnhanceBuilding();
@@ -80,17 +80,17 @@
80 return *new CmdMilitarySiteSetSoldierPreference();80 return *new CmdMilitarySiteSetSoldierPreference();
81 case QueueCommandTypes::kProposeTrade:81 case QueueCommandTypes::kProposeTrade:
82 return *new CmdProposeTrade();82 return *new CmdProposeTrade();
83 case QueueCommandTypes::kSinkShip:83 case QueueCommandTypes::kShipSink:
84 return *new CmdShipSink();84 return *new CmdShipSink();
85 case QueueCommandTypes::kShipCancelExpedition:85 case QueueCommandTypes::kShipCancelExpedition:
86 return *new CmdShipCancelExpedition();86 return *new CmdShipCancelExpedition();
87 case QueueCommandTypes::kPortStartExpedition:87 case QueueCommandTypes::kStartOrCancelExpedition:
88 return *new CmdStartOrCancelExpedition();88 return *new CmdStartOrCancelExpedition();
89 case QueueCommandTypes::kShipConstructPort:89 case QueueCommandTypes::kShipConstructPort:
90 return *new CmdShipConstructPort();90 return *new CmdShipConstructPort();
91 case QueueCommandTypes::kShipScout:91 case QueueCommandTypes::kShipScoutDirection:
92 return *new CmdShipScoutDirection();92 return *new CmdShipScoutDirection();
93 case QueueCommandTypes::kShipExplore:93 case QueueCommandTypes::kShipExploreIsland:
94 return *new CmdShipExploreIsland();94 return *new CmdShipExploreIsland();
95 case QueueCommandTypes::kDestroyMapObject:95 case QueueCommandTypes::kDestroyMapObject:
96 return *new CmdDestroyMapObject();96 return *new CmdDestroyMapObject();
9797
=== modified file 'src/logic/queue_cmd_ids.h'
--- src/logic/queue_cmd_ids.h 2019-06-09 10:33:51 +0000
+++ src/logic/queue_cmd_ids.h 2019-08-26 10:38:04 +0000
@@ -33,17 +33,21 @@
3333
34namespace Widelands {34namespace Widelands {
3535
36enum class QueueCommandTypes {36// The command types are used by the QueueCmdFactory, for network serialization
37// and for savegame compatibility.
38// DO NOT change the order
39// TODO(GunChleoc): Whenever we break savegame compatibility, clean this up and change data type to uint16_t.
40enum class QueueCommandTypes : uint8_t {
3741
38 /* ID zero is reserved and must never be used */42 /* ID zero is reserved and must never be used */
39 kNone = 0,43 kNone = 0,
4044
41 /* PLAYER COMMANDS BELOW */45 /* PLAYER COMMANDS BELOW */
42 kBuild,46 kBuild,
43 kFlag,47 kBuildFlag,
44 kBuildRoad,48 kBuildRoad,
45 kFlagAction,49 kFlagAction,
46 kStopBuilding,50 kStartStopBuilding,
47 kEnhanceBuilding,51 kEnhanceBuilding,
48 kBulldoze,52 kBulldoze,
4953
@@ -73,12 +77,14 @@
73 kMilitarysiteSetSoldierPreference,77 kMilitarysiteSetSoldierPreference,
74 kProposeTrade, // 2778 kProposeTrade, // 27
7579
76 kSinkShip = 121,80 kShipSink = 121,
77 kShipCancelExpedition,81 kShipCancelExpedition,
78 kPortStartExpedition,82 kStartOrCancelExpedition,
79 kShipConstructPort,83 kShipConstructPort,
80 kShipScout,84 kShipScoutDirection,
81 kShipExplore,85 kShipExploreIsland,
86
87 // The commands below are never serialized, but we still keep the IDs stable for savegame compatibility.
8288
83 kDestroyMapObject,89 kDestroyMapObject,
84 kAct, // 12890 kAct, // 128
8591
=== modified file 'src/logic/replay.cc'
--- src/logic/replay.cc 2019-02-24 22:50:04 +0000
+++ src/logic/replay.cc 2019-08-26 10:38:04 +0000
@@ -38,8 +38,9 @@
38namespace Widelands {38namespace Widelands {
3939
40// File format definitions40// File format definitions
41constexpr uint32_t kReplayKnownToDesync = 0x2E21A100;
41constexpr uint32_t kReplayMagic = 0x2E21A101;42constexpr uint32_t kReplayMagic = 0x2E21A101;
42constexpr uint8_t kCurrentPacketVersion = 2;43constexpr uint8_t kCurrentPacketVersion = 3;
43constexpr uint32_t kSyncInterval = 200;44constexpr uint32_t kSyncInterval = 200;
4445
45enum { pkt_end = 2, pkt_playercommand = 3, pkt_syncreport = 4 };46enum { pkt_end = 2, pkt_playercommand = 3, pkt_syncreport = 4 };
@@ -93,13 +94,15 @@
9394
94 try {95 try {
95 const uint32_t magic = cmdlog_->unsigned_32();96 const uint32_t magic = cmdlog_->unsigned_32();
96 if (magic == 0x2E21A100)97 if (magic == kReplayKnownToDesync) {
97 // Note: This was never released as part of a build98 // Note: This was never released as part of a build
98 throw wexception("%s is a replay from a version that is known to have desync "99 throw wexception("%s is a replay from a version that is known to have desync "
99 "problems",100 "problems",
100 filename.c_str());101 filename.c_str());
101 if (magic != kReplayMagic)102 }
103 if (magic != kReplayMagic) {
102 throw wexception("%s apparently not a valid replay file", filename.c_str());104 throw wexception("%s apparently not a valid replay file", filename.c_str());
105 }
103106
104 const uint8_t packet_version = cmdlog_->unsigned_8();107 const uint8_t packet_version = cmdlog_->unsigned_8();
105 if (packet_version != kCurrentPacketVersion) {108 if (packet_version != kCurrentPacketVersion) {

Subscribers

People subscribed via source and target branches

to status/vote changes: