!XT (BREAK-16) (Sandbox) Remove double-newlines at the end of files.
[CRYENGINE.git] / Code / Sandbox / EditorQt / AI / CoverSurfaceManager.cpp
blob2d3be49a92e803e8870e1764f2b8d8328abadadd
1 // Copyright 2001-2018 Crytek GmbH / Crytek Group. All rights reserved.
3 #include "StdAfx.h"
4 #include "CoverSurfaceManager.h"
5 #include "Objects/AICoverSurface.h"
7 const uint32 BAI_COVER_FILE_VERSION_WRITE = 2;
9 CCoverSurfaceManager::CCoverSurfaceManager()
13 CCoverSurfaceManager::~CCoverSurfaceManager()
17 void CCoverSurfaceManager::ClearGameSurfaces()
19 gEnv->pAISystem->GetCoverSystem()->Clear();
21 SurfaceObjects::iterator it = m_surfaceObjects.begin();
22 SurfaceObjects::iterator end = m_surfaceObjects.end();
24 for (; it != end; ++it)
26 CAICoverSurface* coverSurfaceObject = *it;
27 coverSurfaceObject->SetSurfaceID(CoverSurfaceID(0));
31 // This also compresses CoverSurfaceIDs down to a sequential range
32 bool CCoverSurfaceManager::WriteToFile(const char* fileName)
34 CCryFile file;
36 if (!file.Open(fileName, "wb"))
38 Warning("Could not save AI Cover Surfaces. [%s]", fileName);
40 return false;
43 ICoverSystem* coverSystem = gEnv->pAISystem->GetCoverSystem();
45 uint32 fileVersion = BAI_COVER_FILE_VERSION_WRITE;
46 uint32 surfaceCount = coverSystem->GetSurfaceCount();
48 file.Write(&fileVersion, sizeof(fileVersion));
49 file.Write(&surfaceCount, sizeof(surfaceCount));
51 SurfaceObjects::iterator it = m_surfaceObjects.begin();
52 SurfaceObjects::iterator end = m_surfaceObjects.end();
54 // How this works:
55 // 1. Save all valid surfaces in sequence to the file
56 // 2. Assign a sequenced ID to all the CAICoverSurface objects
57 // Assign 0 to any invalid CAICoverSurface objects
58 // 3. Load the valid surfaces again in sequence
59 uint32 runningID = 0;
61 for (; it != end; ++it)
63 CAICoverSurface* coverSurfaceObject = *it;
64 CoverSurfaceID surfaceID = coverSurfaceObject->GetSurfaceID();
65 coverSurfaceObject->SetSurfaceID(CoverSurfaceID(0));
67 if (!surfaceID)
68 continue;
70 ICoverSystem::SurfaceInfo surfaceInfo;
71 if (!coverSystem->GetSurfaceInfo(surfaceID, &surfaceInfo))
72 continue;
74 file.Write(&surfaceInfo.sampleCount, sizeof(surfaceInfo.sampleCount));
75 file.Write(&surfaceInfo.flags, sizeof(surfaceInfo.flags));
77 for (uint i = 0; i < surfaceInfo.sampleCount; ++i)
79 const ICoverSampler::Sample& sample = surfaceInfo.samples[i];
81 file.Write(&sample.position, sizeof(sample.position));
82 file.Write(&sample.height, sizeof(sample.height));
83 file.Write(&sample.flags, sizeof(sample.flags));
86 ++runningID;
87 coverSurfaceObject->SetSurfaceID(CoverSurfaceID(runningID));
90 file.Close();
92 coverSystem->Clear();
93 return coverSystem->ReadSurfacesFromFile(fileName);
96 bool CCoverSurfaceManager::ReadFromFile(const char* fileName)
98 return gEnv->pAISystem->GetCoverSystem()->ReadSurfacesFromFile(fileName);
101 void CCoverSurfaceManager::AddSurfaceObject(CAICoverSurface* surface)
103 m_surfaceObjects.insert(surface);
106 void CCoverSurfaceManager::RemoveSurfaceObject(CAICoverSurface* surface)
108 m_surfaceObjects.erase(surface);
111 const CCoverSurfaceManager::SurfaceObjects& CCoverSurfaceManager::GetSurfaceObjects() const
113 return m_surfaceObjects;