Ticket #4277: reveal-shore.patch
File reveal-shore.patch, 8.6 KB (added by , 8 years ago) |
---|
-
source/simulation2/components/CCmpPathfinder.cpp
1 /* Copyright (C) 201 5Wildfire Games.1 /* Copyright (C) 2016 Wildfire Games. 2 2 * This file is part of 0 A.D. 3 3 * 4 4 * 0 A.D. is free software: you can redistribute it and/or modify … … 135 135 } 136 136 }; 137 137 138 void CCmpPathfinder::Serialize(ISerializer& serialize) 138 template<typename S> 139 void CCmpPathfinder::SerializeCommon(S& serialize) 139 140 { 140 141 SerializeVector<SerializeLongRequest>()(serialize, "long requests", m_AsyncLongPathRequests); 141 142 SerializeVector<SerializeShortRequest>()(serialize, "short requests", m_AsyncShortPathRequests); 142 143 serialize.NumberU32_Unbounded("next ticket", m_NextAsyncTicket); 143 144 serialize.NumberU16_Unbounded("same turn moves count", m_SameTurnMovesCount); 145 serialize.NumberU16_Unbounded("map size", m_MapSize); 144 146 } 145 147 148 void CCmpPathfinder::Serialize(ISerializer& serialize) 149 { 150 SerializeCommon(serialize); 151 } 152 146 153 void CCmpPathfinder::Deserialize(const CParamNode& paramNode, IDeserializer& deserialize) 147 154 { 148 155 Init(paramNode); 149 156 150 SerializeVector<SerializeLongRequest>()(deserialize, "long requests", m_AsyncLongPathRequests); 151 SerializeVector<SerializeShortRequest>()(deserialize, "short requests", m_AsyncShortPathRequests); 152 deserialize.NumberU32_Unbounded("next ticket", m_NextAsyncTicket); 153 deserialize.NumberU16_Unbounded("same turn moves count", m_SameTurnMovesCount); 157 SerializeCommon(deserialize); 154 158 } 155 159 156 160 void CCmpPathfinder::HandleMessage(const CMessage& msg, bool UNUSED(global)) -
source/simulation2/components/CCmpPathfinder_Common.h
1 /* Copyright (C) 201 5Wildfire Games.1 /* Copyright (C) 2016 Wildfire Games. 2 2 * This file is part of 0 A.D. 3 3 * 4 4 * 0 A.D. is free software: you can redistribute it and/or modify … … 193 193 194 194 virtual void Deinit(); 195 195 196 template<typename S> 197 void SerializeCommon(S& serialize); 198 196 199 virtual void Serialize(ISerializer& serialize); 197 200 198 201 virtual void Deserialize(const CParamNode& paramNode, IDeserializer& deserialize); -
source/simulation2/components/CCmpRangeManager.cpp
170 170 */ 171 171 struct EntityData 172 172 { 173 EntityData() : visibilities(0), size(0), retainInFog(0), owner(-1), inWorld(0), flags(1), scriptedVisibility(0) { } 173 EntityData() : 174 visibilities(0), size(0), 175 owner(-1), retainInFog(0), inWorld(0), revealShore(0), 176 flags(1), scriptedVisibility(0) 177 { } 174 178 entity_pos_t x, z; 175 179 entity_pos_t visionRange; 176 180 u32 visibilities; // 2-bit visibility, per player 177 181 u32 size; 182 i8 owner; 178 183 u8 retainInFog; // boolean 179 i8 owner;180 184 u8 inWorld; // boolean 185 u8 revealShore; // boolean 181 186 u8 flags; // See GetEntityFlagMask 182 187 u8 scriptedVisibility; // boolean, see ComputeLosVisibility 183 188 }; … … 236 241 serialize.NumberFixed_Unbounded("vision", value.visionRange); 237 242 serialize.NumberU32_Unbounded("visibilities", value.visibilities); 238 243 serialize.NumberU32_Unbounded("size", value.size); 244 serialize.NumberI8_Unbounded("owner", value.owner); 239 245 serialize.NumberU8("retain in fog", value.retainInFog, 0, 1); 240 serialize.NumberI8_Unbounded("owner", value.owner);241 246 serialize.NumberU8("in world", value.inWorld, 0, 1); 247 serialize.NumberU8("reveal shore", value.revealShore, 0, 1); 242 248 serialize.NumberU8_Unbounded("flags", value.flags); 243 serialize.NumberU8 _Unbounded("scripted visibility", value.scriptedVisibility);249 serialize.NumberU8("scripted visibility", value.scriptedVisibility, 0, 1); 244 250 } 245 251 }; 246 252 … … 293 299 componentManager.SubscribeGloballyToMessageType(MT_Destroy); 294 300 componentManager.SubscribeGloballyToMessageType(MT_VisionRangeChanged); 295 301 302 componentManager.SubscribeToMessageType(MT_Deserialized); 303 296 304 componentManager.SubscribeToMessageType(MT_Update); 297 305 298 306 componentManager.SubscribeToMessageType(MT_RenderSubmit); // for debug overlays … … 440 448 Init(paramNode); 441 449 442 450 SerializeCommon(deserialize); 443 444 // Reinitialise subdivisions and LOS data445 m_Deserializing = true;446 ResetDerivedData();447 m_Deserializing = false;448 451 } 449 452 450 453 virtual void HandleMessage(const CMessage& msg, bool UNUSED(global)) … … 451 454 { 452 455 switch (msg.GetType()) 453 456 { 457 case MT_Deserialized: 458 { 459 // Reinitialize subdivisions and LOS data after all 460 // other components have been deserialized. 461 m_Deserializing = true; 462 ResetDerivedData(); 463 m_Deserializing = false; 464 break; 465 } 454 466 case MT_Create: 455 467 { 456 468 const CMessageCreate& msgData = static_cast<const CMessageCreate&> (msg); … … 473 485 // Store the LOS data, if any 474 486 CmpPtr<ICmpVision> cmpVision(GetSimContext(), ent); 475 487 if (cmpVision) 488 { 476 489 entdata.visionRange = cmpVision->GetRange(); 490 entdata.revealShore = cmpVision->GetRevealShore() ? 1 : 0; 491 } 477 492 CmpPtr<ICmpVisibility> cmpVisibility(GetSimContext(), ent); 478 493 if (cmpVisibility) 479 494 entdata.retainInFog = (cmpVisibility->GetRetainInFog() ? 1 : 0); … … 561 576 CFixedVector2D pos(it->second.x, it->second.z); 562 577 LosRemove(it->second.owner, it->second.visionRange, pos); 563 578 LosAdd(msgData.to, it->second.visionRange, pos); 579 580 if (it->second.revealShore) 581 { 582 RevealShore(it->second.owner, false); 583 RevealShore(msgData.to, true); 584 } 564 585 } 565 586 566 587 ENSURE(-128 <= msgData.to && msgData.to <= 127); … … 751 772 { 752 773 LosAdd(it->second.owner, it->second.visionRange, CFixedVector2D(it->second.x, it->second.z)); 753 774 AddToTile(PosToLosTilesHelper(it->second.x, it->second.z), it->first); 775 776 if (it->second.revealShore) 777 RevealShore(it->second.owner, true); 754 778 } 755 779 } 756 780 -
source/simulation2/components/CCmpVision.cpp
40 40 // Template state: 41 41 42 42 entity_pos_t m_Range, m_BaseRange; 43 44 // TODO: The reveal shore system should be replaced by a general 45 // system of "special" vision methods that are not ranges. 43 46 bool m_RevealShore; 44 47 45 48 static std::string GetSchema() … … 90 93 break; 91 94 92 95 ReloadRange(); 93 94 if (!m_RevealShore)95 break;96 CmpPtr<ICmpRangeManager> cmpRangeManager(GetSystemEntity());97 cmpRangeManager->RevealShore(msgData.from, false);98 cmpRangeManager->RevealShore(msgData.to, true);99 96 break; 100 97 } 101 98 case MT_ValueModification: … … 137 134 { 138 135 return m_Range; 139 136 } 137 138 virtual bool GetRevealShore() 139 { 140 return m_RevealShore; 141 } 140 142 }; 141 143 142 144 REGISTER_COMPONENT_TYPE(Vision) -
source/simulation2/components/ICmpVision.h
1 /* Copyright (C) 201 4Wildfire Games.1 /* Copyright (C) 2016 Wildfire Games. 2 2 * This file is part of 0 A.D. 3 3 * 4 4 * 0 A.D. is free software: you can redistribute it and/or modify … … 29 29 { 30 30 public: 31 31 virtual entity_pos_t GetRange() = 0; 32 virtual bool GetRevealShore() = 0; 32 33 33 34 DECLARE_INTERFACE_TYPE(Vision) 34 35 }; -
source/simulation2/components/tests/test_RangeManager.h
1 /* Copyright (C) 201 5Wildfire Games.1 /* Copyright (C) 2016 Wildfire Games. 2 2 * This file is part of 0 A.D. 3 3 * 4 4 * 0 A.D. is free software: you can redistribute it and/or modify … … 31 31 DEFAULT_MOCK_COMPONENT() 32 32 33 33 virtual entity_pos_t GetRange() { return entity_pos_t::FromInt(66); } 34 virtual bool GetRetainInFog() { return false; } 35 virtual bool GetAlwaysVisible() { return false; } 34 virtual bool GetRevealShore() { return false; } 36 35 }; 37 36 38 37 class MockPosition : public ICmpPosition … … 85 84 CXeromyces::Terminate(); 86 85 } 87 86 87 // TODO It would be nice to call Verify() with the shore revealing system 88 // but that means testing on an actual map, with water and land. 89 88 90 void test_basic() 89 91 { 90 92 ComponentTestHelper test(g_ScriptRuntime);