Ticket #4277: reveal-shore-fix.patch
File reveal-shore-fix.patch, 5.2 KB (added by , 8 years ago) |
---|
-
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 … … 473 479 // Store the LOS data, if any 474 480 CmpPtr<ICmpVision> cmpVision(GetSimContext(), ent); 475 481 if (cmpVision) 482 { 476 483 entdata.visionRange = cmpVision->GetRange(); 484 entdata.revealShore = cmpVision->GetRevealShore() ? 1 : 0; 485 } 477 486 CmpPtr<ICmpVisibility> cmpVisibility(GetSimContext(), ent); 478 487 if (cmpVisibility) 479 488 entdata.retainInFog = (cmpVisibility->GetRetainInFog() ? 1 : 0); … … 561 570 CFixedVector2D pos(it->second.x, it->second.z); 562 571 LosRemove(it->second.owner, it->second.visionRange, pos); 563 572 LosAdd(msgData.to, it->second.visionRange, pos); 573 574 if (it->second.revealShore) 575 { 576 RevealShore(it->second.owner, false); 577 RevealShore(msgData.to, true); 578 } 564 579 } 565 580 566 581 ENSURE(-128 <= msgData.to && msgData.to <= 127); … … 751 766 { 752 767 LosAdd(it->second.owner, it->second.visionRange, CFixedVector2D(it->second.x, it->second.z)); 753 768 AddToTile(PosToLosTilesHelper(it->second.x, it->second.z), it->first); 769 770 if (it->second.revealShore) 771 RevealShore(it->second.owner, true); 754 772 } 755 773 } 756 774 -
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);