1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
|
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/*
* Copyright (C) 2006-2010 - Frictional Games
*
* This file is part of HPL1 Engine.
*/
#ifndef HPL_WORLD2D_H
#define HPL_WORLD2D_H
#include "hpl1/engine/game/GameTypes.h"
#include "hpl1/engine/graphics/GraphicsTypes.h"
#include "hpl1/engine/math/MathTypes.h"
#include "hpl1/engine/system/SystemTypes.h"
#include "hpl1/engine/scene/SoundSource.h"
#include "common/stablemap.h"
class TiXmlElement;
namespace hpl {
class cGraphics;
class cResources;
class cSound;
class iCamera;
class cCamera2D;
class cTileMap;
class cTile;
class cNode2D;
class cBody2D;
class cCollider2D;
class cGridMap2D;
class cLight2DPoint;
class iLight2D;
class cImageEntity;
class cParticleManager;
class cArea2D;
class iScript;
class cMesh2D;
class iParticleSystem2D;
class cWorld2D {
friend class cCollider2D;
public:
cWorld2D(tString asName, cGraphics *apGraphics, cResources *apResources, cSound *apSound, cCollider2D *apCollider);
~cWorld2D();
tString GetName() { return msName; }
bool CreateFromFile(tString asFile);
void Render(cCamera2D *apCamera);
void Update(float afTimeStep);
cVector2f GetWorldSize() { return mvWorldSize; }
iScript *GetScript() { return mpScript; }
void ResetBodyIDCount() { mlBodyIDCount = 0; }
///// LIGHT METHODS ////////////////////
cLight2DPoint *CreateLightPoint(tString asName = "");
void DestroyLight(iLight2D *apLight);
cGridMap2D *GetGridMapLights();
iLight2D *GetLight(const tString &asName);
///// BODY METHODS ////////////////////
cBody2D *CreateBody2D(const tString &asName, cMesh2D *apMesh, cVector2f avSize);
cGridMap2D *GetGridMapBodies() { return mpMapBodies; }
///// AREA METHODS ////////////////////
cGridMap2D *GetGridMapAreas() { return mpMapAreas; }
/**
* Gets an area on the map. This does a linear search and very fast.
* \param asName The name, if "" then the first of the correct type is returned
* \param asType The typem if "" then type doesn't matter.
* \return
*/
cArea2D *GetArea(const tString &asName, const tString &asType);
///// SOUNDSOURCE METHODS ////////////////////
cSoundSource *CreateSoundSource(const tString &asName, const tString &asSoundName, bool abVolatile);
void DestroySoundSource(cSoundSource *apSound);
///// ENTITY METHODS ////////////////////
cImageEntity *CreateImageEntity(tString asName, tString asDataName);
cGridMap2D *GetGridMapImageEntities() { return mpMapImageEntities; }
void DestroyImageEntity(cImageEntity *apEntity);
cImageEntity *GetImageEntity(const tString &asName);
///// PARTICLE METHODS ////////////////////
iParticleSystem2D *CreateParticleSystem(const tString &asName, const cVector3f &avSize);
void DestroyParticleSystem(iParticleSystem2D *apPS);
///// TILE METHODS ////////////////////
cTileMap *GetTileMap() { return mpTileMap; }
// Test!
void CreateTileMap();
/// NODE METHODS //////////////////////
cNode2D *GetRootNode() { return mpRootNode; }
private:
tString msName;
cGraphics *mpGraphics;
cSound *mpSound;
cResources *mpResources;
cCollider2D *mpCollider;
cVector2f mvWorldSize;
iScript *mpScript;
cGridMap2D *mpMapLights;
cGridMap2D *mpMapImageEntities;
cGridMap2D *mpMapBodies;
cGridMap2D *mpMapParticles;
cGridMap2D *mpMapAreas;
tSoundSourceList mlstSoundSources;
int mlBodyIDCount;
cTileMap *mpTileMap;
cNode2D *mpRootNode;
tString msMapName;
float mfLightZ;
cColor mAmbientColor;
// Update
void UpdateEntities();
void UpdateBodies();
void UpdateParticles();
void UpdateSoundSources();
void UpdateLights();
// Render
void RenderImagesEntities(cCamera2D *apCamera);
void RenderParticles(cCamera2D *apCamera);
// Load helper
int LoadTileData(cTile *apTile, tString *asData, int alStart);
};
} // namespace hpl
#endif // HPL_WOLRD2D_H
|