Changeset View
Changeset View
Standalone View
Standalone View
ps/trunk/source/simulation2/components/CCmpAIManager.cpp
Show All 32 Lines | |||||
#include "ps/TemplateLoader.h" | #include "ps/TemplateLoader.h" | ||||
#include "ps/Util.h" | #include "ps/Util.h" | ||||
#include "simulation2/components/ICmpAIInterface.h" | #include "simulation2/components/ICmpAIInterface.h" | ||||
#include "simulation2/components/ICmpCommandQueue.h" | #include "simulation2/components/ICmpCommandQueue.h" | ||||
#include "simulation2/components/ICmpObstructionManager.h" | #include "simulation2/components/ICmpObstructionManager.h" | ||||
#include "simulation2/components/ICmpRangeManager.h" | #include "simulation2/components/ICmpRangeManager.h" | ||||
#include "simulation2/components/ICmpTemplateManager.h" | #include "simulation2/components/ICmpTemplateManager.h" | ||||
#include "simulation2/components/ICmpTerritoryManager.h" | #include "simulation2/components/ICmpTerritoryManager.h" | ||||
#include "simulation2/helpers/HierarchicalPathfinder.h" | |||||
#include "simulation2/helpers/LongPathfinder.h" | #include "simulation2/helpers/LongPathfinder.h" | ||||
#include "simulation2/serialization/DebugSerializer.h" | #include "simulation2/serialization/DebugSerializer.h" | ||||
#include "simulation2/serialization/StdDeserializer.h" | #include "simulation2/serialization/StdDeserializer.h" | ||||
#include "simulation2/serialization/StdSerializer.h" | #include "simulation2/serialization/StdSerializer.h" | ||||
#include "simulation2/serialization/SerializeTemplates.h" | #include "simulation2/serialization/SerializeTemplates.h" | ||||
extern void QuitEngine(); | extern void QuitEngine(); | ||||
▲ Show 20 Lines • Show All 277 Lines • ▼ Show 20 Lines | static JS::Value ComputePath(ScriptInterface::CxPrivate* pCxPrivate, | ||||
return retVal; | return retVal; | ||||
} | } | ||||
void ComputePath(const CFixedVector2D& pos, const CFixedVector2D& goal, pass_class_t passClass, std::vector<CFixedVector2D>& waypoints) | void ComputePath(const CFixedVector2D& pos, const CFixedVector2D& goal, pass_class_t passClass, std::vector<CFixedVector2D>& waypoints) | ||||
{ | { | ||||
WaypointPath ret; | WaypointPath ret; | ||||
PathGoal pathGoal = { PathGoal::POINT, goal.X, goal.Y }; | PathGoal pathGoal = { PathGoal::POINT, goal.X, goal.Y }; | ||||
m_LongPathfinder.ComputePath(pos.X, pos.Y, pathGoal, passClass, ret); | m_LongPathfinder.ComputePath(m_HierarchicalPathfinder, pos.X, pos.Y, pathGoal, passClass, ret); | ||||
for (Waypoint& wp : ret.m_Waypoints) | for (Waypoint& wp : ret.m_Waypoints) | ||||
waypoints.emplace_back(wp.x, wp.z); | waypoints.emplace_back(wp.x, wp.z); | ||||
} | } | ||||
static CParamNode GetTemplate(ScriptInterface::CxPrivate* pCxPrivate, const std::string& name) | static CParamNode GetTemplate(ScriptInterface::CxPrivate* pCxPrivate, const std::string& name) | ||||
{ | { | ||||
ENSURE(pCxPrivate->pCBData); | ENSURE(pCxPrivate->pCBData); | ||||
▲ Show 20 Lines • Show All 153 Lines • ▼ Show 20 Lines | bool RunGamestateInit(const shared_ptr<ScriptInterface::StructuredClone>& gameState, const Grid<NavcellData>& passabilityMap, const Grid<u8>& territoryMap, | ||||
m_ScriptInterface->ReadStructuredClone(gameState, &state); | m_ScriptInterface->ReadStructuredClone(gameState, &state); | ||||
ScriptInterface::ToJSVal(cx, &m_PassabilityMapVal, passabilityMap); | ScriptInterface::ToJSVal(cx, &m_PassabilityMapVal, passabilityMap); | ||||
ScriptInterface::ToJSVal(cx, &m_TerritoryMapVal, territoryMap); | ScriptInterface::ToJSVal(cx, &m_TerritoryMapVal, territoryMap); | ||||
m_PassabilityMap = passabilityMap; | m_PassabilityMap = passabilityMap; | ||||
m_NonPathfindingPassClasses = nonPathfindingPassClassMasks; | m_NonPathfindingPassClasses = nonPathfindingPassClassMasks; | ||||
m_PathfindingPassClasses = pathfindingPassClassMasks; | m_PathfindingPassClasses = pathfindingPassClassMasks; | ||||
m_LongPathfinder.Reload(&m_PassabilityMap, nonPathfindingPassClassMasks, pathfindingPassClassMasks); | m_LongPathfinder.Reload(&m_PassabilityMap); | ||||
m_HierarchicalPathfinder.Recompute(&m_PassabilityMap, nonPathfindingPassClassMasks, pathfindingPassClassMasks); | |||||
if (m_HasSharedComponent) | if (m_HasSharedComponent) | ||||
{ | { | ||||
m_ScriptInterface->SetProperty(state, "passabilityMap", m_PassabilityMapVal, true); | m_ScriptInterface->SetProperty(state, "passabilityMap", m_PassabilityMapVal, true); | ||||
m_ScriptInterface->SetProperty(state, "territoryMap", m_TerritoryMapVal, true); | m_ScriptInterface->SetProperty(state, "territoryMap", m_TerritoryMapVal, true); | ||||
m_ScriptInterface->CallFunctionVoid(m_SharedAIObj, "init", state); | m_ScriptInterface->CallFunctionVoid(m_SharedAIObj, "init", state); | ||||
for (size_t i = 0; i < m_Players.size(); ++i) | for (size_t i = 0; i < m_Players.size(); ++i) | ||||
Show All 15 Lines | public: | ||||
void UpdatePathfinder(const Grid<NavcellData>& passabilityMap, bool globallyDirty, const Grid<u8>& dirtinessGrid, bool justDeserialized, | void UpdatePathfinder(const Grid<NavcellData>& passabilityMap, bool globallyDirty, const Grid<u8>& dirtinessGrid, bool justDeserialized, | ||||
const std::map<std::string, pass_class_t>& nonPathfindingPassClassMasks, const std::map<std::string, pass_class_t>& pathfindingPassClassMasks) | const std::map<std::string, pass_class_t>& nonPathfindingPassClassMasks, const std::map<std::string, pass_class_t>& pathfindingPassClassMasks) | ||||
{ | { | ||||
ENSURE(m_CommandsComputed); | ENSURE(m_CommandsComputed); | ||||
bool dimensionChange = m_PassabilityMap.m_W != passabilityMap.m_W || m_PassabilityMap.m_H != passabilityMap.m_H; | bool dimensionChange = m_PassabilityMap.m_W != passabilityMap.m_W || m_PassabilityMap.m_H != passabilityMap.m_H; | ||||
m_PassabilityMap = passabilityMap; | m_PassabilityMap = passabilityMap; | ||||
if (globallyDirty) | if (globallyDirty) | ||||
m_LongPathfinder.Reload(&m_PassabilityMap, nonPathfindingPassClassMasks, pathfindingPassClassMasks); | { | ||||
m_LongPathfinder.Reload(&m_PassabilityMap); | |||||
m_HierarchicalPathfinder.Recompute(&m_PassabilityMap, nonPathfindingPassClassMasks, pathfindingPassClassMasks); | |||||
} | |||||
else | else | ||||
m_LongPathfinder.Update(&m_PassabilityMap, dirtinessGrid); | { | ||||
m_LongPathfinder.Update(&m_PassabilityMap); | |||||
m_HierarchicalPathfinder.Update(&m_PassabilityMap, dirtinessGrid); | |||||
} | |||||
JSContext* cx = m_ScriptInterface->GetContext(); | JSContext* cx = m_ScriptInterface->GetContext(); | ||||
if (dimensionChange || justDeserialized) | if (dimensionChange || justDeserialized) | ||||
ScriptInterface::ToJSVal(cx, &m_PassabilityMapVal, m_PassabilityMap); | ScriptInterface::ToJSVal(cx, &m_PassabilityMapVal, m_PassabilityMap); | ||||
else | else | ||||
{ | { | ||||
// Avoid a useless memory reallocation followed by a garbage collection. | // Avoid a useless memory reallocation followed by a garbage collection. | ||||
JSAutoRequest rq(cx); | JSAutoRequest rq(cx); | ||||
▲ Show 20 Lines • Show All 250 Lines • ▼ Show 20 Lines | void Deserialize(std::istream& stream, u32 numAis) | ||||
// AI pathfinder | // AI pathfinder | ||||
SerializeMap<SerializeString, SerializeU16_Unbounded>()(deserializer, "non pathfinding pass classes", m_NonPathfindingPassClasses); | SerializeMap<SerializeString, SerializeU16_Unbounded>()(deserializer, "non pathfinding pass classes", m_NonPathfindingPassClasses); | ||||
SerializeMap<SerializeString, SerializeU16_Unbounded>()(deserializer, "pathfinding pass classes", m_PathfindingPassClasses); | SerializeMap<SerializeString, SerializeU16_Unbounded>()(deserializer, "pathfinding pass classes", m_PathfindingPassClasses); | ||||
u16 mapW, mapH; | u16 mapW, mapH; | ||||
deserializer.NumberU16_Unbounded("pathfinder grid w", mapW); | deserializer.NumberU16_Unbounded("pathfinder grid w", mapW); | ||||
deserializer.NumberU16_Unbounded("pathfinder grid h", mapH); | deserializer.NumberU16_Unbounded("pathfinder grid h", mapH); | ||||
m_PassabilityMap = Grid<NavcellData>(mapW, mapH); | m_PassabilityMap = Grid<NavcellData>(mapW, mapH); | ||||
deserializer.RawBytes("pathfinder grid data", (u8*)m_PassabilityMap.m_Data, mapW*mapH*sizeof(NavcellData)); | deserializer.RawBytes("pathfinder grid data", (u8*)m_PassabilityMap.m_Data, mapW*mapH*sizeof(NavcellData)); | ||||
m_LongPathfinder.Reload(&m_PassabilityMap, m_NonPathfindingPassClasses, m_PathfindingPassClasses); | m_LongPathfinder.Reload(&m_PassabilityMap); | ||||
m_HierarchicalPathfinder.Recompute(&m_PassabilityMap, m_NonPathfindingPassClasses, m_PathfindingPassClasses); | |||||
} | } | ||||
int getPlayerSize() | int getPlayerSize() | ||||
{ | { | ||||
return m_Players.size(); | return m_Players.size(); | ||||
} | } | ||||
void RegisterSerializablePrototype(std::wstring name, JS::HandleValue proto) | void RegisterSerializablePrototype(std::wstring name, JS::HandleValue proto) | ||||
▲ Show 20 Lines • Show All 103 Lines • ▼ Show 20 Lines | private: | ||||
shared_ptr<ScriptInterface::StructuredClone> m_GameState; | shared_ptr<ScriptInterface::StructuredClone> m_GameState; | ||||
Grid<NavcellData> m_PassabilityMap; | Grid<NavcellData> m_PassabilityMap; | ||||
JS::PersistentRootedValue m_PassabilityMapVal; | JS::PersistentRootedValue m_PassabilityMapVal; | ||||
Grid<u8> m_TerritoryMap; | Grid<u8> m_TerritoryMap; | ||||
JS::PersistentRootedValue m_TerritoryMapVal; | JS::PersistentRootedValue m_TerritoryMapVal; | ||||
std::map<std::string, pass_class_t> m_NonPathfindingPassClasses; | std::map<std::string, pass_class_t> m_NonPathfindingPassClasses; | ||||
std::map<std::string, pass_class_t> m_PathfindingPassClasses; | std::map<std::string, pass_class_t> m_PathfindingPassClasses; | ||||
HierarchicalPathfinder m_HierarchicalPathfinder; | |||||
LongPathfinder m_LongPathfinder; | LongPathfinder m_LongPathfinder; | ||||
bool m_CommandsComputed; | bool m_CommandsComputed; | ||||
shared_ptr<ObjectIdCache<std::wstring> > m_SerializablePrototypes; | shared_ptr<ObjectIdCache<std::wstring> > m_SerializablePrototypes; | ||||
std::map<std::wstring, JS::Heap<JSObject*> > m_DeserializablePrototypes; | std::map<std::wstring, JS::Heap<JSObject*> > m_DeserializablePrototypes; | ||||
CTemplateLoader m_TemplateLoader; | CTemplateLoader m_TemplateLoader; | ||||
}; | }; | ||||
▲ Show 20 Lines • Show All 257 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator