diff options
author | Piotr Dziwinski <piotrdz@gmail.com> | 2012-07-26 22:26:19 +0200 |
---|---|---|
committer | Piotr Dziwinski <piotrdz@gmail.com> | 2012-07-26 22:26:19 +0200 |
commit | 4ddcd9f810fa588ccf90442f7b4e5ddf385e85f2 (patch) | |
tree | 04cd5a00e080407ed243042e2dd7efe4ba94d4f8 /src/graphics/engine/water.h | |
parent | 045f17a274c0cd41aebd34d5759f7fe791b680e4 (diff) | |
download | colobot-4ddcd9f810fa588ccf90442f7b4e5ddf385e85f2.tar.gz colobot-4ddcd9f810fa588ccf90442f7b4e5ddf385e85f2.tar.bz2 colobot-4ddcd9f810fa588ccf90442f7b4e5ddf385e85f2.zip |
Change of paths in src/graphics
- moved abstract core to src/graphics/core
- moved proper graphics engine to src/graphics/engine
Diffstat (limited to 'src/graphics/engine/water.h')
-rw-r--r-- | src/graphics/engine/water.h | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/src/graphics/engine/water.h b/src/graphics/engine/water.h new file mode 100644 index 0000000..67be9dc --- /dev/null +++ b/src/graphics/engine/water.h @@ -0,0 +1,134 @@ +// * This file is part of the COLOBOT source code +// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch +// * Copyright (C) 2012, Polish Portal of Colobot (PPC) +// * +// * 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/. + +// water.h + +#pragma once + +#include "graphics/engine/engine.h" +#include "graphics/engine/particle.h" +#include "common/event.h" + + +class CInstanceManager; +class CSound; + + +namespace Gfx { + +class CTerrain; + + +const short MAXWATERLINE = 500; + +struct WaterLine +{ + short x, y; // beginning + short len; // length by x + float px1, px2, pz; +}; + + +const short MAXWATVAPOR = 10; + +struct WaterVapor +{ + bool bUsed; + ParticleType type; + Math::Vector pos; + float delay; + float time; + float last; +}; + + +enum WaterType +{ + WATER_NULL = 0, // no water + WATER_TT = 1, // transparent texture + WATER_TO = 2, // opaque texture + WATER_CT = 3, // transparent color + WATER_CO = 4, // opaque color +}; + + +class CWater +{ +public: + CWater(CInstanceManager* iMan, Gfx::CEngine* engine); + ~CWater(); + + void SetGLDevice(Gfx::CDevice device); + bool EventProcess(const Event &event); + void Flush(); + bool Create(WaterType type1, WaterType type2, const char *filename, Gfx::Color diffuse, Gfx::Color ambient, float level, float glint, Math::Vector eddy); + void DrawBack(); + void DrawSurf(); + + bool SetLevel(float level); + float RetLevel(); + float RetLevel(CObject* object); + + void SetLava(bool bLava); + bool RetLava(); + + void AdjustEye(Math::Vector &eye); + +protected: + bool EventFrame(const Event &event); + void LavaFrame(float rTime); + void AdjustLevel(Math::Vector &pos, Math::Vector &norm, Math::Point &uv1, Math::Point &uv2); + bool RetWater(int x, int y); + bool CreateLine(int x, int y, int len); + + void VaporFlush(); + bool VaporCreate(ParticleType type, Math::Vector pos, float delay); + void VaporFrame(int i, float rTime); + +protected: + CInstanceManager* m_iMan; + CEngine* m_engine; + CDevice* m_pDevice; + CTerrain* m_terrain; + CParticle* m_particule; + CSound* m_sound; + + WaterType m_type[2]; + char m_filename[100]; + float m_level; // overall level + float m_glint; // amplitude of reflections + Math::Vector m_eddy; // amplitude of swirls + Gfx::Color m_diffuse; // diffuse color + Gfx::Color m_ambient; // ambient color + float m_time; + float m_lastLava; + int m_subdiv; + + int m_brick; // number of brick*mosaics + float m_size; // size of a item in an brick + + int m_lineUsed; + WaterLine m_line[MAXWATERLINE]; + + WaterVapor m_vapor[MAXWATVAPOR]; + + bool m_bDraw; + bool m_bLava; + long m_color; +}; + +}; // namespace Gfx |