summaryrefslogtreecommitdiffstats
path: root/src/graphics/common
diff options
context:
space:
mode:
authorPiotr Dziwinski <piotrdz@gmail.com>2012-07-26 22:26:19 +0200
committerPiotr Dziwinski <piotrdz@gmail.com>2012-07-26 22:26:19 +0200
commit4ddcd9f810fa588ccf90442f7b4e5ddf385e85f2 (patch)
tree04cd5a00e080407ed243042e2dd7efe4ba94d4f8 /src/graphics/common
parent045f17a274c0cd41aebd34d5759f7fe791b680e4 (diff)
downloadcolobot-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/common')
-rw-r--r--src/graphics/common/README.txt5
-rw-r--r--src/graphics/common/camera.cpp23
-rw-r--r--src/graphics/common/camera.h270
-rw-r--r--src/graphics/common/cloud.cpp23
-rw-r--r--src/graphics/common/cloud.h94
-rw-r--r--src/graphics/common/color.cpp103
-rw-r--r--src/graphics/common/color.h98
-rw-r--r--src/graphics/common/device.h414
-rw-r--r--src/graphics/common/engine.cpp729
-rw-r--r--src/graphics/common/engine.h985
-rw-r--r--src/graphics/common/light.cpp416
-rw-r--r--src/graphics/common/light.h242
-rw-r--r--src/graphics/common/lightning.cpp23
-rw-r--r--src/graphics/common/lightning.h85
-rw-r--r--src/graphics/common/material.h47
-rw-r--r--src/graphics/common/modelfile.cpp841
-rw-r--r--src/graphics/common/modelfile.h120
-rw-r--r--src/graphics/common/particle.cpp23
-rw-r--r--src/graphics/common/particle.h337
-rw-r--r--src/graphics/common/planet.cpp23
-rw-r--r--src/graphics/common/planet.h80
-rw-r--r--src/graphics/common/pyro.cpp23
-rw-r--r--src/graphics/common/pyro.h175
-rw-r--r--src/graphics/common/terrain.cpp23
-rw-r--r--src/graphics/common/terrain.h211
-rw-r--r--src/graphics/common/test/CMakeLists.txt7
-rw-r--r--src/graphics/common/test/modelfile_test.cpp48
-rw-r--r--src/graphics/common/text.cpp23
-rw-r--r--src/graphics/common/text.h113
-rw-r--r--src/graphics/common/texture.h237
-rw-r--r--src/graphics/common/vertex.h141
-rw-r--r--src/graphics/common/water.cpp23
-rw-r--r--src/graphics/common/water.h134
33 files changed, 0 insertions, 6139 deletions
diff --git a/src/graphics/common/README.txt b/src/graphics/common/README.txt
deleted file mode 100644
index 495a453..0000000
--- a/src/graphics/common/README.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-src/graphics/common
-
-Universal structs and classes used in graphics engine
-
-Concrete implementation in OpenGL is in graphics/opengl directory.
diff --git a/src/graphics/common/camera.cpp b/src/graphics/common/camera.cpp
deleted file mode 100644
index 9990d01..0000000
--- a/src/graphics/common/camera.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-// * 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/.
-
-// camera.cpp
-
-#include "graphics/common/camera.h"
-
-
-// TODO implementation
diff --git a/src/graphics/common/camera.h b/src/graphics/common/camera.h
deleted file mode 100644
index 76077bf..0000000
--- a/src/graphics/common/camera.h
+++ /dev/null
@@ -1,270 +0,0 @@
-// * 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/.
-
-// camera.h
-
-#pragma once
-
-#include "engine.h"
-#include "common/event.h"
-
-
-class CInstanceManager;
-class CObject;
-
-namespace Gfx {
-
-
-enum CameraType
-{
- CAMERA_NULL = 0, // camera undefined
- CAMERA_FREE = 1, // camera free (never in principle)
- CAMERA_EDIT = 2, // camera while editing a program
- CAMERA_ONBOARD = 3, // camera on board a robot
- CAMERA_BACK = 4, // camera behind a robot
- CAMERA_FIX = 5, // static camera following robot
- CAMERA_EXPLO = 6, // camera steady after explosion
- CAMERA_SCRIPT = 7, // camera during a film script
- CAMERA_INFO = 8, // camera for displaying information
- CAMERA_VISIT = 9, // visit instead of an error
- CAMERA_DIALOG = 10, // camera for dialogue
- CAMERA_PLANE = 11, // static camera height
-};
-
-enum CameraSmooth
-{
- CS_NONE = 0, // sharp
- CS_NORM = 1, // normal
- CS_HARD = 2, // hard
- CS_SPEC = 3, // special
-};
-
-enum CenteringPhase
-{
- CP_NULL = 0,
- CP_START = 1,
- CP_WAIT = 2,
- CP_STOP = 3,
-};
-
-enum CameraEffect
-{
- CE_NULL = 0, // no effect
- CE_TERRAFORM = 1, // digging in
- CE_CRASH = 2, // Vehicle driving is severely
- CE_EXPLO = 3, // explosion
- CE_SHOT = 4, // not mortal shot
- CE_VIBRATION = 5, // vibration during construction
- CE_PET = 6, // spleen reactor
-};
-
-enum OverEffect
-{
- OE_NULL = 0, // no effect
- OE_BLOOD = 1, // flash red
- OE_FADEINw = 2, // white -> nothing
- OE_FADEOUTw = 3, // nothing -> white
- OE_FADEOUTb = 4, // nothing -> blue
- OE_BLITZ = 5, // lightning
-};
-
-
-
-class CCamera {
-
- public:
- CCamera(CInstanceManager* iMan);
- ~CCamera();
-
- bool EventProcess(const Event &event);
-
- void Init(Math::Vector eye, Math::Vector lookat, float delay);
-
- void SetObject(CObject* object);
- CObject* RetObject();
-
- void SetType(CameraType type);
- CameraType RetType();
-
- void SetSmooth(CameraSmooth type);
- CameraSmooth RetSmoth();
-
- void SetDist(float dist);
- float RetDist();
-
- void SetFixDirection(float angle);
- float RetFixDirection();
-
- void SetRemotePan(float value);
- float RetRemotePan();
-
- void SetRemoteZoom(float value);
- float RetRemoteZoom();
-
- void StartVisit(Math::Vector goal, float dist);
- void StopVisit();
-
- void RetCamera(Math::Vector &eye, Math::Vector &lookat);
-
- bool StartCentering(CObject *object, float angleH, float angleV, float dist, float time);
- bool StopCentering(CObject *object, float time);
- void AbortCentering();
-
- void FlushEffect();
- void StartEffect(CameraEffect effect, Math::Vector pos, float force);
-
- void FlushOver();
- void SetOverBaseColor(Gfx::Color color);
- void StartOver(OverEffect effect, Math::Vector pos, float force);
-
- void FixCamera();
- void SetScriptEye(Math::Vector eye);
- void SetScriptLookat(Math::Vector lookat);
-
- void SetEffect(bool bEnable);
- void SetCameraScroll(bool bScroll);
- void SetCameraInvertX(bool bInvert);
- void SetCameraInvertY(bool bInvert);
-
- float RetMotorTurn();
- Gfx::EngineMouseType RetMouseDef(Math::Point pos);
-
-protected:
- bool EventMouseMove(const Event &event);
- void EventMouseWheel(int dir);
- bool EventFrame(const Event &event);
- bool EventFrameFree(const Event &event);
- bool EventFrameEdit(const Event &event);
- bool EventFrameDialog(const Event &event);
- bool EventFrameBack(const Event &event);
- bool EventFrameFix(const Event &event);
- bool EventFrameExplo(const Event &event);
- bool EventFrameOnBoard(const Event &event);
- bool EventFrameInfo(const Event &event);
- bool EventFrameVisit(const Event &event);
- bool EventFrameScript(const Event &event);
-
- void SetViewTime(const Math::Vector &vEyePt, const Math::Vector &vLookatPt, float rTime);
- bool IsCollision(Math::Vector &eye, Math::Vector lookat);
- bool IsCollisionBack(Math::Vector &eye, Math::Vector lookat);
- bool IsCollisionFix(Math::Vector &eye, Math::Vector lookat);
-
- Math::Vector ExcludeTerrain(Math::Vector eye, Math::Vector lookat, float &angleH, float &angleV);
- Math::Vector ExcludeObject(Math::Vector eye, Math::Vector lookat, float &angleH, float &angleV);
-
- void SetViewParams(const Math::Vector &eye, const Math::Vector &lookat, const Math::Vector &up);
- void EffectFrame(const Event &event);
- void OverFrame(const Event &event);
-
-protected:
- CInstanceManager* m_iMan;
- Gfx::CEngine* m_engine;
- CTerrain* m_terrain;
- CWater* m_water;
-
- CameraType m_type; // the type of camera (CAMERA *)
- CameraSmooth m_smooth; // type of smoothing
- CObject* m_cameraObj; // object linked to the camera
-
- float m_eyeDistance; // distance between the eyes
- float m_initDelay; // time of initial centering
-
- Math::Vector m_actualEye; // current eye
- Math::Vector m_actualLookat; // aim current
- Math::Vector m_finalEye; // final eye
- Math::Vector m_finalLookat; // aim final
- Math::Vector m_normEye; // normal eye
- Math::Vector m_normLookat; // aim normal
- float m_focus;
-
- bool m_bRightDown;
- Math::Point m_rightPosInit;
- Math::Point m_rightPosCenter;
- Math::Point m_rightPosMove;
-
- Math::Vector m_eyePt; // CAMERA_FREE: eye
- float m_directionH; // CAMERA_FREE: horizontal direction
- float m_directionV; // CAMERA_FREE: vertical direction
- float m_heightEye; // CAMERA_FREE: height above the ground
- float m_heightLookat; // CAMERA_FREE: height above the ground
- float m_speed; // CAMERA_FREE: speed of movement
-
- float m_backDist; // CAMERA_BACK: distance
- float m_backMin; // CAMERA_BACK: distance minimal
- float m_addDirectionH; // CAMERA_BACK: additional direction
- float m_addDirectionV; // CAMERA_BACK: additional direction
- bool m_bTransparency;
-
- float m_fixDist; // CAMERA_FIX: distance
- float m_fixDirectionH; // CAMERA_FIX: direction
- float m_fixDirectionV; // CAMERA_FIX: direction
-
- Math::Vector m_visitGoal; // CAMERA_VISIT: target position
- float m_visitDist; // CAMERA_VISIT: distance
- float m_visitTime; // CAMERA_VISIT: relative time
- CameraType m_visitType; // CAMERA_VISIT: initial type
- float m_visitDirectionH; // CAMERA_VISIT: direction
- float m_visitDirectionV; // CAMERA_VISIT: direction
-
- float m_editHeight; // CAMERA_EDIT: height
-
- float m_remotePan;
- float m_remoteZoom;
-
- Math::Point m_mousePos;
- float m_mouseDirH;
- float m_mouseDirV;
- float m_mouseMarging;
-
- float m_motorTurn;
-
- CenteringPhase m_centeringPhase;
- float m_centeringAngleH;
- float m_centeringAngleV;
- float m_centeringDist;
- float m_centeringCurrentH;
- float m_centeringCurrentV;
- float m_centeringTime;
- float m_centeringProgress;
-
- CameraEffect m_effectType;
- Math::Vector m_effectPos;
- float m_effectForce;
- float m_effectProgress;
- Math::Vector m_effectOffset;
-
- OverEffect m_overType;
- float m_overForce;
- float m_overTime;
- Gfx::Color m_overColorBase;
- Gfx::Color m_overColor;
- int m_overMode;
- float m_overFadeIn;
- float m_overFadeOut;
-
- Math::Vector m_scriptEye;
- Math::Vector m_scriptLookat;
-
- bool m_bEffect; // shocks if explosion?
- bool m_bCameraScroll; // scroll in the edges?
- bool m_bCameraInvertX; // X inversion in the edges?
- bool m_bCameraInvertY; // Y inversion in the edges?
-
-};
-
-
-}; // namespace Gfx
diff --git a/src/graphics/common/cloud.cpp b/src/graphics/common/cloud.cpp
deleted file mode 100644
index 707f641..0000000
--- a/src/graphics/common/cloud.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-// * 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/.
-
-// cloud.cpp
-
-#include "graphics/common/cloud.h"
-
-
-// TODO implementation
diff --git a/src/graphics/common/cloud.h b/src/graphics/common/cloud.h
deleted file mode 100644
index 19b689f..0000000
--- a/src/graphics/common/cloud.h
+++ /dev/null
@@ -1,94 +0,0 @@
-// * 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/.
-
-// cloud.h
-
-#pragma once
-
-#include "common/event.h"
-#include "graphics/common/color.h"
-#include "math/point.h"
-#include "math/vector.h"
-
-
-
-class CInstanceManager;
-
-
-namespace Gfx {
-
-class CEngine;
-class CTerrain;
-
-const short MAXCLOUDLINE = 100;
-
-struct CloudLine
-{
- short x, y; // beginning
- short len; // in length x
- float px1, px2, pz;
-};
-
-
-class CCloud
-{
-public:
- CCloud(CInstanceManager* iMan, CEngine* engine);
- ~CCloud();
-
- bool EventProcess(const Event &event);
- void Flush();
- bool Create(const char *filename, Gfx::Color diffuse, Gfx::Color ambient, float level);
- void Draw();
-
- bool SetLevel(float level);
- float RetLevel();
-
- void SetEnable(bool bEnable);
- bool RetEnable();
-
-protected:
- bool EventFrame(const Event &event);
- void AdjustLevel(Math::Vector &pos, Math::Vector &eye, float deep, Math::Point &uv1, Math::Point &uv2);
- bool CreateLine(int x, int y, int len);
-
-protected:
- CInstanceManager* m_iMan;
- CEngine* m_engine;
- CTerrain* m_terrain;
-
- char m_filename[100];
- float m_level; // overall level
- Math::Point m_speed; // feedrate (wind)
- Gfx::Color m_diffuse; // diffuse color
- Gfx::Color m_ambient; // ambient color
- float m_time;
- float m_lastTest;
- int m_subdiv;
-
- Math::Vector m_wind; // wind speed
- int m_brick; // brick mosaic
- float m_size; // size of a brick element
-
- int m_lineUsed;
- CloudLine m_line[MAXCLOUDLINE];
-
- bool m_bEnable;
-};
-
-
-}; // namespace Gfx
diff --git a/src/graphics/common/color.cpp b/src/graphics/common/color.cpp
deleted file mode 100644
index c1b7337..0000000
--- a/src/graphics/common/color.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-// * This file is part of the COLOBOT source code
-// * 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/.
-
-// color.cpp
-
-#include "graphics/common/color.h"
-
-#include "math/func.h"
-
-
-Gfx::ColorHSV Gfx::RGB2HSV(Gfx::Color color)
-{
- Gfx::ColorHSV result;
-
- float min = Math::Min(color.r, color.g, color.b);
- float max = Math::Max(color.r, color.g, color.b);
-
- result.v = max; // intensity
-
- if ( max == 0.0f )
- {
- result.s = 0.0f; // saturation
- result.h = 0.0f; // undefined color!
- }
- else
- {
- float delta = max-min;
- result.s = delta/max; // saturation
-
- if ( color.r == max ) // between yellow & magenta
- {
- result.h = (color.g-color.b)/delta;
- }
- else if ( color.g == max ) // between cyan & yellow
- {
- result.h = 2.0f+(color.b-color.r)/delta;
- }
- else // between magenta & cyan
- {
- result.h = 4.0f+(color.r-color.g)/delta;
- }
-
- result.h *= 60.0f; // in degrees
- if ( result.h < 0.0f ) result.h += 360.0f;
- result.h /= 360.0f; // 0..1
- }
-
- return result;
-}
-
-Gfx::Color Gfx::HSV2RGB(Gfx::ColorHSV color)
-{
- Gfx::Color result;
-
- color.h = Math::Norm(color.h)*360.0f;
- color.s = Math::Norm(color.s);
- color.v = Math::Norm(color.v);
-
- if ( color.s == 0.0f ) // zero saturation?
- {
- result.r = color.v;
- result.g = color.v;
- result.b = color.v; // gray
- }
- else
- {
- if ( color.h == 360.0f ) color.h = 0.0f;
- color.h /= 60.0f;
- int i = (int)color.h; // integer part (0 .. 5)
- float f = color.h-i; // fractional part
-
- float v = color.v;
- float p = color.v*(1.0f-color.s);
- float q = color.v*(1.0f-(color.s*f));
- float t = color.v*(1.0f-(color.s*(1.0f-f)));
-
- switch (i)
- {
- case 0: result.r=v; result.g=t; result.b=p; break;
- case 1: result.r=q; result.g=v; result.b=p; break;
- case 2: result.r=p; result.g=v; result.b=t; break;
- case 3: result.r=p; result.g=q; result.b=v; break;
- case 4: result.r=t; result.g=p; result.b=v; break;
- case 5: result.r=v; result.g=p; result.b=q; break;
- }
- }
-
- return result;
-}
-
diff --git a/src/graphics/common/color.h b/src/graphics/common/color.h
deleted file mode 100644
index 907a3b9..0000000
--- a/src/graphics/common/color.h
+++ /dev/null
@@ -1,98 +0,0 @@
-// * This file is part of the COLOBOT source code
-// * 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/.
-
-// color.h
-
-#pragma once
-
-
-#include <sstream>
-
-
-namespace Gfx {
-
-/**
- \struct Color
- \brief RGBA color */
-struct Color
-{
- //! Red, green, blue and alpha components
- float r, g, b, a;
-
- //! Constructor; default values are (0,0,0,0) = black
- Color(float aR = 0.0f, float aG = 0.0f, float aB = 0.0f, float aA = 0.0f)
- : r(aR), g(aG), b(aB), a(aA) {}
-
- inline Gfx::Color Inverse() const
- {
- return Gfx::Color(1.0f - r, 1.0f - g, 1.0f - b, 1.0f - a);
- }
-
- //! Returns the struct cast to \c float* array; use with care!
- inline float* Array()
- {
- return (float*)this;
- }
-
- //! Returns the struct cast to <tt>const float*</tt> array; use with care!
- inline const float* Array() const
- {
- return (const float*)this;
- }
-
- //! Returns a string (r, g, b, a)
- inline std::string ToString() const
- {
- std::stringstream s;
- s.precision(3);
- s << "(" << r << ", " << g << ", " << b << ", " << a << ")";
- return s.str();
- }
-
- inline bool operator==(const Gfx::Color &other) const
- {
- return r == other.r && g == other.g && b == other.b && a == other.a;
- }
-};
-
-/**
- \struct ColorHSV
- \brief HSV color */
-struct ColorHSV
-{
- float h, s, v;
-
- ColorHSV(float aH = 0.0f, float aS = 0.0f, float aV = 0.0f)
- : h(aH), s(aS), v(aV) {}
-
- //! Returns a string "(h, s, v)"
- inline std::string ToString() const
- {
- std::stringstream s;
- s.precision(3);
- s << "(" << h << ", " << s << ", " << v << ")";
- return s.str();
- }
-};
-
-//! Converts a RGB color to HSV color
-Gfx::ColorHSV RGB2HSV(Gfx::Color color);
-
-//! Converts a HSV color to RGB color
-Gfx::Color HSV2RGB(Gfx::ColorHSV color);
-
-}; // namespace Gfx
-
diff --git a/src/graphics/common/device.h b/src/graphics/common/device.h
deleted file mode 100644
index 7aa4ce3..0000000
--- a/src/graphics/common/device.h
+++ /dev/null
@@ -1,414 +0,0 @@
-// * 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/.
-
-// device.h
-
-#pragma once
-
-
-#include "graphics/common/color.h"
-#include "graphics/common/light.h"
-#include "graphics/common/material.h"
-#include "graphics/common/texture.h"
-#include "graphics/common/vertex.h"
-#include "math/matrix.h"
-
-#include <string>
-
-
-class CImage;
-
-
-namespace Gfx {
-
-/**
- \struct DeviceConfig
- \brief General config for graphics device
-
- These settings are common window options set by SDL.
-*/
-struct DeviceConfig
-{
- //! Screen width
- int width;
- //! Screen height
- int height;
- //! Bits per pixel
- int bpp;
- //! Full screen
- bool fullScreen;
- //! Resizeable window
- bool resizeable;
- //! Double buffering
- bool doubleBuf;
- //! No window frame (also set with full screen)
- bool noFrame;
-
- //! Constructor calls LoadDefault()
- DeviceConfig() { LoadDefault(); }
-
- //! Loads the default values
- inline void LoadDefault()
- {
- width = 800;
- height = 600;
- bpp = 32;
- fullScreen = false;
- resizeable = false;
- doubleBuf = true;
- noFrame = false;
- }
-};
-
-
-/**
- \enum TransformType
- \brief Type of transformation in rendering pipeline
-
- These correspond to DirectX's three transformation matrices. */
-enum TransformType
-{
- TRANSFORM_WORLD,
- TRANSFORM_VIEW,
- TRANSFORM_PROJECTION
-};
-
-/**
- \enum RenderState
- \brief Render states that can be enabled/disabled */
-enum RenderState
-{
- RENDER_STATE_LIGHTING,
- RENDER_STATE_TEXTURING,
- RENDER_STATE_BLENDING,
- RENDER_STATE_FOG,
- RENDER_STATE_DEPTH_TEST,
- RENDER_STATE_DEPTH_WRITE,
- RENDER_STATE_ALPHA_TEST,
- RENDER_STATE_CULLING,
- RENDER_STATE_DITHERING
-};
-
-/**
- \enum CompFunc
- \brief Type of function used to compare values */
-enum CompFunc
-{
- COMP_FUNC_NEVER,
- COMP_FUNC_LESS,
- COMP_FUNC_EQUAL,
- COMP_FUNC_NOTEQUAL,
- COMP_FUNC_LEQUAL,
- COMP_FUNC_GREATER,
- COMP_FUNC_GEQUAL,
- COMP_FUNC_ALWAYS
-};
-
-/**
- \enum BlendFunc
- \brief Type of blending function */
-enum BlendFunc
-{
- BLEND_ZERO,
- BLEND_ONE,
- BLEND_SRC_COLOR,
- BLEND_INV_SRC_COLOR,
- BLEND_DST_COLOR,
- BLEND_INV_DST_COLOR,
- BLEND_SRC_ALPHA,
- BLEND_INV_SRC_ALPHA,
- BLEND_DST_ALPHA,
- BLEND_INV_DST_ALPHA,
- BLEND_SRC_ALPHA_SATURATE
-};
-
-/**
- \enum FogMode
- \brief Type of fog calculation function */
-enum FogMode
-{
- FOG_LINEAR,
- FOG_EXP,
- FOG_EXP2
-};
-
-/**
- \enum CullMode
- \brief Culling mode for polygons */
-enum CullMode
-{
- //! Cull clockwise side
- CULL_CW,
- //! Cull counter-clockwise side
- CULL_CCW
-};
-
-/**
- \enum ShadeModel
- \brief Shade model used in rendering */
-enum ShadeModel
-{
- SHADE_FLAT,
- SHADE_SMOOTH
-};
-
-/**
- \enum FillMode
- \brief Polygon fill mode */
-enum FillMode
-{
- //! Draw only points
- FILL_POINT,
- //! Draw only lines
- FILL_LINES,
- //! Draw full polygons
- FILL_FILL
-};
-
-/**
- \enum PrimitiveType
- \brief Type of primitive to render
-
- Only these two types are used. */
-enum PrimitiveType
-{
- PRIMITIVE_LINES,
- PRIMITIVE_TRIANGLES,
- PRIMITIVE_TRIANGLE_STRIP
-};
-
-/**
- \enum IntersectPlane
- \brief Intersection plane of projection volume
-
- These flags can be OR'd together. */
-enum IntersectPlane
-{
- INTERSECT_PLANE_LEFT = 0x01,
- INTERSECT_PLANE_RIGHT = 0x02,
- INTERSECT_PLANE_TOP = 0x04,
- INTERSECT_PLANE_BOTTOM = 0x08,
- INTERSECT_PLANE_FRONT = 0x10,
- INTERSECT_PLANE_BACK = 0x20,
- INTERSECT_PLANE_ALL = INTERSECT_PLANE_LEFT | INTERSECT_PLANE_RIGHT |
- INTERSECT_PLANE_TOP | INTERSECT_PLANE_BOTTOM |
- INTERSECT_PLANE_FRONT | INTERSECT_PLANE_BACK
-};
-
-/*
-
-Notes for rewriting DirectX code:
-
->> SetRenderState() translates to many functions depending on param
-
-D3DRENDERSTATE_ALPHABLENDENABLE -> SetRenderState() with RENDER_STATE_BLENDING
-D3DRENDERSTATE_ALPHAFUNC -> SetAlphaTestFunc() func
-D3DRENDERSTATE_ALPHAREF -> SetAlphaTestFunc() ref
-D3DRENDERSTATE_ALPHATESTENABLE -> SetRenderState() with RENDER_STATE_ALPHA_TEST
-D3DRENDERSTATE_AMBIENT -> SetGlobalAmbient()
-D3DRENDERSTATE_CULLMODE -> SetCullMode()
-D3DRENDERSTATE_DESTBLEND -> SetBlendFunc() dest blending func
-D3DRENDERSTATE_DITHERENABLE -> SetRenderState() with RENDER_STATE_DITHERING
-D3DRENDERSTATE_FILLMODE -> SetFillMode()
-D3DRENDERSTATE_FOGCOLOR -> SetFogParams()
-D3DRENDERSTATE_FOGENABLE -> SetRenderState() with RENDER_STATE_FOG
-D3DRENDERSTATE_FOGEND -> SetFogParams()
-D3DRENDERSTATE_FOGSTART -> SetFogParams()
-D3DRENDERSTATE_FOGVERTEXMODE -> SetFogParams() fog model
-D3DRENDERSTATE_LIGHTING -> SetRenderState() with RENDER_STATE_LIGHTING
-D3DRENDERSTATE_SHADEMODE -> SetShadeModel()
-D3DRENDERSTATE_SPECULARENABLE -> doesn't matter (always enabled)
-D3DRENDERSTATE_SRCBLEND -> SetBlendFunc() src blending func
-D3DRENDERSTATE_TEXTUREFACTOR -> SetTextureFactor()
-D3DRENDERSTATE_ZBIAS -> SetDepthBias()
-D3DRENDERSTATE_ZENABLE -> SetRenderState() with RENDER_STATE_DEPTH_TEST
-D3DRENDERSTATE_ZFUNC -> SetDepthTestFunc()
-D3DRENDERSTATE_ZWRITEENABLE -> SetRenderState() with RENDER_STATE_DEPTH_WRITE
-
-
->> SetTextureStageState() translates to SetTextureParams() or CreateTexture() for some params
-
-Params from enum in struct TextureCreateParams or TextureParams
- D3DTSS_ADDRESS -> Gfx::TexWrapMode wrapS, wrapT
- D3DTSS_ALPHAARG1 -> Gfx::TexMixArgument alphaArg1
- D3DTSS_ALPHAARG2 -> Gfx::TexMixArgument alphaArg2
- D3DTSS_ALPHAOP -> Gfx::TexMixOperation alphaOperation
- D3DTSS_COLORARG1 -> Gfx::TexMixArgument colorArg1
- D3DTSS_COLORARG2 -> Gfx::TexMixArgument colorArg2
- D3DTSS_COLOROP -> Gfx::TexMixOperation colorOperation
- D3DTSS_MAGFILTER -> Gfx::TexMagFilter magFilter
- D3DTSS_MINFILTER -> Gfx::TexMinFilter minFilter
- D3DTSS_TEXCOORDINDEX -> doesn't matter (texture coords are set explicitly by glMultiTexCoordARB*)
-
-Note that D3DTSS_ALPHAOP or D3DTSS_COLOROP set to D3DTOP_DISABLE must translate to disabling the whole texture stage.
-In DirectX, you shouldn't mix enabling one and disabling the other.
-Also, if previous stage is disabled in DirectX, the later ones are disabled, too. In OpenGL, that is not the case.
-
-*/
-
-/**
- \class CDevice
- \brief Abstract interface of graphics device
-
- It is based on DIRECT3DDEVICE class from DirectX to make it easier to port existing code.
- It encapsulates the general graphics device state and provides a common interface
- to graphics-specific functions which will be used throughout the program,
- both in CEngine class and in UI classes. Note that it doesn't contain all functions from DirectX,
- only those that were used in old code.
-
- */
-class CDevice
-{
-public:
- virtual ~CDevice() {}
-
- //! Initializes the device, setting the initial state
- virtual bool Create() = 0;
- //! Destroys the device, releasing every acquired resource
- virtual void Destroy() = 0;
-
- //! Returns whether the device has been initialized
- virtual bool GetWasInit() = 0;
- //! Returns the last encountered error
- virtual std::string GetError() = 0;
-
- //! Begins drawing the 3D scene
- virtual void BeginScene() = 0;
- //! Ends drawing the 3D scene
- virtual void EndScene() = 0;
-
- //! Clears the screen to blank
- virtual void Clear() = 0;
-
- //! Sets the transform matrix of given type
- virtual void SetTransform(TransformType type, const Math::Matrix &matrix) = 0;
- //! Returns the current transform matrix of given type
- virtual const Math::Matrix& GetTransform(TransformType type) = 0;
- //! Multiplies the current transform matrix of given type by given matrix
- virtual void MultiplyTransform(TransformType type, const Math::Matrix &matrix) = 0;
-
- //! Sets the current material
- virtual void SetMaterial(const Gfx::Material &material) = 0;
- //! Returns the current material
- virtual const Gfx::Material& GetMaterial() = 0;
-
- //! Returns the maximum number of lights available
- virtual int GetMaxLightCount() = 0;
- //! Sets the light at given index
- virtual void SetLight(int index, const Gfx::Light &light) = 0;
- //! Returns the current light at given index
- virtual const Gfx::Light& GetLight(int index) = 0;
- //! Enables/disables the light at given index
- virtual void SetLightEnabled(int index, bool enabled) = 0;
- //! Returns the current enable state of light at given index
- virtual bool GetLightEnabled(int index) = 0;
-
- //! Creates a texture from image; the image can be safely removed after that
- virtual Gfx::Texture CreateTexture(CImage *image, const Gfx::TextureCreateParams &params) = 0;
- //! Deletes a given texture, freeing it from video memory
- virtual void DestroyTexture(const Gfx::Texture &texture) = 0;
- //! Deletes all textures created so far
- virtual void DestroyAllTextures() = 0;
-
- //! Returns the maximum number of multitexture stages
- virtual int GetMaxTextureCount() = 0;
- //! Sets the (multi)texture at given index
- virtual void SetTexture(int index, const Gfx::Texture &texture) = 0;
- //! Returns the (multi)texture at given index
- virtual Gfx::Texture GetTexture(int index) = 0;
- //! Enables/disables the given texture stage
- virtual void SetTextureEnabled(int index, bool enabled) = 0;
- //! Returns the current enable state of given texture stage
- virtual bool GetTextureEnabled(int index) = 0;
-
- //! Sets the params for texture stage with given index
- virtual void SetTextureStageParams(int index, const Gfx::TextureStageParams &params) = 0;
- //! Returns the current params of texture stage with given index
- virtual Gfx::TextureStageParams GetTextureStageParams(int index) = 0;
-
- //! Sets the texture factor to the given color value
- virtual void SetTextureFactor(const Gfx::Color &color) = 0;
- //! Returns the current texture factor
- virtual Gfx::Color GetTextureFactor() = 0;
-
- //! Renders primitive composed of vertices with single texture
- virtual void DrawPrimitive(Gfx::PrimitiveType type, const Gfx::Vertex *vertices , int vertexCount) = 0;
- //! Renders primitive composed of vertices with color information and single texture
- virtual void DrawPrimitive(Gfx::PrimitiveType type, const Gfx::VertexCol *vertices , int vertexCount) = 0;
- //! Renders primitive composed of vertices with multitexturing (2 textures)
- virtual void DrawPrimitive(Gfx::PrimitiveType type, const Gfx::VertexTex2 *vertices, int vertexCount) = 0;
-
- //! Tests whether a sphere intersects the 6 clipping planes of projection volume
- virtual int ComputeSphereVisibility(const Math::Vector &center, float radius) = 0;
-
- //! Enables/disables the given render state
- virtual void SetRenderState(Gfx::RenderState state, bool enabled) = 0;
- //! Returns the current setting of given render state
- virtual bool GetRenderState(Gfx::RenderState state) = 0;
-
- //! Sets the function of depth test
- virtual void SetDepthTestFunc(Gfx::CompFunc func) = 0;
- //! Returns the current function of depth test
- virtual Gfx::CompFunc GetDepthTestFunc() = 0;
-
- //! Sets the depth bias (constant value added to Z-coords)
- virtual void SetDepthBias(float factor) = 0;
- //! Returns the current depth bias
- virtual float GetDepthBias() = 0;
-
- //! Sets the alpha test function and reference value
- virtual void SetAlphaTestFunc(Gfx::CompFunc func, float refValue) = 0;
- //! Returns the current alpha test function and reference value
- virtual void GetAlphaTestFunc(Gfx::CompFunc &func, float &refValue) = 0;
-
- //! Sets the blending functions for source and destination operations
- virtual void SetBlendFunc(Gfx::BlendFunc srcBlend, Gfx::BlendFunc dstBlend) = 0;
- //! Returns the current blending functions for source and destination operations
- virtual void GetBlendFunc(Gfx::BlendFunc &srcBlend, Gfx::BlendFunc &dstBlend) = 0;
-
- //! Sets the clear color
- virtual void SetClearColor(const Gfx::Color &color) = 0;
- //! Returns the current clear color
- virtual Gfx::Color GetClearColor() = 0;
-
- //! Sets the global ambient color
- virtual void SetGlobalAmbient(const Gfx::Color &color) = 0;
- //! Returns the global ambient color
- virtual Gfx::Color GetGlobalAmbient() = 0;
-
- //! Sets the fog parameters: mode, color, start distance, end distance and density (for exp models)
- virtual void SetFogParams(Gfx::FogMode mode, const Gfx::Color &color, float start, float end, float density) = 0;
- //! Returns the current fog parameters: mode, color, start distance, end distance and density (for exp models)
- virtual void GetFogParams(Gfx::FogMode &mode, Gfx::Color &color, float &start, float &end, float &density) = 0;
-
- //! Sets the current cull mode
- virtual void SetCullMode(Gfx::CullMode mode) = 0;
- //! Returns the current cull mode
- virtual Gfx::CullMode GetCullMode() = 0;
-
- //! Sets the shade model
- virtual void SetShadeModel(Gfx::ShadeModel model) = 0;
- //! Returns the current shade model
- virtual Gfx::ShadeModel GetShadeModel() = 0;
-
- //! Sets the current fill mode
- virtual void SetFillMode(Gfx::FillMode mode) = 0;
- //! Returns the current fill mode
- virtual Gfx::FillMode GetFillMode() = 0;
-};
-
-}; // namespace Gfx
diff --git a/src/graphics/common/engine.cpp b/src/graphics/common/engine.cpp
deleted file mode 100644
index e6dcfc7..0000000
--- a/src/graphics/common/engine.cpp
+++ /dev/null
@@ -1,729 +0,0 @@
-// * 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/.
-
-// engine.cpp
-
-#include "graphics/common/engine.h"
-
-#include "app/app.h"
-#include "common/iman.h"
-#include "common/image.h"
-#include "common/key.h"
-#include "common/logger.h"
-#include "graphics/common/device.h"
-#include "math/geometry.h"
-
-// Initial size of various vectors
-const int OBJECT_PREALLOCATE_COUNT = 1200;
-const int SHADOW_PREALLOCATE_COUNT = 500;
-const int GROUNDSPOT_PREALLOCATE_COUNT = 100;
-
-const int LEVEL1_PREALLOCATE_COUNT = 50;
-const int LEVEL2_PREALLOCATE_COUNT = 100;
-const int LEVEL3_PREALLOCATE_COUNT = 5;
-const int LEVEL4_PREALLOCATE_COUNT = 10;
-const int LEVEL5_PREALLOCATE_COUNT = 100;
-const int LEVEL5_VERTEX_PREALLOCATE_COUNT = 200;
-
-
-Gfx::CEngine::CEngine(CInstanceManager *iMan, CApplication *app)
-{
- m_iMan = iMan;
- m_app = app;
- m_device = NULL;
-
- m_wasInit = false;
-
- m_iMan = iMan;
- m_iMan->AddInstance(CLASS_ENGINE, this);
- m_app = app;
-
- m_lightMan = NULL;
- m_text = NULL;
- m_particle = NULL;
- m_water = NULL;
- m_cloud = NULL;
- m_lightning = NULL;
- m_planet = NULL;
- m_sound = NULL;
- m_terrain = NULL;
-
- m_dim.x = 640;
- m_dim.y = 480;
- m_lastDim = m_dim;
- m_focus = 0.75f;
- m_baseTime = 0;
- m_lastTime = 0;
- m_absTime = 0.0f;
- m_rankView = 0;
-
- m_ambientColor[0] = Gfx::Color(0.5f, 0.5f, 0.5f, 0.5f);
- m_ambientColor[1] = Gfx::Color(0.5f, 0.5f, 0.5f, 0.5f);
- m_fogColor[0] = Gfx::Color(1.0f, 1.0f, 1.0f, 1.0f);
- m_fogColor[1] = Gfx::Color(1.0f, 1.0f, 1.0f, 1.0f);
- m_deepView[0] = 1000.0f;
- m_deepView[1] = 1000.0f;
- m_fogStart[0] = 0.75f;
- m_fogStart[1] = 0.75f;
- m_waterAddColor = Gfx::Color(0.0f, 0.0f, 0.0f, 0.0f);
-
- m_pause = false;
- m_render = true;
- m_movieLock = false;
- m_shadowVisible = true;
- m_groundSpotVisible = true;
- m_dirty = true;
- m_fog = true;
- m_speed = 1.0f;
- m_secondTexNum = 0;
- m_eyeDirH = 0.0f;
- m_eyeDirV = 0.0f;
- m_backgroundName = ""; // no background image
- m_backgroundColorUp = 0;
- m_backgroundColorDown = 0;
- m_backgroundCloudUp = 0;
- m_backgroundCloudDown = 0;
- m_backgroundFull = false;
- m_backgroundQuarter = false;
- m_overFront = true;
- m_overColor = 0;
- m_overMode = ENG_RSTATE_TCOLOR_BLACK;
- m_frontsizeName = ""; // no front image
- m_hiliteRank[0] = -1; // empty list
- m_eyePt = Math::Vector(0.0f, 0.0f, 0.0f);
- m_lookatPt = Math::Vector(0.0f, 0.0f, 1.0f);
- m_drawWorld = true;
- m_drawFront = false;
- m_limitLOD[0] = 100.0f;
- m_limitLOD[1] = 200.0f;
- m_particuleDensity = 1.0f;
- m_clippingDistance = 1.0f;
- m_lastClippingDistance = m_clippingDistance;
- m_objectDetail = 1.0f;
- m_lastObjectDetail = m_objectDetail;
- m_terrainVision = 1000.0f;
- m_gadgetQuantity = 1.0f;
- m_textureQuality = 1;
- m_totoMode = true;
- m_lensMode = true;
- m_waterMode = true;
- m_skyMode = true;
- m_backForce = true;
- m_planetMode = true;
- m_lightMode = true;
- m_editIndentMode = true;
- m_editIndentValue = 4;
- m_tracePrecision = 1.0f;
-
- m_alphaMode = 1;
-
- m_forceStateColor = true;
- m_stateColor = false;
-
- m_blackSrcBlend[0] = 0;
- m_blackDestBlend[0] = 0;
- m_whiteSrcBlend[0] = 0;
- m_whiteDestBlend[0] = 0;
- m_diffuseSrcBlend[0] = 0;
- m_diffuseDestBlend[0] = 0;
- m_alphaSrcBlend[0] = 0;
- m_alphaDestBlend[0] = 0;
-
- m_updateGeometry = false;
-
- m_mice[Gfx::ENG_MOUSE_NORM] = Gfx::EngineMouse( 0, 1, 32, Gfx::ENG_RSTATE_TCOLOR_WHITE, Gfx::ENG_RSTATE_TCOLOR_BLACK, Math::Point( 1.0f, 1.0f));
- m_mice[Gfx::ENG_MOUSE_WAIT] = Gfx::EngineMouse( 2, 3, 33, Gfx::ENG_RSTATE_TCOLOR_WHITE, Gfx::ENG_RSTATE_TCOLOR_BLACK, Math::Point( 8.0f, 12.0f));
- m_mice[Gfx::ENG_MOUSE_HAND] = Gfx::EngineMouse( 4, 5, 34, Gfx::ENG_RSTATE_TCOLOR_WHITE, Gfx::ENG_RSTATE_TCOLOR_BLACK, Math::Point( 7.0f, 2.0f));
- m_mice[Gfx::ENG_MOUSE_NO] = Gfx::EngineMouse( 6, 7, 35, Gfx::ENG_RSTATE_TCOLOR_WHITE, Gfx::ENG_RSTATE_TCOLOR_BLACK, Math::Point(10.0f, 10.0f));
- m_mice[Gfx::ENG_MOUSE_EDIT] = Gfx::EngineMouse( 8, 9, -1, Gfx::ENG_RSTATE_TCOLOR_BLACK, Gfx::ENG_RSTATE_TCOLOR_WHITE, Math::Point( 6.0f, 10.0f));
- m_mice[Gfx::ENG_MOUSE_CROSS] = Gfx::EngineMouse(10, 11, -1, Gfx::ENG_RSTATE_TCOLOR_BLACK, Gfx::ENG_RSTATE_TCOLOR_WHITE, Math::Point(10.0f, 10.0f));
- m_mice[Gfx::ENG_MOUSE_MOVEV] = Gfx::EngineMouse(12, 13, -1, Gfx::ENG_RSTATE_TCOLOR_BLACK, Gfx::ENG_RSTATE_TCOLOR_WHITE, Math::Point( 5.0f, 11.0f));
- m_mice[Gfx::ENG_MOUSE_MOVEH] = Gfx::EngineMouse(14, 15, -1, Gfx::ENG_RSTATE_TCOLOR_BLACK, Gfx::ENG_RSTATE_TCOLOR_WHITE, Math::Point(11.0f, 5.0f));
- m_mice[Gfx::ENG_MOUSE_MOVED] = Gfx::EngineMouse(16, 17, -1, Gfx::ENG_RSTATE_TCOLOR_BLACK, Gfx::ENG_RSTATE_TCOLOR_WHITE, Math::Point( 9.0f, 9.0f));
- m_mice[Gfx::ENG_MOUSE_MOVEI] = Gfx::EngineMouse(18, 19, -1, Gfx::ENG_RSTATE_TCOLOR_BLACK, Gfx::ENG_RSTATE_TCOLOR_WHITE, Math::Point( 9.0f, 9.0f));
- m_mice[Gfx::ENG_MOUSE_MOVE] = Gfx::EngineMouse(20, 21, -1, Gfx::ENG_RSTATE_TCOLOR_BLACK, Gfx::ENG_RSTATE_TCOLOR_WHITE, Math::Point(11.0f, 11.0f));
- m_mice[Gfx::ENG_MOUSE_TARGET] = Gfx::EngineMouse(22, 23, -1, Gfx::ENG_RSTATE_TCOLOR_BLACK, Gfx::ENG_RSTATE_TCOLOR_WHITE, Math::Point(15.0f, 15.0f));
- m_mice[Gfx::ENG_MOUSE_SCROLLL] = Gfx::EngineMouse(24, 25, 43, Gfx::ENG_RSTATE_TCOLOR_BLACK, Gfx::ENG_RSTATE_TCOLOR_WHITE, Math::Point( 2.0f, 9.0f));
- m_mice[Gfx::ENG_MOUSE_SCROLLR] = Gfx::EngineMouse(26, 27, 44, Gfx::ENG_RSTATE_TCOLOR_BLACK, Gfx::ENG_RSTATE_TCOLOR_WHITE, Math::Point(17.0f, 9.0f));
- m_mice[Gfx::ENG_MOUSE_SCROLLU] = Gfx::EngineMouse(28, 29, 45, Gfx::ENG_RSTATE_TCOLOR_BLACK, Gfx::ENG_RSTATE_TCOLOR_WHITE, Math::Point( 9.0f, 2.0f));
- m_mice[Gfx::ENG_MOUSE_SCROLLD] = Gfx::EngineMouse(30, 31, 46, Gfx::ENG_RSTATE_TCOLOR_BLACK, Gfx::ENG_RSTATE_TCOLOR_WHITE, Math::Point( 9.0f, 17.0f));
-
- m_mouseSize = Math::Point(0.04f, 0.04f * (800.0f / 600.0f));
- m_mousePos = Math::Point(0.5f, 0.5f);
- m_mouseType = Gfx::ENG_MOUSE_NORM;
- m_mouseVisible = false;
-
- m_texPath = "textures/";
- m_defaultTexParams.format = Gfx::TEX_IMG_RGBA;
- m_defaultTexParams.mipmap = true;
- m_defaultTexParams.minFilter = Gfx::TEX_MIN_FILTER_LINEAR_MIPMAP_LINEAR;
- m_defaultTexParams.magFilter = Gfx::TEX_MAG_FILTER_LINEAR;
-
- m_objectTree.reserve(LEVEL1_PREALLOCATE_COUNT);
- m_objects.reserve(OBJECT_PREALLOCATE_COUNT);
- m_shadow.reserve(SHADOW_PREALLOCATE_COUNT);
- m_groundSpot.reserve(GROUNDSPOT_PREALLOCATE_COUNT);
-}
-
-Gfx::CEngine::~CEngine()
-{
- m_iMan = NULL;
- m_app = NULL;
- m_device = NULL;
-
- m_sound = NULL;
- m_terrain = NULL;
-}
-
-bool Gfx::CEngine::GetWasInit()
-{
- return m_wasInit;
-}
-
-std::string Gfx::CEngine::GetError()
-{
- return m_error;
-}
-
-bool Gfx::CEngine::Create()
-{
- m_wasInit = true;
-
- /*m_lightMan = new Gfx::CLight(m_iMan, this);
- m_text = new Gfx::CText(m_iMan, this);
- m_particle = new Gfx::CParticle(m_iMan, this);
- m_water = new Gfx::CWater(m_iMan, this);
- m_cloud = new Gfx::CCloud(m_iMan, this);
- m_lightning = new Gfx::CLightning(m_iMan, this);
- m_planet = new Gfx::CPlanet(m_iMan, this);*/
-
- m_matWorldInterface.LoadIdentity();
- m_matViewInterface.LoadIdentity();
- Math::LoadOrthoProjectionMatrix(m_matProjInterface, 0.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f);
-
- return true;
-}
-
-void Gfx::CEngine::Destroy()
-{
- // TODO
-
- /*delete m_lightMan;
- m_lightMan = NULL;
-
- delete m_text;
- m_text = NULL;
-
- delete m_particle;
- m_particle = NULL;
-
- delete m_water;
- m_water = NULL;
-
- delete m_cloud;
- m_cloud = NULL;
-
- delete m_lightning;
- m_lightning = NULL;
-
- delete m_planet;
- m_planet = NULL;*/
-
- m_wasInit = false;
-}
-
-void Gfx::CEngine::SetDevice(Gfx::CDevice *device)
-{
- m_device = device;
-}
-
-Gfx::CDevice* Gfx::CEngine::GetDevice()
-{
- return m_device;
-}
-
-bool Gfx::CEngine::AfterDeviceSetInit()
-{
- m_device->SetClearColor(Gfx::Color(0.0f, 0.0f, 0.0f, 0.0f));
-
- m_device->SetRenderState(Gfx::RENDER_STATE_DEPTH_TEST, false);
-
- Gfx::TextureCreateParams params;
- params.format = Gfx::TEX_IMG_RGB;
- params.minFilter = Gfx::TEX_MIN_FILTER_NEAREST;
- params.magFilter = Gfx::TEX_MAG_FILTER_NEAREST;
- params.mipmap = false;
- m_miceTexture = CreateTexture("mouse.png", params);
-
- return true;
-}
-
-Gfx::Texture Gfx::CEngine::CreateTexture(const std::string &texName, const Gfx::TextureCreateParams &params)
-{
- CImage img;
- if (! img.Load(m_app->GetDataFilePath(m_texPath, texName)))
- {
- std::stringstream str;
- str << "Couldn't load texture '" << texName << "': " << img.GetError();
- m_error = str.str();
- return Gfx::Texture(); // invalid texture
- }
-
- Gfx::Texture result = m_device->CreateTexture(&img, params);
-
- if (! result.valid)
- {
- std::stringstream str;
- str << "Couldn't load texture '" << texName << "': " << m_device->GetError();
- m_error = str.str();
- return result;
- }
-
- m_texNameMap[texName] = result;
- m_revTexNameMap[result] = texName;
-
- return result;
-}
-
-Gfx::Texture Gfx::CEngine::CreateTexture(const std::string &texName)
-{
- return CreateTexture(texName, m_defaultTexParams);
-}
-
-void Gfx::CEngine::DestroyTexture(const std::string &texName)
-{
- std::map<std::string, Gfx::Texture>::iterator it = m_texNameMap.find(texName);
- if (it == m_texNameMap.end())
- return;
-
- std::map<Gfx::Texture, std::string>::iterator revIt = m_revTexNameMap.find((*it).second);
-
- m_device->DestroyTexture((*it).second);
-
- m_revTexNameMap.erase(revIt);
- m_texNameMap.erase(it);
-}
-
-void Gfx::CEngine::SetTexture(const std::string &name, int stage)
-{
- std::map<std::string, Gfx::Texture>::iterator it = m_texNameMap.find(name);
- if (it != m_texNameMap.end())
- m_device->SetTexture(stage, (*it).second);
-
- // TODO if not present...
-}
-
-void Gfx::CEngine::SetMaterial(const Gfx::Material &mat)
-{
- m_device->SetMaterial(mat);
-}
-
-void Gfx::CEngine::SetState(int state, Gfx::Color color)
-{
- if ( state == m_lastState && color == m_lastColor )
- return;
-
- m_lastState = state;
- m_lastColor = color;
-
- if ( m_alphaMode != 1 && (state & Gfx::ENG_RSTATE_ALPHA) )
- {
- state &= ~Gfx::ENG_RSTATE_ALPHA;
-
- if (m_alphaMode == 2)
- state |= Gfx::ENG_RSTATE_TTEXTURE_BLACK;
- }
-
- // TODO other modes & thorough testing
-
- if (state & Gfx::ENG_RSTATE_TTEXTURE_BLACK) // The transparent black texture?
- {
- m_device->SetRenderState(Gfx::RENDER_STATE_FOG, false);
- m_device->SetRenderState(Gfx::RENDER_STATE_DEPTH_WRITE, false);
- m_device->SetRenderState(Gfx::RENDER_STATE_BLENDING, true);
- m_device->SetRenderState(Gfx::RENDER_STATE_ALPHA_TEST, false);
- m_device->SetRenderState(Gfx::RENDER_STATE_TEXTURING, true);
-
- m_device->SetBlendFunc(Gfx::BLEND_ONE, Gfx::BLEND_INV_SRC_COLOR);
- m_device->SetTextureEnabled(0, true);
- m_device->SetTextureFactor(color);
-
- Gfx::TextureStageParams params;
- params.colorOperation = Gfx::TEX_MIX_OPER_MODULATE;
- params.colorArg1 = Gfx::TEX_MIX_ARG_TEXTURE;
- params.colorArg2 = Gfx::TEX_MIX_ARG_FACTOR;
- params.alphaOperation = Gfx::TEX_MIX_OPER_MODULATE;
- m_device->SetTextureStageParams(0, params);
- }
- else if (state & Gfx::ENG_RSTATE_TTEXTURE_WHITE) // The transparent white texture?
- {
- m_device->SetRenderState(Gfx::RENDER_STATE_FOG, false);
- m_device->SetRenderState(Gfx::RENDER_STATE_DEPTH_WRITE, false);
- m_device->SetRenderState(Gfx::RENDER_STATE_BLENDING, true);
- m_device->SetRenderState(Gfx::RENDER_STATE_ALPHA_TEST, false);
- m_device->SetRenderState(Gfx::RENDER_STATE_TEXTURING, true);
-
- m_device->SetBlendFunc(Gfx::BLEND_DST_COLOR, Gfx::BLEND_ZERO);
- m_device->SetTextureEnabled(0, true);
- m_device->SetTextureFactor(color.Inverse());
-
- Gfx::TextureStageParams params;
- params.colorOperation = Gfx::TEX_MIX_OPER_ADD;
- params.colorArg1 = Gfx::TEX_MIX_ARG_TEXTURE;
- params.colorArg2 = Gfx::TEX_MIX_ARG_FACTOR;
- params.alphaOperation = Gfx::TEX_MIX_OPER_MODULATE;
- m_device->SetTextureStageParams(0, params);
- }
- else if (state & Gfx::ENG_RSTATE_TCOLOR_BLACK) // The transparent black color?
- {
- m_device->SetRenderState(Gfx::RENDER_STATE_FOG, false);
- m_device->SetRenderState(Gfx::RENDER_STATE_DEPTH_WRITE, false);
- m_device->SetRenderState(Gfx::RENDER_STATE_BLENDING, true);
- m_device->SetRenderState(Gfx::RENDER_STATE_ALPHA_TEST, false);
- m_device->SetRenderState(Gfx::RENDER_STATE_TEXTURING, true);
-
- m_device->SetBlendFunc(Gfx::BLEND_ONE, Gfx::BLEND_INV_SRC_COLOR);
-
- m_device->SetTextureFactor(color);
- m_device->SetTextureEnabled(0, true);
- m_device->SetTextureStageParams(0, Gfx::TextureStageParams());
- }
- else if (state & Gfx::ENG_RSTATE_TCOLOR_WHITE) // The transparent white color?
- {
- m_device->SetRenderState(Gfx::RENDER_STATE_FOG, false);
- m_device->SetRenderState(Gfx::RENDER_STATE_DEPTH_WRITE, false);
- m_device->SetRenderState(Gfx::RENDER_STATE_BLENDING, true);
- m_device->SetRenderState(Gfx::RENDER_STATE_ALPHA_TEST, false);
- m_device->SetRenderState(Gfx::RENDER_STATE_TEXTURING, true);
-
- m_device->SetBlendFunc(Gfx::BLEND_DST_COLOR, Gfx::BLEND_ZERO);
-
- m_device->SetTextureFactor(color.Inverse());
- m_device->SetTextureEnabled(0, true);
- m_device->SetTextureStageParams(0, Gfx::TextureStageParams());
- }
- else if (state & Gfx::ENG_RSTATE_TDIFFUSE) // diffuse color as transparent?
- {
- /*m_device->SetRenderState(D3DRENDERSTATE_FOGENABLE, false);
- m_device->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, false);
- m_device->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, true);
- m_device->SetRenderState(D3DRENDERSTATE_ALPHATESTENABLE, false);
- m_device->SetRenderState(D3DRENDERSTATE_SRCBLEND, m_diffuseSrcBlend[1]);
- m_device->SetRenderState(D3DRENDERSTATE_DESTBLEND, m_diffuseDestBlend[1]);
-
- m_device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
- m_device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
- m_device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_DISABLE);*/
- }
- else if (state & Gfx::ENG_RSTATE_ALPHA) // image with alpha channel?
- {
- /*m_device->SetRenderState(D3DRENDERSTATE_FOGENABLE, true);
- m_device->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, true);
- m_device->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, false);
- m_device->SetRenderState(D3DRENDERSTATE_ALPHATESTENABLE, true);
- m_device->SetRenderState(D3DRENDERSTATE_ALPHAFUNC, D3DCMP_GREATER);
- m_device->SetRenderState(D3DRENDERSTATE_ALPHAREF, (DWORD)(128));
- m_device->SetRenderState(D3DRENDERSTATE_SRCBLEND, m_alphaSrcBlend[1]);
- m_device->SetRenderState(D3DRENDERSTATE_DESTBLEND, m_alphaSrcBlend[1]);
-
- m_device->SetRenderState(D3DRENDERSTATE_TEXTUREFACTOR, color);
- m_device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
- m_device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
- m_device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
- m_device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
- m_device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);*/
- }
- else // normal ?
- {
- m_device->SetRenderState(Gfx::RENDER_STATE_FOG, true);
- m_device->SetRenderState(Gfx::RENDER_STATE_DEPTH_WRITE, true);
- m_device->SetRenderState(Gfx::RENDER_STATE_BLENDING, false);
- m_device->SetRenderState(Gfx::RENDER_STATE_ALPHA_TEST, false);
- m_device->SetRenderState(Gfx::RENDER_STATE_TEXTURING, true);
-
- m_device->SetTextureEnabled(0, true);
- m_device->SetTextureStageParams(0, Gfx::TextureStageParams());
-
- /*m_device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
- m_device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
- m_device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
- m_device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_DISABLE);*/
- }
-
- if (state & Gfx::ENG_RSTATE_FOG)
- m_device->SetRenderState(Gfx::RENDER_STATE_FOG, true);
-
-
- bool second = m_groundSpotVisible || m_dirty;
-
- if ( !m_groundSpotVisible && (state & Gfx::ENG_RSTATE_SECOND) != 0 ) second = false;
- if ( !m_dirty && (state & Gfx::ENG_RSTATE_SECOND) == 0 ) second = false;
-
- if ( (state & ENG_RSTATE_DUAL_BLACK) && second )
- {
- /*m_device->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_MODULATE);
- m_device->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE);
- m_device->SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CURRENT);
- m_device->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
- m_device->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 1);*/
- }
- else if ( (state & ENG_RSTATE_DUAL_WHITE) && second )
- {
- /*m_device->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_ADD);
- m_device->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE);
- m_device->SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CURRENT);
- m_device->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
- m_device->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 1);*/
- }
- else
- {
- m_device->SetTextureEnabled(1, false);
- }
-
- if (state & Gfx::ENG_RSTATE_WRAP)
- {
- /*m_device->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_WRAP);
- m_device->SetTextureStageState(1, D3DTSS_ADDRESS, D3DTADDRESS_WRAP);*/
- }
- else if (state & Gfx::ENG_RSTATE_CLAMP)
- {
- /*m_device->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_CLAMP);
- m_device->SetTextureStageState(1, D3DTSS_ADDRESS, D3DTADDRESS_CLAMP);*/
- }
- else
- {
- /*m_device->SetTextureStageState(0, D3DTSS_ADDRESS, D3DTADDRESS_CLAMP);
- m_device->SetTextureStageState(1, D3DTSS_ADDRESS, D3DTADDRESS_CLAMP);*/
- }
-
- if (state & Gfx::ENG_RSTATE_2FACE)
- {
- m_device->SetRenderState(Gfx::RENDER_STATE_CULLING, false);
- }
- else
- {
- m_device->SetRenderState(Gfx::RENDER_STATE_CULLING, true);
- m_device->SetCullMode(Gfx::CULL_CCW);
- }
-
- if (state & Gfx::ENG_RSTATE_LIGHT)
- m_device->SetGlobalAmbient(Gfx::Color(1.0f, 1.0f, 1.0f, 1.0f));
- else
- m_device->SetGlobalAmbient(m_ambientColor[m_rankView]);
-}
-
-bool Gfx::CEngine::ProcessEvent(const Event &event)
-{
- if (event.type == EVENT_MOUSE_MOVE)
- {
- m_mousePos = event.mouseMove.pos;
- }
- else if (event.type == EVENT_KEY_DOWN)
- {
- // !! Debug, to be removed later !!
-
- if (event.key.key == KEY(F1))
- {
- m_mouseVisible = !m_mouseVisible;
- m_app->SetSystemMouseVisible(! m_app->GetSystemMouseVisibile());
- }
- else if (event.key.key == KEY(F2))
- {
- int index = static_cast<int>(m_mouseType);
- m_mouseType = static_cast<Gfx::EngineMouseType>( (index + 1) % Gfx::ENG_MOUSE_COUNT );
- }
- }
-
- // By default, pass on all events
- return true;
-}
-
-bool Gfx::CEngine::Render()
-{
- m_statisticTriangle = 0;
-
- m_lastState = -1;
- SetState(Gfx::ENG_RSTATE_NORMAL);
-
- m_device->BeginScene();
-
- SetUp3DView();
-
- if (! Draw3DScene() )
- return false;
-
- SetUpInterfaceView();
-
- if (! DrawInterface() )
- return false;
-
- m_device->EndScene();
-
- return true;
-}
-
-void Gfx::CEngine::SetUp3DView()
-{
- // TODO
-}
-
-bool Gfx::CEngine::Draw3DScene()
-{
- // TODO
- return true;
-}
-
-void Gfx::CEngine::SetUpInterfaceView()
-{
- m_device->SetTransform(Gfx::TRANSFORM_WORLD, m_matWorldInterface);
- m_device->SetTransform(Gfx::TRANSFORM_VIEW, m_matViewInterface);
- m_device->SetTransform(Gfx::TRANSFORM_PROJECTION, m_matProjInterface);
-}
-
-bool Gfx::CEngine::DrawInterface()
-{
- Gfx::VertexCol vertices[3] =
- {
- Gfx::VertexCol(Math::Vector( 0.25f, 0.25f, 0.0f), Gfx::Color(1.0f, 0.0f, 0.0f)),
- Gfx::VertexCol(Math::Vector( 0.75f, 0.25f, 0.0f), Gfx::Color(0.0f, 1.0f, 0.0f)),
- Gfx::VertexCol(Math::Vector( 0.5f, 0.75f, 0.0f), Gfx::Color(0.0f, 0.0f, 1.0f))
- };
-
- m_device->DrawPrimitive(Gfx::PRIMITIVE_TRIANGLES, vertices, 3);
-
- DrawMouse();
-
- return true;
-}
-
-void Gfx::CEngine::DrawMouse()
-{
- if (! m_mouseVisible)
- return;
-
- if (m_app->GetSystemMouseVisibile())
- return;
-
- Gfx::Material material;
- material.diffuse = Gfx::Color(1.0f, 1.0f, 1.0f);
- material.ambient = Gfx::Color(0.5f, 0.5f, 0.5f);
-
- m_device->SetMaterial(material);
- m_device->SetTexture(0, m_miceTexture);
-
- int index = static_cast<int>(m_mouseType);
-
- Math::Point pos = m_mousePos;
- pos.x = m_mousePos.x - (m_mice[index].hotPoint.x * m_mouseSize.x) / 32.0f;
- pos.y = m_mousePos.y - ((32.0f - m_mice[index].hotPoint.y) * m_mouseSize.y) / 32.0f;
-
- Math::Point shadowPos;
- shadowPos.x = pos.x + (4.0f/800.0f);
- shadowPos.y = pos.y - (3.0f/600.0f);
-
- SetState(Gfx::ENG_RSTATE_TCOLOR_WHITE);
- DrawMouseSprite(shadowPos, m_mouseSize, m_mice[index].iconShadow);
-
- SetState(m_mice[index].mode1);
- DrawMouseSprite(pos, m_mouseSize, m_mice[index].icon1);
-
- SetState(m_mice[index].mode2);
- DrawMouseSprite(pos, m_mouseSize, m_mice[index].icon2);
-}
-
-void Gfx::CEngine::DrawMouseSprite(Math::Point pos, Math::Point size, int icon)
-{
- if (icon == -1)
- return;
-
- Math::Point p1 = pos;
- Math::Point p2 = p1 + size;
-
- float u1 = (32.0f / 256.0f) * (icon % 8);
- float v1 = (32.0f / 256.0f) * (icon / 8);
- float u2 = u1 + (32.0f / 256.0f);
- float v2 = v1 + (32.0f / 256.0f);
-
- float dp = 0.5f / 256.0f;
- u1 += dp;
- v1 += dp;
- u2 -= dp;
- v2 -= dp;
-
- Math::Vector normal(0.0f, 0.0f, -1.0f);
-
- Gfx::Vertex vertex[4] =
- {
- Gfx::Vertex(Math::Vector(p1.x, p1.y, 0.0f), normal, Math::Point(u1, v2)),
- Gfx::Vertex(Math::Vector(p2.x, p1.y, 0.0f), normal, Math::Point(u2, v2)),
- Gfx::Vertex(Math::Vector(p1.x, p2.y, 0.0f), normal, Math::Point(u1, v1)),
- Gfx::Vertex(Math::Vector(p2.x, p2.y, 0.0f), normal, Math::Point(u2, v1))
- };
-
- m_device->DrawPrimitive(Gfx::PRIMITIVE_TRIANGLE_STRIP, vertex, 4);
- AddStatisticTriangle(2);
-}
-
-bool Gfx::CEngine::GetPause()
-{
- return m_pause;
-}
-
-Math::Vector Gfx::CEngine::GetLookatPt()
-{
- return m_lookatPt;
-}
-
-Math::Vector Gfx::CEngine::GetEyePt()
-{
- return m_eyePt;
-}
-
-void Gfx::CEngine::SetMouseVisible(bool visible)
-{
- m_mouseVisible = visible;
-}
-
-bool Gfx::CEngine::GetMouseVisible()
-{
- return m_mouseVisible;
-}
-
-void Gfx::CEngine::SetMousePos(Math::Point pos)
-{
- m_mousePos = pos;
-}
-
-Math::Point Gfx::CEngine::GetMousePos()
-{
- return m_mousePos;
-}
-
-void Gfx::CEngine::SetMouseType(Gfx::EngineMouseType type)
-{
- m_mouseType = type;
-}
-
-Gfx::EngineMouseType Gfx::CEngine::GetMouseType()
-{
- return m_mouseType;
-}
-
-void Gfx::CEngine::AddStatisticTriangle(int count)
-{
- m_statisticTriangle += count;
-}
diff --git a/src/graphics/common/engine.h b/src/graphics/common/engine.h
deleted file mode 100644
index 9b6cc1f..0000000
--- a/src/graphics/common/engine.h
+++ /dev/null
@@ -1,985 +0,0 @@
-// * 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/.
-
-// engine.h
-
-#pragma once
-
-
-#include "common/event.h"
-#include "graphics/common/color.h"
-#include "graphics/common/material.h"
-#include "graphics/common/texture.h"
-#include "graphics/common/vertex.h"
-#include "math/intpoint.h"
-#include "math/matrix.h"
-#include "math/point.h"
-#include "math/vector.h"
-
-
-#include <string>
-#include <vector>
-#include <map>
-
-
-class CApplication;
-class CInstanceManager;
-class CObject;
-class CSound;
-
-
-namespace Gfx {
-
-class CDevice;
-class CLightManager;
-class CText;
-class CParticle;
-class CWater;
-class CCloud;
-class CLightning;
-class CPlanet;
-class CTerrain;
-
-
-/**
- \enum EngineTriangleType
- \brief Type of triangles drawn for engine objects */
-enum EngineTriangleType
-{
- //! Triangles
- ENG_TRIANGLE_TYPE_6T = 1,
- //! Surfaces
- ENG_TRIANGLE_TYPE_6S = 2
-};
-
-/**
- \struct EngineTriangle
- \brief A triangle drawn by the graphics engine */
-struct EngineTriangle
-{
- //! Triangle vertices
- Gfx::VertexTex2 triangle[3];
- //! Material
- Gfx::Material material;
- //! Render state (TODO: ?)
- int state;
- //! 1st texture
- Gfx::Texture tex1;
- //! 2nd texture
- Gfx::Texture tex2;
-
- EngineTriangle()
- {
- state = 0;
- }
-};
-
-/**
- \enum EngineObjectType
- \brief Class of graphics engine object */
-enum EngineObjectType
-{
- //! Object doesn't exist
- ENG_OBJTYPE_NULL = 0,
- //! Terrain
- ENG_OBJTYPE_TERRAIN = 1,
- //! Fixed object
- ENG_OBJTYPE_FIX = 2,
- //! Moving object
- ENG_OBJTYPE_VEHICULE = 3,
- //! Part of a moving object
- ENG_OBJTYPE_DESCENDANT = 4,
- //! Fixed object type quartz
- ENG_OBJTYPE_QUARTZ = 5,
- //! Fixed object type metal
- ENG_OBJTYPE_METAL = 6
-};
-
-/**
- \struct EngineObject
- \brief Object drawn by the graphics engine */
-struct EngineObject
-{
- //! If true, the object is drawn
- bool visible;
- //! If true, object is behind the 2D interface
- bool drawWorld;
- //! If true, the shape is before the 2D interface
- bool drawFront;
- //! Number of triangles
- int totalTriangles;
- //! Type of object
- Gfx::EngineObjectType type;
- //! Transformation matrix
- Math::Matrix transform;
- //! Distance view - origin (TODO: ?)
- float distance;
- //! Bounding box min (origin 0,0,0 always included)
- Math::Vector bboxMin;
- //! bounding box max (origin 0,0,0 always included)
- Math::Vector bboxMax;
- //! Radius of the sphere at the origin
- float radius;
- //! Rank of the associated shadow
- int shadowRank;
- //! Transparency of the object [0, 1]
- float transparency;
-
- EngineObject()
- {
- visible = false;
- drawWorld = false;
- drawFront = false;
- totalTriangles = 0;
- distance = 0.0f;
- radius = 0.0f;
- shadowRank = 0;
- transparency = 0.0f;
- }
-};
-
-struct EngineObjLevel1;
-struct EngineObjLevel2;
-struct EngineObjLevel3;
-struct EngineObjLevel4;
-struct EngineObjLevel5;
-
-/**
- \struct EngineObjLevel5
- \brief Tier 5 of object tree */
-struct EngineObjLevel5
-{
- Gfx::Material material;
- int state;
- Gfx::EngineTriangleType type;
- std::vector<Gfx::VertexTex2> vertices;
-
- EngineObjLevel5();
-};
-
-/**
- \struct EngineObjLevel4
- \brief Tier 4 of object tree */
-struct EngineObjLevel4
-{
- int reserved;
- std::vector<Gfx::EngineObjLevel5> up;
- Gfx::EngineObjLevel3* down;
-
- EngineObjLevel4();
-};
-
-/**
- \struct EngineObjLevel3
- \brief Tier 3 of object tree */
-struct EngineObjLevel3
-{
- float min;
- float max;
- std::vector<Gfx::EngineObjLevel4> up;
- Gfx::EngineObjLevel2* down;
-
- EngineObjLevel3();
-};
-
-/**
- \struct EngineObjLevel2
- \brief Tier 2 of object tree */
-struct EngineObjLevel2
-{
- int objRank;
- std::vector<Gfx::EngineObjLevel3> up;
- Gfx::EngineObjLevel1* down;
-
- EngineObjLevel2();
-};
-
-/**
- \struct EngineObjLevel1
- \brief Tier 1 of object tree */
-struct EngineObjLevel1
-{
- Gfx::Texture tex1;
- Gfx::Texture tex2;
- std::vector<Gfx::EngineObjLevel2> up;
-
- EngineObjLevel1();
-};
-
-/**
- \struct EngineShadowType
- \brief Type of shadow drawn by the graphics engine */
-enum EngineShadowType
-{
- //! Normal shadow
- ENG_SHADOW_NORM = 0,
- //! TODO: ?
- ENG_SHADOW_WORM = 1
-};
-
-/**
- \struct EngineShadow
- \brief Shadow drawn by the graphics engine */
-struct EngineShadow
-{
- //! If true, shadow is invisible (object being carried for example)
- bool hide;
- //! Rank of the associated object
- int objRank;
- //! Type of shadow
- Gfx::EngineShadowType type;
- //! Position of the shadow
- Math::Vector pos;
- //! Normal to the terrain
- Math::Vector normal;
- //! Angle of the shadow
- float angle;
- //! Radius of the shadow
- float radius;
- //! Intensity of the shadow
- float intensity;
- //! Height from the ground
- float height;
-
- EngineShadow()
- {
- hide = false;
- objRank = 0;
- angle = radius = intensity = height = 0.0f;
- }
-};
-
-/**
- \struct EngineGroundSpot
- \brief A spot (large shadow) drawn on the ground by the graphics engine */
-struct EngineGroundSpot
-{
- //! Color of the shadow
- Gfx::Color color;
- //! Min altitude
- float min;
- //! Max altitude
- float max;
- //! Transition area
- float smooth;
- //! Position for the shadow
- Math::Vector pos;
- //! Radius of the shadow
- float radius;
- //! Position of the shadow drawn
- Math::Vector drawPos;
- //! Radius of the shadow drawn
- float drawRadius;
-
- EngineGroundSpot()
- {
- min = max = smooth = radius = drawRadius = 0.0f;
- }
-};
-
-/**
- \enum EngineGroundMarkPhase
- \brief Phase of life of an EngineGroundMark */
-enum EngineGroundMarkPhase
-{
- //! Increase
- ENG_GR_MARK_PHASE_INC = 1,
- //! Fixed
- ENG_GR_MARK_PHASE_FIX = 2,
- //! Decrease
- ENG_GR_MARK_PHASE_DEC = 2
-};
-
-/**
- \struct EngineGroundMark
- \brief A mark on ground drawn by the graphics engine */
-struct EngineGroundMark
-{
- //! If true, draw mark
- bool draw;
- //! Phase of life
- Gfx::EngineGroundMarkPhase phase;
- //! Times for 3 life phases
- float delay[3];
- //! Fixed time
- float fix;
- //! Position for marks
- Math::Vector pos;
- //! Radius of marks
- float radius;
- //! Color intensity
- float intensity;
- //! Draw position for marks
- Math::Vector drawPos;
- //! Radius for marks
- float drawRadius;
- //! Draw intensity for marks
- float drawIntensity;
- //! X dimension of table
- int dx;
- //! Y dimension of table
- int dy;
- //! Pointer to the table
- char* table;
-
- EngineGroundMark()
- {
- draw = false;
- delay[0] = delay[1] = delay[2] = 0.0f;
- fix = radius = intensity = drawRadius = drawIntensity = 0.0f;
- dx = dy = 0;
- table = NULL;
- }
-};
-
-/**
- \enum EngineTextureMapping
- \brief Type of texture mapping
- */
-enum EngineTextureMapping
-{
- ENG_TEX_MAPPING_X = 1,
- ENG_TEX_MAPPING_Y = 2,
- ENG_TEX_MAPPING_Z = 3,
- ENG_TEX_MAPPING_1X = 4,
- ENG_TEX_MAPPING_1Y = 5,
- ENG_TEX_MAPPING_1Z = 6
-};
-
-
-/**
- \enum EngineRenderState
- \brief Render state of graphics engine
-
- States are used for settings certain modes, for instance texturing and blending.
- The enum is a bitmask and some of the states can be OR'd together. */
-enum EngineRenderState
-{
- //! Normal opaque materials
- ENG_RSTATE_NORMAL = 0,
- //! The transparent texture (black = no)
- ENG_RSTATE_TTEXTURE_BLACK = (1<<0),
- //! The transparent texture (white = no)
- ENG_RSTATE_TTEXTURE_WHITE = (1<<1),
- //! The transparent diffuse color
- ENG_RSTATE_TDIFFUSE = (1<<2),
- //! Texture wrap
- ENG_RSTATE_WRAP = (1<<3),
- //! Texture borders with solid color
- ENG_RSTATE_CLAMP = (1<<4),
- //! Light texture (ambient max)
- ENG_RSTATE_LIGHT = (1<<5),
- //! Double black texturing
- ENG_RSTATE_DUAL_BLACK = (1<<6),
- //! Double white texturing
- ENG_RSTATE_DUAL_WHITE = (1<<7),
- //! Part 1 (no change in. MOD!)
- ENG_RSTATE_PART1 = (1<<8),
- //! Part 2
- ENG_RSTATE_PART2 = (1<<9),
- //! Part 3
- ENG_RSTATE_PART3 = (1<<10),
- //! Part 4
- ENG_RSTATE_PART4 = (1<<11),
- //! Double-sided face
- ENG_RSTATE_2FACE = (1<<12),
- //! Image using alpha channel
- ENG_RSTATE_ALPHA = (1<<13),
- //! Always use 2nd floor texturing
- ENG_RSTATE_SECOND = (1<<14),
- //! Causes the fog
- ENG_RSTATE_FOG = (1<<15),
- //! The transparent color (black = no)
- ENG_RSTATE_TCOLOR_BLACK = (1<<16),
- //! The transparent color (white = no)
- ENG_RSTATE_TCOLOR_WHITE = (1<<17)
-};
-
-
-/**
- \enum EngineMouseType
- \brief Type of mouse cursor displayed in-game */
-enum EngineMouseType
-{
- //! Normal cursor (arrow)
- ENG_MOUSE_NORM = 0,
- //! Busy
- ENG_MOUSE_WAIT = 1,
- //! Edit (I-beam)
- ENG_MOUSE_EDIT = 2,
- //! Hand
- ENG_MOUSE_HAND = 3,
- //! Small cross
- ENG_MOUSE_CROSS = 4,
- //! TODO: ?
- ENG_MOUSE_SHOW = 5,
- //! Crossed out sign
- ENG_MOUSE_NO = 6,
- //! Resize
- ENG_MOUSE_MOVE = 7,
- //! Resize horizontally
- ENG_MOUSE_MOVEH = 8,
- //! Resize vertically
- ENG_MOUSE_MOVEV = 9,
- //! Resize diagonally bottom-left to top-right
- ENG_MOUSE_MOVED = 10,
- //! Resize diagonally top-left to bottom-right
- ENG_MOUSE_MOVEI = 11,
- //! Scroll to the left
- ENG_MOUSE_SCROLLL = 12,
- //! Scroll to the right
- ENG_MOUSE_SCROLLR = 13,
- //! Scroll up
- ENG_MOUSE_SCROLLU = 14,
- //! Scroll down
- ENG_MOUSE_SCROLLD = 15,
- //! Larger crosshair
- ENG_MOUSE_TARGET = 16,
-
- //! Number of items in enum
- ENG_MOUSE_COUNT
-};
-
-/**
- \struct EngineMouse
- \brief Information about mouse cursor */
-struct EngineMouse
-{
- //! Index of texture element for 1st image
- int icon1;
- //! Index of texture element for 2nd image
- int icon2;
- //! Shadow texture part
- int iconShadow;
- //! Mode to render 1st image in
- Gfx::EngineRenderState mode1;
- //! Mode to render 2nd image in
- Gfx::EngineRenderState mode2;
- //! Hot point
- Math::Point hotPoint;
-
- EngineMouse(int icon1 = -1, int icon2 = -1, int iconShadow = -1,
- Gfx::EngineRenderState mode1 = Gfx::ENG_RSTATE_NORMAL,
- Gfx::EngineRenderState mode2 = Gfx::ENG_RSTATE_NORMAL,
- Math::Point hotPoint = Math::Point())
- {
- this->icon1 = icon1;
- this->icon2 = icon2;
- this->iconShadow = iconShadow;
- this->mode1 = mode1;
- this->mode2 = mode2;
- this->hotPoint = hotPoint;
- }
-};
-
-
-/**
- \class CEngine
- \brief The graphics engine
-
- This is the main class for graphics engine. It is responsible for drawing the 3D scene,
- setting various render states, and facilitating the drawing of 2D interface.
-
- It uses a lower-level CDevice object which is implementation-independent core engine.
-
- \section Objecs Engine objects
-
- The 3D scene is composed of objects which are basically collections of triangles forming
- a surface or simply independent triangles in space. Objects are stored in the engine
- as a tree structure which is composed of 5 tiers (EngineObjLevel1, EngineObjLevel2 and so on).
- Each tier stores some data about object triangle, like textures or materials used.
- Additional information on objects stored are in EngineObject structure.
- Each object is uniquely identified by its rank.
-
- ...
- */
-class CEngine
-{
-public:
- CEngine(CInstanceManager *iMan, CApplication *app);
- ~CEngine();
-
- bool GetWasInit();
- std::string GetError();
-
- bool Create();
- void Destroy();
-
- void SetDevice(Gfx::CDevice *device);
- Gfx::CDevice* GetDevice();
-
- bool AfterDeviceSetInit();
-
- void SetTerrain(Gfx::CTerrain* terrain);
-
- bool ProcessEvent(const Event &event);
-
- bool Render();
-
-
- bool WriteProfile();
-
- void SetPause(bool pause);
- bool GetPause();
-
- void SetMovieLock(bool lock);
- bool GetMovieLock();
-
- void SetShowStat(bool show);
- bool GetShowStat();
-
- void SetRenderEnable(bool enable);
-
- int OneTimeSceneInit();
- int InitDeviceObjects();
- int DeleteDeviceObjects();
- int RestoreSurfaces();
- int FrameMove(float rTime);
- void StepSimulation(float rTime);
- int FinalCleanup();
- void AddStatisticTriangle(int nb);
- int GetStatisticTriangle();
- void SetHiliteRank(int *rankList);
- bool GetHilite(Math::Point &p1, Math::Point &p2);
- bool GetSpriteCoord(int &x, int &y);
- void SetInfoText(int line, char* text);
- char* GetInfoText(int line);
- void FirstExecuteAdapt(bool first);
-
- bool GetFullScreen();
-
- Math::Matrix* GetMatView();
- Math::Matrix* GetMatLeftView();
- Math::Matrix* GetMatRightView();
-
- void TimeInit();
- void TimeEnterGel();
- void TimeExitGel();
- float TimeGet();
-
- int GetRestCreate();
- int CreateObject();
- void FlushObject();
- bool DeleteObject(int objRank);
- bool SetDrawWorld(int objRank, bool draw);
- bool SetDrawFront(int objRank, bool draw);
-
- bool AddTriangle(int objRank, Gfx::VertexTex2* vertex, int nb, const Gfx::Material &mat,
- int state, std::string texName1, std::string texName2,
- float min, float max, bool globalUpdate);
- bool AddSurface(int objRank, Gfx::VertexTex2* vertex, int nb, const Gfx::Material &mat,
- int state, std::string texName1, std::string texName2,
- float min, float max, bool globalUpdate);
- bool AddQuick(int objRank, Gfx::EngineObjLevel5* buffer,
- std::string texName1, std::string texName2,
- float min, float max, bool globalUpdate);
- Gfx::EngineObjLevel5* SearchTriangle(int objRank, const Gfx::Material &mat,
- int state, std::string texName1, std::string texName2,
- float min, float max);
-
- void ChangeLOD();
- bool ChangeSecondTexture(int objRank, char* texName2);
- int GetTotalTriangles(int objRank);
- int GetTriangles(int objRank, float min, float max, Gfx::EngineTriangle* buffer, int size, float percent);
- bool GetBBox(int objRank, Math::Vector &min, Math::Vector &max);
- bool ChangeTextureMapping(int objRank, const Gfx::Material &mat, int state,
- const std::string &texName1, const std::string &texName2,
- float min, float max, Gfx::EngineTextureMapping mode,
- float au, float bu, float av, float bv);
- bool TrackTextureMapping(int objRank, const Gfx::Material &mat, int state,
- const std::string &texName1, const std::string &texName2,
- float min, float max, Gfx::EngineTextureMapping mode,
- float pos, float factor, float tl, float ts, float tt);
- bool SetObjectTransform(int objRank, const Math::Matrix &transform);
- bool GetObjectTransform(int objRank, Math::Matrix &transform);
- bool SetObjectType(int objRank, Gfx::EngineObjectType type);
- Gfx::EngineObjectType GetObjectType(int objRank);
- bool SetObjectTransparency(int objRank, float value);
-
- bool ShadowCreate(int objRank);
- void ShadowDelete(int objRank);
- bool SetObjectShadowHide(int objRank, bool hide);
- bool SetObjectShadowType(int objRank, Gfx::EngineShadowType type);
- bool SetObjectShadowPos(int objRank, const Math::Vector &pos);
- bool SetObjectShadowNormal(int objRank, const Math::Vector &n);
- bool SetObjectShadowAngle(int objRank, float angle);
- bool SetObjectShadowRadius(int objRank, float radius);
- bool SetObjectShadowIntensity(int objRank, float intensity);
- bool SetObjectShadowHeight(int objRank, float h);
- float GetObjectShadowRadius(int objRank);
-
- void GroundSpotFlush();
- int GroundSpotCreate();
- void GroundSpotDelete(int rank);
- bool SetObjectGroundSpotPos(int rank, const Math::Vector &pos);
- bool SetObjectGroundSpotRadius(int rank, float radius);
- bool SetObjectGroundSpotColor(int rank, const Gfx::Color &color);
- bool SetObjectGroundSpotMinMax(int rank, float min, float max);
- bool SetObjectGroundSpotSmooth(int rank, float smooth);
-
- int GroundMarkCreate(Math::Vector pos, float radius,
- float delay1, float delay2, float delay3,
- int dx, int dy, char* table);
- bool GroundMarkDelete(int rank);
-
- void Update();
-
- void SetViewParams(const Math::Vector &eyePt, const Math::Vector &lookatPt,
- const Math::Vector &upVec, float eyeDistance);
-
- Gfx::Texture CreateTexture(const std::string &texName,
- const Gfx::TextureCreateParams &params);
- Gfx::Texture CreateTexture(const std::string &texName);
- void DestroyTexture(const std::string &texName);
-
- bool LoadTexture(const std::string &name, int stage = 0);
- bool LoadAllTextures();
-
- void SetLimitLOD(int rank, float limit);
- float GetLimitLOD(int rank, bool last=false);
-
- void SetTerrainVision(float vision);
-
- void SetGroundSpot(bool mode);
- bool GetGroundSpot();
- void SetShadow(bool mode);
- bool GetShadow();
- void SetDirty(bool mode);
- bool GetDirty();
- void SetFog(bool mode);
- bool GetFog();
- bool GetStateColor();
-
- void SetSecondTexture(int texNum);
- int GetSecondTexture();
-
- void SetRankView(int rank);
- int GetRankView();
-
- void SetDrawWorld(bool draw);
- void SetDrawFront(bool draw);
-
- void SetAmbientColor(const Gfx::Color &color, int rank = 0);
- Gfx::Color GetAmbientColor(int rank = 0);
-
- void SetWaterAddColor(const Gfx::Color &color);
- Gfx::Color GetWaterAddColor();
-
- void SetFogColor(const Gfx::Color &color, int rank = 0);
- Gfx::Color GetFogColor(int rank = 0);
-
- void SetDeepView(float length, int rank = 0, bool ref=false);
- float GetDeepView(int rank = 0);
-
- void SetFogStart(float start, int rank = 0);
- float GetFogStart(int rank = 0);
-
- void SetBackground(const std::string &name, Gfx::Color up = Gfx::Color(), Gfx::Color down = Gfx::Color(),
- Gfx::Color cloudUp = Gfx::Color(), Gfx::Color cloudDown = Gfx::Color(),
- bool full = false, bool quarter = false);
- void GetBackground(const std::string &name, Gfx::Color &up, Gfx::Color &down,
- Gfx::Color &cloudUp, Gfx::Color &cloudDown,
- bool &full, bool &quarter);
- void SetFrontsizeName(char *name);
- void SetOverFront(bool front);
- void SetOverColor(const Gfx::Color &color = Gfx::Color(), int mode = ENG_RSTATE_TCOLOR_BLACK);
-
- void SetParticleDensity(float value);
- float GetParticleDensity();
- float ParticleAdapt(float factor);
-
- void SetClippingDistance(float value);
- float GetClippingDistance();
-
- void SetObjectDetail(float value);
- float GetObjectDetail();
-
- void SetGadgetQuantity(float value);
- float GetGadgetQuantity();
-
- void SetTextureQuality(int value);
- int GetTextureQuality();
-
- void SetTotoMode(bool present);
- bool GetTotoMode();
-
- void SetLensMode(bool present);
- bool GetLensMode();
-
- void SetWaterMode(bool present);
- bool GetWaterMode();
-
- void SetLightingMode(bool present);
- bool GetLightingMode();
-
- void SetSkyMode(bool present);
- bool GetSkyMode();
-
- void SetBackForce(bool present);
- bool GetBackForce();
-
- void SetPlanetMode(bool present);
- bool GetPlanetMode();
-
- void SetLightMode(bool present);
- bool GetLightMode();
-
- void SetEditIndentMode(bool autoIndent);
- bool GetEditIndentMode();
-
- void SetEditIndentValue(int value);
- int GetEditIndentValue();
-
- void SetSpeed(float speed);
- float GetSpeed();
-
- void SetTracePrecision(float factor);
- float GetTracePrecision();
-
- void SetFocus(float focus);
- float GetFocus();
- Math::Vector GetEyePt();
- Math::Vector GetLookatPt();
- float GetEyeDirH();
- float GetEyeDirV();
- Math::Point GetDim();
- void UpdateMatProj();
-
- void ApplyChange();
-
- void FlushPressKey();
- void ResetKey();
- void SetKey(int keyRank, int option, int key);
- int GetKey(int keyRank, int option);
-
- void SetJoystick(bool enable);
- bool GetJoystick();
-
- void SetDebugMode(bool mode);
- bool GetDebugMode();
- bool GetSetupMode();
-
- bool IsVisiblePoint(const Math::Vector &pos);
-
- int DetectObject(Math::Point mouse);
- void SetState(int state, Gfx::Color color = Gfx::Color(1.0f, 1.0f, 1.0f, 1.0f));
- void SetTexture(const std::string &name, int stage = 0);
- void SetMaterial(const Gfx::Material &mat);
-
- void SetMouseVisible(bool show);
- bool GetMouseVisible();
- void SetMousePos(Math::Point pos);
- Math::Point GetMousePos();
- void SetMouseType(Gfx::EngineMouseType type);
- Gfx::EngineMouseType GetMouseType();
-
- CText* GetText();
-
- bool ChangeColor(char *name, Gfx::Color colorRef1, Gfx::Color colorNew1,
- Gfx::Color colorRef2, Gfx::Color colorNew2,
- float tolerance1, float tolerance2,
- Math::Point ts, Math::Point ti,
- Math::Point *pExclu=0, float shift=0.0f, bool hSV=false);
- bool OpenImage(char *name);
- bool CopyImage();
- bool LoadImage();
- bool ScrollImage(int dx, int dy);
- bool SetDot(int x, int y, Gfx::Color color);
- bool CloseImage();
- bool WriteScreenShot(char *filename, int width, int height);
- //bool GetRenderDC(HDC &hDC);
- //bool ReleaseRenderDC(HDC &hDC);
- //PBITMAPINFO CreateBitmapInfoStruct(HBITMAP hBmp);
- //bool CreateBMPFile(LPTSTR pszFile, PBITMAPINFO pbi, HBITMAP hBMP, HDC hDC);
-
-protected:
-
- void SetUp3DView();
- bool Draw3DScene();
-
- void SetUpInterfaceView();
- bool DrawInterface();
-
- void DrawGroundSpot();
- void DrawShadow();
- void DrawBackground();
- void DrawBackgroundGradient(Gfx::Color up, Gfx::Color down);
- void DrawBackgroundImageQuarter(Math::Point p1, Math::Point p2, char *name);
- void DrawBackgroundImage();
- void DrawPlanet();
- void DrawFrontsize();
- void DrawOverColor();
- void DrawHilite();
- void DrawMouse();
- void DrawMouseSprite(Math::Point pos, Math::Point dim, int icon);
-
- /*
- Gfx::ObjLevel2* AddLevel1(Gfx::ObjLevel1 *&p1, char* texName1, char* texName2);
- Gfx::ObjLevel3* AddLevel2(Gfx::ObjLevel2 *&p2, int objRank);
- Gfx::ObjLevel4* AddLevel3(Gfx::ObjLevel3 *&p3, float min, float max);
- Gfx::ObjLevel5* AddLevel4(Gfx::ObjLevel4 *&p4, int reserve);
- Gfx::ObjLevel6* AddLevel5(Gfx::ObjLevel5 *&p5, Gfx::TriangleType type, const Gfx::Material &mat, int state, int nb);*/
-
- bool IsVisible(int objRank);
- bool DetectBBox(int objRank, Math::Point mouse);
- bool GetBBox2D(int objRank, Math::Point &min, Math::Point &max);
- bool DetectTriangle(Math::Point mouse, Gfx::VertexTex2 *triangle, int objRank, float &dist);
- bool TransformPoint(Math::Vector &p2D, int objRank, Math::Vector p3D);
- void ComputeDistance();
- void UpdateGeometry();
-
-protected:
- CInstanceManager* m_iMan;
- CApplication* m_app;
- CSound* m_sound;
- Gfx::CDevice* m_device;
- Gfx::CText* m_text;
- Gfx::CLightManager* m_lightMan;
- Gfx::CParticle* m_particle;
- Gfx::CWater* m_water;
- Gfx::CCloud* m_cloud;
- Gfx::CLightning* m_lightning;
- Gfx::CPlanet* m_planet;
- Gfx::CTerrain* m_terrain;
-
- bool m_wasInit;
- std::string m_error;
-
- int m_blackSrcBlend[2];
- int m_blackDestBlend[2];
- int m_whiteSrcBlend[2];
- int m_whiteDestBlend[2];
- int m_diffuseSrcBlend[2];
- int m_diffuseDestBlend[2];
- int m_alphaSrcBlend[2];
- int m_alphaDestBlend[2];
-
- Math::Matrix m_matProj;
- Math::Matrix m_matLeftView;
- Math::Matrix m_matRightView;
- Math::Matrix m_matView;
- float m_focus;
-
- Math::Matrix m_matWorldInterface;
- Math::Matrix m_matProjInterface;
- Math::Matrix m_matViewInterface;
-
- long m_baseTime;
- long m_stopTime;
- float m_absTime;
- float m_lastTime;
- float m_speed;
- bool m_pause;
- bool m_render;
- bool m_movieLock;
-
- Math::IntPoint m_dim;
- Math::IntPoint m_lastDim;
-
- std::vector<Gfx::EngineObjLevel1> m_objectTree;
- std::vector<Gfx::EngineObject> m_objects;
- std::vector<Gfx::EngineShadow> m_shadow;
- std::vector<Gfx::EngineGroundSpot> m_groundSpot;
- Gfx::EngineGroundMark m_groundMark;
-
- Math::Vector m_eyePt;
- Math::Vector m_lookatPt;
- float m_eyeDirH;
- float m_eyeDirV;
- int m_rankView;
- Gfx::Color m_ambientColor[2];
- Gfx::Color m_backColor[2];
- Gfx::Color m_fogColor[2];
- float m_deepView[2];
- float m_fogStart[2];
- Gfx::Color m_waterAddColor;
- int m_statisticTriangle;
- bool m_updateGeometry;
- //char m_infoText[10][200];
- int m_alphaMode;
- bool m_stateColor;
- bool m_forceStateColor;
- bool m_groundSpotVisible;
- bool m_shadowVisible;
- bool m_dirty;
- bool m_fog;
- bool m_firstGroundSpot;
- int m_secondTexNum;
- std::string m_backgroundName;
- Gfx::Color m_backgroundColorUp;
- Gfx::Color m_backgroundColorDown;
- Gfx::Color m_backgroundCloudUp;
- Gfx::Color m_backgroundCloudDown;
- bool m_backgroundFull;
- bool m_backgroundQuarter;
- bool m_overFront;
- Gfx::Color m_overColor;
- int m_overMode;
- std::string m_frontsizeName;
- bool m_drawWorld;
- bool m_drawFront;
- float m_limitLOD[2];
- float m_particuleDensity;
- float m_clippingDistance;
- float m_lastClippingDistance;
- float m_objectDetail;
- float m_lastObjectDetail;
- float m_terrainVision;
- float m_gadgetQuantity;
- int m_textureQuality;
- bool m_totoMode;
- bool m_lensMode;
- bool m_waterMode;
- bool m_skyMode;
- bool m_backForce;
- bool m_planetMode;
- bool m_lightMode;
- bool m_editIndentMode;
- int m_editIndentValue;
- float m_tracePrecision;
-
- int m_hiliteRank[100];
- bool m_hilite;
- Math::Point m_hiliteP1;
- Math::Point m_hiliteP2;
-
- int m_lastState;
- Gfx::Color m_lastColor;
- char m_lastTexture[2][50];
- Gfx::Material m_lastMaterial;
-
- std::string m_texPath;
- Gfx::TextureCreateParams m_defaultTexParams;
-
- std::map<std::string, Gfx::Texture> m_texNameMap;
- std::map<Gfx::Texture, std::string> m_revTexNameMap;
-
- Gfx::EngineMouse m_mice[Gfx::ENG_MOUSE_COUNT];
- Gfx::Texture m_miceTexture;
- Math::Point m_mouseSize;
- Gfx::EngineMouseType m_mouseType;
- Math::Point m_mousePos;
- bool m_mouseVisible;
-
- //LPDIRECTDRAWSURFACE7 m_imageSurface;
- //DDSURFACEDESC2 m_imageDDSD;
- //WORD* m_imageCopy;
- //int m_imageDX;
- //int m_imageDY;
-};
-
-}; // namespace Gfx
diff --git a/src/graphics/common/light.cpp b/src/graphics/common/light.cpp
deleted file mode 100644
index 3ca890c..0000000
--- a/src/graphics/common/light.cpp
+++ /dev/null
@@ -1,416 +0,0 @@
-// * 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/.
-
-// light.cpp
-
-#include "graphics/common/light.h"
-
-#include "common/iman.h"
-#include "graphics/common/device.h"
-#include "math/geometry.h"
-
-#include <cmath>
-
-
-void Gfx::LightProgression::Init(float value)
-{
- starting = value;
- ending = value;
- current = value;
- progress = 0.0f;
- speed = 100.0f;
-}
-
-void Gfx::LightProgression::Update(float rTime)
-{
- if (speed < 100.0f)
- {
- if (progress < 1.0f)
- {
- progress += speed * rTime;
- if (progress > 1.0f)
- progress = 1.0f;
- }
-
- current = starting + progress * (ending - starting);
- }
- else
- {
- current = ending;
- }
-}
-
-void Gfx::LightProgression::SetTarget(float value)
-{
- starting = current;
- ending = value;
- progress = 0.0f;
-}
-
-
-Gfx::DynamicLight::DynamicLight()
-{
- used = enabled = false;
-}
-
-
-
-Gfx::CLightManager::CLightManager(CInstanceManager* iMan, Gfx::CEngine* engine)
-{
- m_iMan = iMan;
- m_iMan->AddInstance(CLASS_LIGHT, this);
-
- m_device = NULL;
- m_engine = engine;
-
- m_time = 0.0f;
-}
-
-Gfx::CLightManager::~CLightManager()
-{
- m_iMan->DeleteInstance(CLASS_LIGHT, this);
-
- m_iMan = NULL;
- m_device = NULL;
- m_engine = NULL;
-}
-
-void Gfx::CLightManager::SetDevice(Gfx::CDevice* device)
-{
- m_device = device;
-
- m_dynLights = std::vector<Gfx::DynamicLight>(m_device->GetMaxLightCount(), Gfx::DynamicLight());
-}
-
-void Gfx::CLightManager::FlushLights()
-{
- for (int i = 0; i < static_cast<int>( m_dynLights.size() ); i++)
- {
- m_dynLights[i].used = false;
- m_device->SetLightEnabled(i, false);
- }
-}
-
-/** Returns the index of light created or -1 if all lights are used. */
-int Gfx::CLightManager::CreateLight()
-{
- for (int i = 0; i < static_cast<int>( m_dynLights.size() ); i++)
- {
- if (m_dynLights[i].used) continue;
-
- m_dynLights[i] = Gfx::DynamicLight();
-
- m_dynLights[i].used = true;
- m_dynLights[i].enabled = true;
-
- m_dynLights[i].includeType = Gfx::ENG_OBJTYPE_NULL;
- m_dynLights[i].excludeType = Gfx::ENG_OBJTYPE_NULL;
-
- m_dynLights[i].light.type = Gfx::LIGHT_DIRECTIONAL;
- m_dynLights[i].light.diffuse = Gfx::Color(0.5f, 0.5f, 0.5f);
- m_dynLights[i].light.position = Math::Vector(-100.0f, 100.0f, -100.0f);
- m_dynLights[i].light.direction = Math::Vector( 1.0f, -1.0f, 1.0f);
-
- m_dynLights[i].intensity.Init(1.0f); // maximum
- m_dynLights[i].colorRed.Init(0.5f);
- m_dynLights[i].colorGreen.Init(0.5f);
- m_dynLights[i].colorBlue.Init(0.5f); // gray
-
- return i;
- }
-
- return -1;
-}
-
-bool Gfx::CLightManager::DeleteLight(int lightRank)
-{
- if ( (lightRank < 0) || (lightRank >= static_cast<int>( m_dynLights.size() )) )
- return false;
-
- m_dynLights[lightRank].used = false;
- m_device->SetLightEnabled(lightRank, false);
-
- return true;
-}
-
-// Specifies a light.
-
-bool Gfx::CLightManager::SetLight(int lightRank, const Gfx::Light &light)
-{
- if ( (lightRank < 0) || (lightRank >= static_cast<int>( m_dynLights.size() )) )
- return false;
-
- m_dynLights[lightRank].light = light;
-
- m_dynLights[lightRank].colorRed.Init(m_dynLights[lightRank].light.diffuse.r);
- m_dynLights[lightRank].colorGreen.Init(m_dynLights[lightRank].light.diffuse.g);
- m_dynLights[lightRank].colorBlue.Init(m_dynLights[lightRank].light.diffuse.b);
-
- return true;
-}
-
-bool Gfx::CLightManager::GetLight(int lightRank, Gfx::Light &light)
-{
- if ( (lightRank < 0) || (lightRank >= static_cast<int>( m_dynLights.size() )) )
- return false;
-
- light = m_dynLights[lightRank].light;
- return true;
-}
-
-bool Gfx::CLightManager::SetLightEnabled(int lightRank, bool enabled)
-{
- if ( (lightRank < 0) || (lightRank >= static_cast<int>( m_dynLights.size() )) )
- return false;
-
- m_dynLights[lightRank].enabled = enabled;
- return true;
-}
-
-bool Gfx::CLightManager::SetLightIncludeType(int lightRank, Gfx::EngineObjectType type)
-{
- if ( (lightRank < 0) || (lightRank >= static_cast<int>( m_dynLights.size() )) )
- return false;
-
- m_dynLights[lightRank].includeType = type;
- return true;
-}
-
-bool Gfx::CLightManager::SetLightExcludeType(int lightRank, Gfx::EngineObjectType type)
-{
- if ( (lightRank < 0) || (lightRank >= static_cast<int>( m_dynLights.size() )) )
- return false;
-
- m_dynLights[lightRank].excludeType = type;
- return true;
-}
-
-bool Gfx::CLightManager::SetLightPos(int lightRank, const Math::Vector &pos)
-{
- if ( (lightRank < 0) || (lightRank >= static_cast<int>( m_dynLights.size() )) )
- return false;
-
- m_dynLights[lightRank].light.position = pos;
- return true;
-}
-
-Math::Vector Gfx::CLightManager::GetLightPos(int lightRank)
-{
- if ( (lightRank < 0) || (lightRank >= static_cast<int>( m_dynLights.size() )) )
- return Math::Vector(0.0f, 0.0f, 0.0f);
-
- return m_dynLights[lightRank].light.position;
-}
-
-bool Gfx::CLightManager::SetLightDir(int lightRank, const Math::Vector &dir)
-{
- if ( (lightRank < 0) || (lightRank >= static_cast<int>( m_dynLights.size() )) )
- return false;
-
- m_dynLights[lightRank].light.direction = dir;
- return true;
-}
-
-Math::Vector Gfx::CLightManager::GetLightDir(int lightRank)
-{
- if ( (lightRank < 0) || (lightRank >= static_cast<int>( m_dynLights.size() )) )
- return Math::Vector(0.0f, 0.0f, 0.0f);
-
- return m_dynLights[lightRank].light.direction;
-}
-
-bool Gfx::CLightManager::SetLightIntensitySpeed(int lightRank, float speed)
-{
- if ( (lightRank < 0) || (lightRank >= static_cast<int>( m_dynLights.size() )) )
- return false;
-
- m_dynLights[lightRank].intensity.speed = speed;
- return true;
-}
-
-bool Gfx::CLightManager::SetLightIntensity(int lightRank, float value)
-{
- if ( (lightRank < 0) || (lightRank >= static_cast<int>( m_dynLights.size() )) )
- return false;
-
- m_dynLights[lightRank].intensity.SetTarget(value);
- return true;
-}
-
-float Gfx::CLightManager::GetLightIntensity(int lightRank)
-{
- if ( (lightRank < 0) || (lightRank >= static_cast<int>( m_dynLights.size() )) )
- return 0.0f;
-
- return m_dynLights[lightRank].intensity.current;
-}
-
-
-bool Gfx::CLightManager::SetLightColorSpeed(int lightRank, float speed)
-{
- if ( (lightRank < 0) || (lightRank >= static_cast<int>( m_dynLights.size() )) )
- return false;
-
- m_dynLights[lightRank].colorRed.speed = speed;
- m_dynLights[lightRank].colorGreen.speed = speed;
- m_dynLights[lightRank].colorBlue.speed = speed;
- return true;
-}
-
-bool Gfx::CLightManager::SetLightColor(int lightRank, const Gfx::Color &color)
-{
- if ( (lightRank < 0) || (lightRank >= static_cast<int>( m_dynLights.size() )) )
- return false;
-
- m_dynLights[lightRank].colorRed.SetTarget(color.r);
- m_dynLights[lightRank].colorGreen.SetTarget(color.g);
- m_dynLights[lightRank].colorBlue.SetTarget(color.b);
- return true;
-}
-
-Gfx::Color Gfx::CLightManager::GetLightColor(int lightRank)
-{
- if ( (lightRank < 0) || (lightRank >= static_cast<int>( m_dynLights.size() )) )
- return Gfx::Color(0.5f, 0.5f, 0.5f, 0.5f);
-
- Gfx::Color color;
- color.r = m_dynLights[lightRank].colorRed.current;
- color.g = m_dynLights[lightRank].colorGreen.current;
- color.b = m_dynLights[lightRank].colorBlue.current;
- return color;
-}
-
-void Gfx::CLightManager::AdaptLightColor(const Gfx::Color &color, float factor)
-{
- for (int i = 0; i < static_cast<int>( m_dynLights.size() ); i++)
- {
- if (! m_dynLights[i].used)
- continue;
-
- Gfx::Color value;
- value.r = m_dynLights[i].colorRed.current;
- value.g = m_dynLights[i].colorGreen.current;
- value.b = m_dynLights[i].colorBlue.current;
-
- value.r += color.r * factor;
- value.g += color.g * factor;
- value.b += color.b * factor;
-
- m_dynLights[i].colorRed.Init(value.r);
- m_dynLights[i].colorGreen.Init(value.g);
- m_dynLights[i].colorBlue.Init(value.b);
- }
-
- UpdateLights();
-}
-
-void Gfx::CLightManager::UpdateProgression(float rTime)
-{
- if (m_engine->GetPause())
- return;
-
- m_time += rTime;
-
- for (int i = 0; i < static_cast<int>( m_dynLights.size() ); i++)
- {
- if (! m_dynLights[i].used)
- continue;
-
- m_dynLights[i].intensity.Update(rTime);
- m_dynLights[i].colorRed.Update(rTime);
- m_dynLights[i].colorGreen.Update(rTime);
- m_dynLights[i].colorBlue.Update(rTime);
-
- if (m_dynLights[i].includeType == Gfx::ENG_OBJTYPE_QUARTZ)
- {
- m_dynLights[i].light.direction.x = sinf(1.0f * (m_time + i*Math::PI*0.5f));
- m_dynLights[i].light.direction.z = cosf(1.1f * (m_time + i*Math::PI*0.5f));
- m_dynLights[i].light.direction.y = -1.0f + 0.5f * cosf((m_time + i*Math::PI*0.5f)*2.7f);
- }
-
- if (m_dynLights[i].includeType == Gfx::ENG_OBJTYPE_METAL)
- {
- Math::Vector dir = m_engine->GetEyePt() - m_engine->GetLookatPt();
- float angle = Math::RotateAngle(dir.x, dir.z);
- angle += Math::PI * 0.5f * i;
- m_dynLights[i].light.direction.x = sinf(2.0f * angle);
- m_dynLights[i].light.direction.z = cosf(2.0f * angle);
- }
- }
-}
-
-
-void Gfx::CLightManager::UpdateLights()
-{
- for (int i = 0; i < static_cast<int>( m_dynLights.size() ); i++)
- {
- if (! m_dynLights[i].used)
- continue;
-
- bool enabled = m_dynLights[i].enabled;
- if (m_dynLights[i].intensity.current == 0.0f)
- enabled = false;
-
- if (enabled)
- {
- float value = m_dynLights[i].colorRed.current * m_dynLights[i].intensity.current;
- m_dynLights[i].light.diffuse.r = value;
-
- value = m_dynLights[i].colorGreen.current * m_dynLights[i].intensity.current;
- m_dynLights[i].light.diffuse.g = value;
-
- value = m_dynLights[i].colorBlue.current * m_dynLights[i].intensity.current;
- m_dynLights[i].light.diffuse.b = value;
-
- m_device->SetLight(i, m_dynLights[i].light);
- m_device->SetLightEnabled(i, enabled);
- }
- else
- {
- m_dynLights[i].light.diffuse.r = 0.0f;
- m_dynLights[i].light.diffuse.g = 0.0f;
- m_dynLights[i].light.diffuse.b = 0.0f;
-
- m_device->SetLightEnabled(i, enabled);
- }
- }
-}
-
-void Gfx::CLightManager::UpdateLightsEnableState(Gfx::EngineObjectType type)
-{
- for (int i = 0; i < static_cast<int>( m_dynLights.size() ); i++)
- {
- if (! m_dynLights[i].used)
- continue;
- if (! m_dynLights[i].enabled)
- continue;
- if (m_dynLights[i].intensity.current == 0.0f)
- continue;
-
- if (m_dynLights[i].includeType != Gfx::ENG_OBJTYPE_NULL)
- {
- bool enabled = (m_dynLights[i].includeType == type);
- m_device->SetLightEnabled(i, enabled);
- }
-
- if (m_dynLights[i].excludeType != Gfx::ENG_OBJTYPE_NULL)
- {
- bool enabled = (m_dynLights[i].excludeType != type);
- m_device->SetLightEnabled(i, enabled);
- }
- }
-}
diff --git a/src/graphics/common/light.h b/src/graphics/common/light.h
deleted file mode 100644
index 93e8c1b..0000000
--- a/src/graphics/common/light.h
+++ /dev/null
@@ -1,242 +0,0 @@
-// * 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/.
-
-// light.h
-
-#pragma once
-
-
-#include "graphics/common/engine.h"
-#include "graphics/common/color.h"
-#include "math/vector.h"
-
-
-namespace Gfx {
-
-/**
- \enum LightType
- \brief Type of light in 3D scene */
-enum LightType
-{
- LIGHT_POINT,
- LIGHT_SPOT,
- LIGHT_DIRECTIONAL
-};
-
-/**
- \struct Light
- \brief Properties of light in 3D scene
-
- This structure was created as analog to DirectX's D3DLIGHT. */
-struct Light
-{
- //! Type of light source
- Gfx::LightType type;
- //! Color of ambient light
- Gfx::Color ambient;
- //! Color of diffuse light
- Gfx::Color diffuse;
- //! Color of specular light
- Gfx::Color specular;
- //! Position in world space (for point & spot lights)
- Math::Vector position;
- //! Direction in world space (for directional & spot lights)
- Math::Vector direction;
- //! Constant attenuation factor
- float attenuation0;
- //! Linear attenuation factor
- float attenuation1;
- //! Quadratic attenuation factor
- float attenuation2;
- //! Angle of spotlight cone (0-90 degrees)
- float spotAngle;
- //! Intensity of spotlight (0 = uniform; 128 = most intense)
- float spotIntensity;
-
- //! Constructor; calls LoadDefault()
- Light()
- {
- LoadDefault();
- }
-
- //! Loads default values
- void LoadDefault()
- {
- type = LIGHT_POINT;
- ambient = Gfx::Color(0.4f, 0.4f, 0.4f);
- diffuse = Gfx::Color(0.8f, 0.8f, 0.8f);
- specular = Gfx::Color(1.0f, 1.0f, 1.0f);
- position = Math::Vector(0.0f, 0.0f, 0.0f);
- direction = Math::Vector(0.0f, 0.0f, 1.0f);
- attenuation0 = 1.0f;
- attenuation1 = attenuation2 = 0.0f;
- spotAngle = 90.0f;
- spotIntensity = 0.0f;
- }
-};
-
-/**
- \struct LightProgression
- \brief Describes the progression of light parameters change */
-struct LightProgression
-{
- //! Starting value
- float starting;
- //! Ending (destination) value
- float ending;
- //! Current value
- float current;
- //! Progress from start to end
- float progress;
- //! Speed of progression
- float speed;
-
- LightProgression()
- {
- starting = ending = current = progress = speed = 0.0f;
- }
-
- //! Initializes the progression
- void Init(float value);
-
- //! Updates the progression
- void Update(float rTime);
-
- //! Sets the new end value (starting is set to current)
- void SetTarget(float value);
-};
-
-/**
- \struct DynamicLight
- \brief Dynamic light in 3D scene
-
- It is an extension over standard light properties. Added are dynamic progressions for light
- colors and intensity and types of objects included/excluded in lighting. */
-struct DynamicLight
-{
- //! Whether the light is used
- bool used;
- //! Whether the light is turned on
- bool enabled;
-
- //! Configuration of the light
- Gfx::Light light;
-
- //! Progression of intensity [0, 1]
- Gfx::LightProgression intensity;
- //! Progression of red diffuse color
- Gfx::LightProgression colorRed;
- //! Progression of green diffuse color
- Gfx::LightProgression colorGreen;
- //! Progression of blue diffuse color
- Gfx::LightProgression colorBlue;
-
- //! Type of objects included in lighting with this light; if Gfx::ENG_OBJTYPE_NULL is used, it is ignored
- Gfx::EngineObjectType includeType;
- //! Type of objects excluded from lighting with this light; if Gfx::ENG_OBJTYPE_NULL is used, it is ignored
- Gfx::EngineObjectType excludeType;
-
- DynamicLight();
-};
-
-/**
- \class CLightManager
- \brief Manager for dynamic lights in 3D scene
-
- (Old CLight class)
-
- The class is responsible for managing dynamic lights (struct Gfx::DynamicLight) used in 3D scene.
- The dynamic lights are created, updated and deleted through the class' interface.
-
- Number of available lights depends on graphics device used. Class allocates vector
- for the total number of lights, but only some are used.
- */
-class CLightManager
-{
-public:
- //! Constructor
- CLightManager(CInstanceManager *iMan, Gfx::CEngine* engine);
- //! Destructor
- virtual ~CLightManager();
-
- //! Sets the device to be used
- void SetDevice(Gfx::CDevice* device);
-
- //! Clears and disables all lights
- void FlushLights();
- //! Creates a new dynamic light and returns its index (lightRank)
- int CreateLight();
- //! Deletes and disables the given dynamic light
- bool DeleteLight(int lightRank);
- //! Sets the light parameters for dynamic light
- bool SetLight(int lightRank, const Gfx::Light &light);
- //! Returns the light parameters for given dynamic light
- bool GetLight(int lightRank, Gfx::Light &light);
- //! Enables/disables the given dynamic light
- bool SetLightEnabled(int lightRank, bool enable);
-
- //! Sets what objects are included in given dynamic light
- bool SetLightIncludeType(int lightRank, Gfx::EngineObjectType type);
- //! Sets what objects are excluded from given dynamic light
- bool SetLightExcludeType(int lightRank, Gfx::EngineObjectType type);
-
- //! Sets the position of dynamic light
- bool SetLightPos(int lightRank, const Math::Vector &pos);
- //! Returns the position of dynamic light
- Math::Vector GetLightPos(int lightRank);
-
- //! Sets the direction of dynamic light
- bool SetLightDir(int lightRank, const Math::Vector &dir);
- //! Returns the direction of dynamic light
- Math::Vector GetLightDir(int lightRank);
-
- //! Sets the destination intensity for dynamic light's intensity progression
- bool SetLightIntensity(int lightRank, float value);
- //! Returns the current light intensity
- float GetLightIntensity(int lightRank);
- //! Sets the rate of change for dynamic light intensity
- bool SetLightIntensitySpeed(int lightRank, float speed);
-
- //! Adjusts the color of all dynamic lights
- void AdaptLightColor(const Gfx::Color &color, float factor);
-
- //! Sets the destination color for dynamic light's color progression
- bool SetLightColor(int lightRank, const Gfx::Color &color);
- //! Returns current light color
- Gfx::Color GetLightColor(int lightRank);
- //! Sets the rate of change for dynamic light colors (RGB)
- bool SetLightColorSpeed(int lightRank, float speed);
-
- //! Updates progression of dynamic lights
- void UpdateProgression(float rTime);
- //! Updates (recalculates) all dynamic lights
- void UpdateLights();
- //! Enables or disables dynamic lights affecting the given object type
- void UpdateLightsEnableState(Gfx::EngineObjectType type);
-
-protected:
- CInstanceManager* m_iMan;
- CEngine* m_engine;
- CDevice* m_device;
-
- //! Current time
- float m_time;
- //! List of dynamic lights
- std::vector<Gfx::DynamicLight> m_dynLights;
-};
-
-}; // namespace Gfx
diff --git a/src/graphics/common/lightning.cpp b/src/graphics/common/lightning.cpp
deleted file mode 100644
index 076fcb4..0000000
--- a/src/graphics/common/lightning.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-// * 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/.
-
-// lightning.cpp (aka blitz.cpp)
-
-#include "graphics/common/lightning.h"
-
-
-// TODO implementation
diff --git a/src/graphics/common/lightning.h b/src/graphics/common/lightning.h
deleted file mode 100644
index 957344c..0000000
--- a/src/graphics/common/lightning.h
+++ /dev/null
@@ -1,85 +0,0 @@
-// * 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/.
-
-// lightning.h (aka blitz.h)
-
-#pragma once
-
-#include "common/misc.h"
-#include "math/vector.h"
-
-
-class CInstanceManager;
-class CObject;
-class CSound;
-
-
-namespace Gfx {
-
-class CEngine;
-class CTerrain;
-class CCamera;
-
-
-const float BLITZPARA = 200.0f; // radius of lightning protection
-const short BLITZMAX = 50;
-
-enum BlitzPhase
-{
- BPH_WAIT,
- BPH_BLITZ,
-};
-
-
-class CLightning
-{
-public:
- CLightning(CInstanceManager* iMan, CEngine* engine);
- ~CLightning();
-
- void Flush();
- bool EventProcess(const Event &event);
- bool Create(float sleep, float delay, float magnetic);
- bool GetStatus(float &sleep, float &delay, float &magnetic, float &progress);
- bool SetStatus(float sleep, float delay, float magnetic, float progress);
- void Draw();
-
-protected:
- bool EventFrame(const Event &event);
- CObject* SearchObject(Math::Vector pos);
-
-protected:
- CInstanceManager* m_iMan;
- CEngine* m_engine;
- CTerrain* m_terrain;
- CCamera* m_camera;
- CSound* m_sound;
-
- bool m_bBlitzExist;
- float m_sleep;
- float m_delay;
- float m_magnetic;
- BlitzPhase m_phase;
- float m_time;
- float m_speed;
- float m_progress;
- Math::Vector m_pos;
- Math::Point m_shift[BLITZMAX];
- float m_width[BLITZMAX];
-};
-
-}; // namespace Gfx
diff --git a/src/graphics/common/material.h b/src/graphics/common/material.h
deleted file mode 100644
index c828d90..0000000
--- a/src/graphics/common/material.h
+++ /dev/null
@@ -1,47 +0,0 @@
-// * This file is part of the COLOBOT source code
-// * 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/.
-
-// material.h
-
-#pragma once
-
-
-#include "graphics/common/color.h"
-
-
-namespace Gfx {
-
-/**
- * \struct Material
- * \brief Material of a surface
- *
- * This structure was created as analog to DirectX's D3DMATERIAL.
- *
- * It contains values of 3 material colors: diffuse, ambient and specular.
- * In D3DMATERIAL there are other fields, but they are not used
- * by the graphics engine.
- */
-struct Material
-{
- //! Diffuse color
- Gfx::Color diffuse;
- //! Ambient color
- Gfx::Color ambient;
- //! Specular color
- Gfx::Color specular;
-};
-
-}; // namespace Gfx
diff --git a/src/graphics/common/modelfile.cpp b/src/graphics/common/modelfile.cpp
deleted file mode 100644
index 22801e8..0000000
--- a/src/graphics/common/modelfile.cpp
+++ /dev/null
@@ -1,841 +0,0 @@
-// * 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/.
-
-// modelfile.cpp (aka modfile.cpp)
-
-#include "graphics/common/modelfile.h"
-
-#include "common/iman.h"
-#include "common/ioutils.h"
-#include "common/logger.h"
-#include "common/stringutils.h"
-#include "math/geometry.h"
-
-#include <string.h>
-
-#include <fstream>
-
-
-//! How big the triangle vector is by default
-const int TRIANGLE_PREALLOCATE_COUNT = 2000;
-
-/**
- \struct ModelHeader
- \brief Header info for model file
- */
-struct ModelHeader
-{
- //! Revision number
- int revision;
- //! Version number
- int version;
- //! Total number of vertices
- int totalVertices;
- //! Reserved area
- int reserved[10];
-
- ModelHeader()
- {
- memset(this, 0, sizeof(*this));
- }
-};
-
-
-struct OldModelTriangle1
-{
- char used;
- char selected;
- Gfx::Vertex p1;
- Gfx::Vertex p2;
- Gfx::Vertex p3;
- Gfx::Material material;
- char texName[20];
- float min;
- float max;
-
- OldModelTriangle1()
- {
- memset(this, 0, sizeof(*this));
- }
-};
-
-struct OldModelTriangle2
-{
- char used;
- char selected;
- Gfx::Vertex p1;
- Gfx::Vertex p2;
- Gfx::Vertex p3;
- Gfx::Material material;
- char texName[20];
- float min;
- float max;
- long state;
- short reserved1;
- short reserved2;
- short reserved3;
- short reserved4;
- OldModelTriangle2()
- {
- memset(this, 0, sizeof(*this));
- }
-};
-
-
-struct NewModelTriangle
-{
- char used;
- char selected;
- Gfx::VertexTex2 p1;
- Gfx::VertexTex2 p2;
- Gfx::VertexTex2 p3;
- Gfx::Material material;
- char texName[20];
- float min;
- float max;
- long state;
- short texNum2;
- short reserved2;
- short reserved3;
- short reserved4;
-
- NewModelTriangle()
- {
- memset(this, 0, sizeof(*this));
- }
-};
-
-
-Gfx::Vertex ReadBinaryVertex(std::istream &stream)
-{
- Gfx::Vertex result;
-
- result.coord.x = IOUtils::ReadBinaryFloat(stream);
- result.coord.y = IOUtils::ReadBinaryFloat(stream);
- result.coord.z = IOUtils::ReadBinaryFloat(stream);
- result.normal.x = IOUtils::ReadBinaryFloat(stream);
- result.normal.y = IOUtils::ReadBinaryFloat(stream);
- result.normal.z = IOUtils::ReadBinaryFloat(stream);
- result.texCoord.x = IOUtils::ReadBinaryFloat(stream);
- result.texCoord.y = IOUtils::ReadBinaryFloat(stream);
-
- return result;
-}
-
-void WriteBinaryVertex(Gfx::Vertex vertex, std::ostream &stream)
-{
- IOUtils::WriteBinaryFloat(vertex.coord.x, stream);
- IOUtils::WriteBinaryFloat(vertex.coord.y, stream);
- IOUtils::WriteBinaryFloat(vertex.coord.z, stream);
- IOUtils::WriteBinaryFloat(vertex.normal.x, stream);
- IOUtils::WriteBinaryFloat(vertex.normal.y, stream);
- IOUtils::WriteBinaryFloat(vertex.normal.z, stream);
- IOUtils::WriteBinaryFloat(vertex.texCoord.x, stream);
- IOUtils::WriteBinaryFloat(vertex.texCoord.y, stream);
-}
-
-Gfx::VertexTex2 ReadBinaryVertexTex2(std::istream &stream)
-{
- Gfx::VertexTex2 result;
-
- result.coord.x = IOUtils::ReadBinaryFloat(stream);
- result.coord.y = IOUtils::ReadBinaryFloat(stream);
- result.coord.z = IOUtils::ReadBinaryFloat(stream);
- result.normal.x = IOUtils::ReadBinaryFloat(stream);
- result.normal.y = IOUtils::ReadBinaryFloat(stream);
- result.normal.z = IOUtils::ReadBinaryFloat(stream);
- result.texCoord.x = IOUtils::ReadBinaryFloat(stream);
- result.texCoord.y = IOUtils::ReadBinaryFloat(stream);
- result.texCoord2.x = IOUtils::ReadBinaryFloat(stream);
- result.texCoord2.y = IOUtils::ReadBinaryFloat(stream);
-
- return result;
-}
-
-void WriteBinaryVertexTex2(Gfx::VertexTex2 vertex, std::ostream &stream)
-{
- IOUtils::WriteBinaryFloat(vertex.coord.x, stream);
- IOUtils::WriteBinaryFloat(vertex.coord.y, stream);
- IOUtils::WriteBinaryFloat(vertex.coord.z, stream);
- IOUtils::WriteBinaryFloat(vertex.normal.x, stream);
- IOUtils::WriteBinaryFloat(vertex.normal.y, stream);
- IOUtils::WriteBinaryFloat(vertex.normal.z, stream);
- IOUtils::WriteBinaryFloat(vertex.texCoord.x, stream);
- IOUtils::WriteBinaryFloat(vertex.texCoord.y, stream);
- IOUtils::WriteBinaryFloat(vertex.texCoord2.x, stream);
- IOUtils::WriteBinaryFloat(vertex.texCoord2.y, stream);
-}
-
-Gfx::Material ReadBinaryMaterial(std::istream &stream)
-{
- Gfx::Material result;
-
- result.diffuse.r = IOUtils::ReadBinaryFloat(stream);
- result.diffuse.g = IOUtils::ReadBinaryFloat(stream);
- result.diffuse.b = IOUtils::ReadBinaryFloat(stream);
- result.diffuse.a = IOUtils::ReadBinaryFloat(stream);
-
- result.ambient.r = IOUtils::ReadBinaryFloat(stream);
- result.ambient.g = IOUtils::ReadBinaryFloat(stream);
- result.ambient.b = IOUtils::ReadBinaryFloat(stream);
- result.ambient.a = IOUtils::ReadBinaryFloat(stream);
-
- result.specular.r = IOUtils::ReadBinaryFloat(stream);
- result.specular.g = IOUtils::ReadBinaryFloat(stream);
- result.specular.b = IOUtils::ReadBinaryFloat(stream);
- result.specular.a = IOUtils::ReadBinaryFloat(stream);
-
- /* emissive.r = */ IOUtils::ReadBinaryFloat(stream);
- /* emissive.g = */ IOUtils::ReadBinaryFloat(stream);
- /* emissive.b = */ IOUtils::ReadBinaryFloat(stream);
- /* emissive.a = */ IOUtils::ReadBinaryFloat(stream);
-
- /* power = */ IOUtils::ReadBinaryFloat(stream);
-
- return result;
-}
-
-void WriteBinaryMaterial(Gfx::Material material, std::ostream &stream)
-{
- IOUtils::WriteBinaryFloat(material.diffuse.r, stream);
- IOUtils::WriteBinaryFloat(material.diffuse.g, stream);
- IOUtils::WriteBinaryFloat(material.diffuse.b, stream);
- IOUtils::WriteBinaryFloat(material.diffuse.a, stream);
-
- IOUtils::WriteBinaryFloat(material.ambient.r, stream);
- IOUtils::WriteBinaryFloat(material.ambient.g, stream);
- IOUtils::WriteBinaryFloat(material.ambient.b, stream);
- IOUtils::WriteBinaryFloat(material.ambient.a, stream);
-
- IOUtils::WriteBinaryFloat(material.specular.r, stream);
- IOUtils::WriteBinaryFloat(material.specular.g, stream);
- IOUtils::WriteBinaryFloat(material.specular.b, stream);
- IOUtils::WriteBinaryFloat(material.specular.a, stream);
-
- /* emissive.r */ IOUtils::WriteBinaryFloat(0.0f, stream);
- /* emissive.g */ IOUtils::WriteBinaryFloat(0.0f, stream);
- /* emissive.b */ IOUtils::WriteBinaryFloat(0.0f, stream);
- /* emissive.a */ IOUtils::WriteBinaryFloat(0.0f, stream);
-
- /* power */ IOUtils::WriteBinaryFloat(0.0f, stream);
-}
-
-Gfx::ModelTriangle::ModelTriangle()
-{
- min = 0.0f;
- max = 0.0f;
- state = 0L;
-}
-
-
-Gfx::CModelFile::CModelFile(CInstanceManager* iMan)
-{
- m_iMan = iMan;
-
- m_engine = (CEngine*)m_iMan->SearchInstance(CLASS_ENGINE);
-
- m_triangles.reserve(TRIANGLE_PREALLOCATE_COUNT);
-}
-
-Gfx::CModelFile::~CModelFile()
-{
-}
-
-std::string Gfx::CModelFile::GetError()
-{
- return m_error;
-}
-
-
-bool Gfx::CModelFile::ReadModel(const std::string &filename, bool edit, bool meta)
-{
- m_triangles.clear();
- m_error = "";
-
- std::ifstream stream;
- stream.open(filename.c_str(), std::ios_base::in | std::ios_base::binary);
- if (! stream.good())
- {
- m_error = std::string("Could not open file '") + filename + std::string("'");
- return false;
- }
-
- return ReadModel(stream, edit, meta);
-}
-
-bool Gfx::CModelFile::ReadModel(std::istream &stream, bool edit, bool meta)
-{
- m_triangles.clear();
- m_error = "";
-
- // FIXME: for now, reading models only from files, not metafile
-
- ModelHeader header;
-
- header.revision = IOUtils::ReadBinary<4, int>(stream);
- header.version = IOUtils::ReadBinary<4, int>(stream);
- header.totalVertices = IOUtils::ReadBinary<4, int>(stream);
- for (int i = 0; i < 10; ++i)
- header.reserved[i] = IOUtils::ReadBinary<4, int>(stream);
-
-
- if (! stream.good())
- {
- m_error = "Error reading model file header";
- return false;
- }
-
- // Old model version #1
- if ( (header.revision == 1) && (header.version == 0) )
- {
- for (int i = 0; i < header.totalVertices; ++i)
- {
- OldModelTriangle1 t;
- t.used = IOUtils::ReadBinary<1, char>(stream);
- t.selected = IOUtils::ReadBinary<1, char>(stream);
-
- t.p1 = ReadBinaryVertex(stream);
- t.p2 = ReadBinaryVertex(stream);
- t.p3 = ReadBinaryVertex(stream);
-
- t.material = ReadBinaryMaterial(stream);
- stream.read(t.texName, 20);
- t.min = IOUtils::ReadBinaryFloat(stream);
- t.max = IOUtils::ReadBinaryFloat(stream);
-
- if (! stream.good())
- {
- m_error = "Error reading model data";
- return false;
- }
-
- Gfx::ModelTriangle triangle;
- triangle.p1.FromVertex(t.p1);
- triangle.p2.FromVertex(t.p2);
- triangle.p3.FromVertex(t.p3);
-
- triangle.material = t.material;
- triangle.tex1Name = std::string(t.texName);
- triangle.min = t.min;
- triangle.max = t.max;
-
- m_triangles.push_back(triangle);
- }
- }
- else if ( header.revision == 1 && header.version == 1 )
- {
- for (int i = 0; i < header.totalVertices; ++i)
- {
- OldModelTriangle2 t;
- t.used = IOUtils::ReadBinary<1, char>(stream);
- t.selected = IOUtils::ReadBinary<1, char>(stream);
-
- t.p1 = ReadBinaryVertex(stream);
- t.p2 = ReadBinaryVertex(stream);
- t.p3 = ReadBinaryVertex(stream);
-
- t.material = ReadBinaryMaterial(stream);
- stream.read(t.texName, 20);
- t.min = IOUtils::ReadBinaryFloat(stream);
- t.max = IOUtils::ReadBinaryFloat(stream);
- t.state = IOUtils::ReadBinary<4, long>(stream);
-
- t.reserved1 = IOUtils::ReadBinary<2, short>(stream);
- t.reserved2 = IOUtils::ReadBinary<2, short>(stream);
- t.reserved3 = IOUtils::ReadBinary<2, short>(stream);
- t.reserved4 = IOUtils::ReadBinary<2, short>(stream);
-
- if (! stream.good())
- {
- m_error = "Error reading model data";
- return false;
- }
-
- Gfx::ModelTriangle triangle;
- triangle.p1.FromVertex(t.p1);
- triangle.p2.FromVertex(t.p2);
- triangle.p3.FromVertex(t.p3);
-
- triangle.material = t.material;
- triangle.tex1Name = std::string(t.texName);
- triangle.min = t.min;
- triangle.max = t.max;
- triangle.state = t.state;
-
- m_triangles.push_back(triangle);
- }
- }
- else
- {
- for (int i = 0; i < header.totalVertices; ++i)
- {
- NewModelTriangle t;
- t.used = IOUtils::ReadBinary<1, char>(stream);
- t.selected = IOUtils::ReadBinary<1, char>(stream);
-
- /* padding */ IOUtils::ReadBinary<2, unsigned int>(stream);
-
- t.p1 = ReadBinaryVertexTex2(stream);
- t.p2 = ReadBinaryVertexTex2(stream);
- t.p3 = ReadBinaryVertexTex2(stream);
-
- t.material = ReadBinaryMaterial(stream);
- stream.read(t.texName, 20);
- t.min = IOUtils::ReadBinaryFloat(stream);
- t.max = IOUtils::ReadBinaryFloat(stream);
- t.state = IOUtils::ReadBinary<4, long>(stream);
- t.texNum2 = IOUtils::ReadBinary<2, short>(stream);
-
- t.reserved2 = IOUtils::ReadBinary<2, short>(stream);
- t.reserved3 = IOUtils::ReadBinary<2, short>(stream);
- t.reserved4 = IOUtils::ReadBinary<2, short>(stream);
-
- if (! stream.good())
- {
- m_error = "Error reading model data";
- return false;
- }
-
- Gfx::ModelTriangle triangle;
- triangle.p1 = t.p1;
- triangle.p2 = t.p2;
- triangle.p3 = t.p3;
-
- triangle.material = t.material;
- triangle.tex1Name = std::string(t.texName);
- char tex2Name[20] = { 0 };
- triangle.min = t.min;
- triangle.max = t.max;
- triangle.state = t.state;
-
- if (t.texNum2 != 0)
- sprintf(tex2Name, "dirty%.2d.tga", t.texNum2); // hardcoded as in the original code
-
- triangle.tex2Name = std::string(tex2Name);
-
- m_triangles.push_back(triangle);
- }
- }
-
- for (int i = 0; i < (int) m_triangles.size(); ++i)
- {
- m_triangles[i].tex1Name = StrUtils::Replace(m_triangles[i].tex1Name, "bmp", "tga");
-
- GetLogger()->Info("ModelTriangle %d\n", i+1);
- std::string s1 = m_triangles[i].p1.ToString();
- GetLogger()->Info(" p1: %s\n", s1.c_str());
- std::string s2 = m_triangles[i].p2.ToString();
- GetLogger()->Info(" p2: %s\n", s2.c_str());
- std::string s3 = m_triangles[i].p3.ToString();
- GetLogger()->Info(" p3: %s\n", s3.c_str());
-
- std::string d = m_triangles[i].material.diffuse.ToString();
- std::string a = m_triangles[i].material.ambient.ToString();
- std::string s = m_triangles[i].material.specular.ToString();
- GetLogger()->Info(" mat: d: %s a: %s s: %s\n", d.c_str(), a.c_str(), s.c_str());
-
- GetLogger()->Info(" tex1: %s tex2: %s\n", m_triangles[i].tex1Name.c_str(), m_triangles[i].tex2Name.c_str());
- GetLogger()->Info(" min: %.2f max: %.2f\n", m_triangles[i].min, m_triangles[i].max);
- GetLogger()->Info(" state: %ld\n", m_triangles[i].state);
- }
-
- /*
- if (! edit)
- {
- float limit[2];
- limit[0] = m_engine->RetLimitLOD(0); // frontier AB as config
- limit[1] = m_engine->RetLimitLOD(1); // frontier BC as config
-
- // Standard frontiers -> config.
- for (int i = 0; i < m_triangles.size(); ++i)
- {
- if ( m_triangles[i].min == 0.0f &&
- m_triangles[i].max == 100.0f ) // resolution A ?
- {
- m_triangles[i].max = limit[0];
- }
- else if ( m_triangles[i].min == 100.0f &&
- m_triangles[i].max == 200.0f ) // resolution B ?
- {
- m_triangles[i].min = limit[0];
- m_triangles[i].max = limit[1];
- }
- else if ( m_triangles[i].min == 200.0f &&
- m_triangles[i].max == 1000000.0f ) // resolution C ?
- {
- m_triangles[i].min = limit[1];
- }
- }
- }*/
-
- return true;
-}
-
-bool Gfx::CModelFile::WriteModel(const std::string &filename)
-{
- m_error = "";
-
- std::ofstream stream;
- stream.open(filename.c_str(), std::ios_base::out | std::ios_base::binary);
- if (! stream.good())
- {
- m_error = std::string("Could not open file '") + filename + std::string("'");
- return false;
- }
-
- return WriteModel(stream);
-}
-
-bool Gfx::CModelFile::WriteModel(std::ostream &stream)
-{
- m_error = "";
-
- if (m_triangles.size() == 0)
- {
- m_error = "Empty model";
- return false;
- }
-
- ModelHeader header;
- header.revision = 1;
- header.version = 2;
- header.totalVertices = m_triangles.size();
-
- IOUtils::WriteBinary<4, int>(header.revision, stream);
- IOUtils::WriteBinary<4, int>(header.version, stream);
- IOUtils::WriteBinary<4, int>(header.totalVertices, stream);
- for (int i = 0; i < 10; ++i)
- IOUtils::WriteBinary<4, int>(header.reserved[i], stream);
-
- for (int i = 0; i < (int)m_triangles.size(); ++i)
- {
- NewModelTriangle t;
-
- t.used = true;
-
- t.p1 = m_triangles[i].p1;
- t.p2 = m_triangles[i].p2;
- t.p3 = m_triangles[i].p3;
-
- t.material = m_triangles[i].material;
- strncpy(t.texName, m_triangles[i].tex1Name.c_str(), 20);
- t.min = m_triangles[i].min;
- t.max = m_triangles[i].max;
- t.state = m_triangles[i].state;
- int no = 0;
- sscanf(m_triangles[i].tex2Name.c_str(), "dirty%d.tga", &no); // hardcoded as in the original code
- t.texNum2 = no;
-
-
- IOUtils::WriteBinary<1, char>(t.used, stream);
- IOUtils::WriteBinary<1, char>(t.selected, stream);
-
- WriteBinaryVertexTex2(t.p1, stream);
- WriteBinaryVertexTex2(t.p2, stream);
- WriteBinaryVertexTex2(t.p3, stream);
-
- WriteBinaryMaterial(t.material, stream);
- stream.write(t.texName, 20);
- IOUtils::WriteBinaryFloat(t.min, stream);
- IOUtils::WriteBinaryFloat(t.max, stream);
- IOUtils::WriteBinary<4, long>(t.state, stream);
- IOUtils::WriteBinary<2, short>(t.texNum2, stream);
-
- IOUtils::WriteBinary<2, short>(t.reserved2, stream);
- IOUtils::WriteBinary<2, short>(t.reserved3, stream);
- IOUtils::WriteBinary<2, short>(t.reserved4, stream);
- }
-
- return true;
-}
-
-bool Gfx::CModelFile::ReadDXF(const std::string &filename, float min, float max)
-{
- m_triangles.clear();
- m_error = "";
-
- std::ifstream stream;
- stream.open(filename.c_str(), std::ios_base::in);
- if (! stream.good())
- {
- m_error = std::string("Couldn't open file '") + filename + std::string("'");
- return false;
- }
-
- return ReadDXF(stream, min, max);
-}
-
-bool Gfx::CModelFile::ReadDXF(std::istream &stream, float min, float max)
-{
- m_triangles.clear();
- m_error = "";
-
- if (! stream.good())
- {
- m_error = "Invalid stream";
- return false;
- }
-
- // Input state
- bool waitNumVertex = false;
- bool waitNumFace = false;
- bool waitVertexX = false;
- bool waitVertexY = false;
- bool waitVertexZ = false;
- bool waitFaceX = false;
- bool waitFaceY = false;
- bool waitFaceZ = false;
-
- // Vertex array
- std::vector<Math::Vector> vertices;
- vertices.reserve(TRIANGLE_PREALLOCATE_COUNT);
-
- // Number of vertices & faces of the primitive to be read
- int vertexNum = 0, faceNum = 0;
- // Vertex coords
- Math::Vector coords;
- // Indexes of face (triangle) points
- int p1 = 0, p2 = 0, p3 = 0;
-
- // Input line
- std::string line;
- while (! stream.eof() )
- {
- // Read line with command
- std::getline(stream, line);
- int command = StrUtils::FromString<int>(line);
-
- // Read line with param
- std::getline(stream, line);
-
- bool ok = true;
-
-
- if (command == 66)
- {
- waitNumVertex = true;
- }
-
- if ( command == 71 && waitNumVertex )
- {
- waitNumVertex = false;
- vertexNum = StrUtils::FromString<int>(line, &ok);
- waitNumFace = true;
- }
-
- if ( command == 72 && waitNumFace )
- {
- waitNumFace = false;
- faceNum = StrUtils::FromString<int>(line, &ok);
- waitVertexX = true;
- }
-
- if ( command == 10 && waitVertexX )
- {
- waitVertexX = false;
- coords.x = StrUtils::FromString<float>(line, &ok);
- waitVertexY = true;
- }
-
- if ( command == 20 && waitVertexY )
- {
- waitVertexY = false;
- coords.y = StrUtils::FromString<float>(line, &ok);
- waitVertexZ = true;
- }
-
- if ( command == 30 && waitVertexZ )
- {
- waitVertexZ = false;
- coords.z = StrUtils::FromString<float>(line, &ok);
-
- vertexNum --;
- if ( vertexNum >= 0 )
- {
- Math::Vector p(coords.x, coords.z, coords.y); // permutation of Y and Z!
- vertices.push_back(p);
- waitVertexX = true;
- }
- else
- {
- waitFaceX = true;
- }
- }
-
- if ( command == 71 && waitFaceX )
- {
- waitFaceX = false;
- p1 = StrUtils::FromString<int>(line, &ok);
- if ( p1 < 0 ) p1 = -p1;
- waitFaceY = true;
- }
-
- if ( command == 72 && waitFaceY )
- {
- waitFaceY = false;
- p2 = StrUtils::FromString<int>(line, &ok);
- if ( p2 < 0 ) p2 = -p2;
- waitFaceZ = true;
- }
-
- if ( command == 73 && waitFaceZ )
- {
- waitFaceZ = false;
- p3 = StrUtils::FromString<int>(line, &ok);
- if ( p3 < 0 ) p3 = -p3;
-
- faceNum --;
- if ( faceNum >= 0 )
- {
- assert( (p1-1 >= 0) && (p1-1 < (int)vertices.size() ) );
- assert( (p2-1 >= 0) && (p2-1 < (int)vertices.size() ) );
- assert( (p3-1 >= 0) && (p3-1 < (int)vertices.size() ) );
-
- CreateTriangle(vertices[p3-1], vertices[p2-1], vertices[p1-1], min, max);
- waitFaceX = true;
- }
- }
-
- if (! ok)
- {
- m_error = "Error reading data";
- return false;
- }
-
- }
-
- return true;
-}
-
-bool Gfx::CModelFile::CreateEngineObject(int objRank, int addState)
-{
- /*char texName1[20];
- char texName2[20];
- int texNum, i, state;
-
- for (int i = 0; i < m_trianglesUsed; i++)
- {
- if (! m_triangles[i].used) continue;
-
- state = m_triangles[i].state;
- strcpy(texName1, m_triangles[i].texName);
- texName2[0] = 0;
-
- if ( strcmp(texName1, "plant.tga") == 0 ) // ???
- {
- state |= D3DSTATEALPHA;
- }
-
- if ( m_triangles[i].texNum2 != 0 )
- {
- if ( m_triangles[i].texNum2 == 1 )
- {
- texNum = m_engine->RetSecondTexture();
- }
- else
- {
- texNum = m_triangles[i].texNum2;
- }
-
- if ( texNum >= 1 && texNum <= 10 )
- {
- state |= D3DSTATEDUALb;
- }
- if ( texNum >= 11 && texNum <= 20 )
- {
- state |= D3DSTATEDUALw;
- }
- sprintf(texName2, "dirty%.2d.tga", texNum); // ???
- }
-
- m_engine->AddTriangle(objRank, &m_triangles[i].p1, 3,
- m_triangles[i].material,
- state + addState,
- texName1, texName2,
- m_triangles[i].min,
- m_triangles[i].max, false);
- }*/
- return true;
-}
-
-void Gfx::CModelFile::Mirror()
-{
- for (int i = 0; i < (int)m_triangles.size(); i++)
- {
- Gfx::VertexTex2 t = m_triangles[i].p1;
- m_triangles[i].p1 = m_triangles[i].p2;
- m_triangles[i].p2 = t;
-
- m_triangles[i].p1.coord.z = -m_triangles[i].p1.coord.z;
- m_triangles[i].p2.coord.z = -m_triangles[i].p2.coord.z;
- m_triangles[i].p3.coord.z = -m_triangles[i].p3.coord.z;
-
- m_triangles[i].p1.normal.z = -m_triangles[i].p1.normal.z;
- m_triangles[i].p2.normal.z = -m_triangles[i].p2.normal.z;
- m_triangles[i].p3.normal.z = -m_triangles[i].p3.normal.z;
- }
-}
-
-std::vector<Gfx::ModelTriangle>& Gfx::CModelFile::GetTriangles()
-{
- return m_triangles;
-}
-
-int Gfx::CModelFile::GetTriangleCount()
-{
- return m_triangles.size();
-}
-
-float Gfx::CModelFile::GetHeight(Math::Vector pos)
-{
- float limit = 5.0f;
-
- for (int i = 0; i < (int)m_triangles.size(); i++)
- {
- if ( fabs(pos.x - m_triangles[i].p1.coord.x) < limit &&
- fabs(pos.z - m_triangles[i].p1.coord.z) < limit )
- return m_triangles[i].p1.coord.y;
-
- if ( fabs(pos.x - m_triangles[i].p2.coord.x) < limit &&
- fabs(pos.z - m_triangles[i].p2.coord.z) < limit )
- return m_triangles[i].p2.coord.y;
-
- if ( fabs(pos.x - m_triangles[i].p3.coord.x) < limit &&
- fabs(pos.z - m_triangles[i].p3.coord.z) < limit )
- return m_triangles[i].p3.coord.y;
- }
-
- return 0.0f;
-}
-
-void Gfx::CModelFile::CreateTriangle(Math::Vector p1, Math::Vector p2, Math::Vector p3, float min, float max)
-{
- Gfx::ModelTriangle triangle;
-
- Math::Vector n = Math::NormalToPlane(p3, p2, p1);
- triangle.p1 = Gfx::VertexTex2(p1, n);
- triangle.p2 = Gfx::VertexTex2(p2, n);
- triangle.p3 = Gfx::VertexTex2(p3, n);
-
- triangle.material.diffuse = Gfx::Color(1.0f, 1.0f, 1.0f, 0.0f);
- triangle.material.ambient = Gfx::Color(0.5f, 0.5f, 0.5f, 0.0f);
-
- triangle.min = min;
- triangle.max = max;
-
- m_triangles.push_back(triangle);
-}
diff --git a/src/graphics/common/modelfile.h b/src/graphics/common/modelfile.h
deleted file mode 100644
index f8cb022..0000000
--- a/src/graphics/common/modelfile.h
+++ /dev/null
@@ -1,120 +0,0 @@
-// * 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/.
-
-// modelfile.h (aka modfile.h)
-
-#include "graphics/common/engine.h"
-#include "graphics/common/vertex.h"
-#include "graphics/common/material.h"
-#include "math/vector.h"
-
-#include <string>
-#include <vector>
-#include <iostream>
-
-
-class CInstanceManager;
-
-
-namespace Gfx {
-
-/**
- \struct ModelTriangle
- \brief Triangle of a 3D model
- */
-struct ModelTriangle
-{
- //! 1st vertex
- Gfx::VertexTex2 p1;
- //! 2nd vertex
- Gfx::VertexTex2 p2;
- //! 3rd vertex
- Gfx::VertexTex2 p3;
- //! Material
- Gfx::Material material;
- //! Name of 1st texture
- std::string tex1Name;
- //! Name of 2nd texture
- std::string tex2Name;
- //! Min LOD threshold
- float min;
- //! Max LOD threshold
- float max;
- //! Rendering state to be set
- long state;
-
- ModelTriangle();
-};
-
-
-/**
- \class CModelFile
- \brief Model file reader/writer
-
- Allows reading and writing model objects. Models are collections of ModelTriangle structs. */
-class CModelFile
-{
-public:
- CModelFile(CInstanceManager* iMan);
- ~CModelFile();
-
- //! Returns the last error encountered
- std::string GetError();
-
- //! Reads a binary Colobot model from file
- bool ReadModel(const std::string &filename, bool edit = false, bool meta = true);
- //! Reads a binary Colobot model from stream
- bool ReadModel(std::istream &stream, bool edit = false, bool meta = true);
- //! Writes the model to Colobot binary model file
- bool WriteModel(const std::string &filename);
- //! Writes the model to Colobot binary model file
- bool WriteModel(std::ostream &stream);
-
- //! Reads a DXF model from file
- bool ReadDXF(const std::string &filename, float min, float max);
- //! Reads a DXF model from stream
- bool ReadDXF(std::istream &stream, float min, float max);
-
- //! Returns the number of triangles in model
- int GetTriangleCount();
- //! Returns the triangle vector
- std::vector<Gfx::ModelTriangle>& GetTriangles();
- //! Returns the height of model -- closest point to X and Z coords of \a pos
- float GetHeight(Math::Vector pos);
-
- //! Mirrors the model along the Z axis
- void Mirror();
-
- //! Creates an object in the graphics engine from the model
- bool CreateEngineObject(int objRank, int addState = 0);
-
-protected:
- //! Adds a triangle to the list
- void CreateTriangle(Math::Vector p1, Math::Vector p2, Math::Vector p3, float min, float max);
-
-protected:
- CInstanceManager* m_iMan;
- Gfx::CEngine* m_engine;
-
- //! Last error
- std::string m_error;
-
- //! Model triangles
- std::vector<Gfx::ModelTriangle> m_triangles;
-};
-
-}; // namespace Gfx
diff --git a/src/graphics/common/particle.cpp b/src/graphics/common/particle.cpp
deleted file mode 100644
index 322c2d0..0000000
--- a/src/graphics/common/particle.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-// * 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/.
-
-// particle.cpp (aka particule.cpp)
-
-#include "graphics/common/particle.h"
-
-
-// TODO implementation
diff --git a/src/graphics/common/particle.h b/src/graphics/common/particle.h
deleted file mode 100644
index bd9741f..0000000
--- a/src/graphics/common/particle.h
+++ /dev/null
@@ -1,337 +0,0 @@
-// * 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/.
-
-// particle.h (aka particule.h)
-
-#pragma once
-
-#include "engine.h"
-#include "sound/sound.h"
-
-
-class CInstanceManager;
-class CRobotMain;
-class CObject;
-class CSound;
-
-
-
-namespace Gfx {
-
-const short MAXPARTICULE = 500;
-const short MAXPARTITYPE = 5;
-const short MAXTRACK = 100;
-const short MAXTRACKLEN = 10;
-const short MAXPARTIFOG = 100;
-const short MAXWHEELTRACE = 1000;
-
-const short SH_WORLD = 0; // particle in the world in the interface
-const short SH_FRONT = 1; // particle in the world on the interface
-const short SH_INTERFACE = 2; // particle in the interface
-const short SH_MAX = 3;
-
-// type == 0 -> triangles
-// type == 1 -> effect00 (black background)
-// type == 2 -> effect01 (black background)
-// type == 3 -> effect02 (black background)
-// type == 4 -> text (white background)
-
-
-enum ParticleType
-{
- PARTIEXPLOT = 1, // technology explosion
- PARTIEXPLOO = 2, // organic explosion
- PARTIMOTOR = 3, // the engine exhaust gas
- PARTIGLINT = 4, // reflection
- PARTIBLITZ = 5, // lightning recharging battery
- PARTICRASH = 6, // dust after fall
- PARTIGAS = 7, // gas from the reactor
- PARTIFIRE = 9, // fireball shrinks
- PARTIFIREZ = 10, // fireball grows
- PARTIBLUE = 11, // blue ball
- PARTISELY = 12, // yellow selection
- PARTISELR = 13, // red selection
- PARTIGUN1 = 18, // a bullet (fireball)
- PARTIGUN2 = 19, // bullet 2 (ant)
- PARTIGUN3 = 20, // bullet 3 (spider)
- PARTIGUN4 = 21, // bullet 4 (orgaball)
- PARTIFRAG = 22, // triangular fragment
- PARTIQUEUE = 23, // inflamed tail
- PARTIORGANIC1 = 24, // organic ball mother
- PARTIORGANIC2 = 25, // organic ball daughter
- PARTISMOKE1 = 26, // black smoke
- PARTISMOKE2 = 27, // black smoke
- PARTISMOKE3 = 28, // black smoke
- PARTISMOKE4 = 29, // black smoke
- PARTIBLOOD = 30, // human blood
- PARTIBLOODM = 31, // blood laying
- PARTIVAPOR = 32, // steam
- PARTIVIRUS1 = 33, // virus 1
- PARTIVIRUS2 = 34, // virus 2
- PARTIVIRUS3 = 35, // virus 3
- PARTIVIRUS4 = 36, // virus 4
- PARTIVIRUS5 = 37, // virus 5
- PARTIVIRUS6 = 38, // virus 6
- PARTIVIRUS7 = 39, // virus 7
- PARTIVIRUS8 = 40, // virus 8
- PARTIVIRUS9 = 41, // virus 9
- PARTIVIRUS10 = 42, // virus 10
- PARTIRAY1 = 43, // ray 1 (turn)
- PARTIRAY2 = 44, // ray 2 (electric arc)
- PARTIRAY3 = 45, // ray 3
- PARTIRAY4 = 46, // ray 4
- PARTIFLAME = 47, // flame
- PARTIBUBBLE = 48, // bubble
- PARTIFLIC = 49, // circles in the water
- PARTIEJECT = 50, // ejection from the reactor
- PARTISCRAPS = 51, // waste from the reactor
- PARTITOTO = 52, // reactor of tot
- PARTIERROR = 53, // toto says no
- PARTIWARNING = 54, // foo says blah
- PARTIINFO = 54, // toto says yes
- PARTIQUARTZ = 55, // reflection crystal
- PARTISPHERE0 = 56, // explosion sphere
- PARTISPHERE1 = 57, // energy sphere
- PARTISPHERE2 = 58, // analysis sphere
- PARTISPHERE3 = 59, // shield sphere
- PARTISPHERE4 = 60, // information sphere (emit)
- PARTISPHERE5 = 61, // botanical sphere (gravity root)
- PARTISPHERE6 = 62, // information sphere (receive)
- PARTISPHERE7 = 63, // sphere
- PARTISPHERE8 = 64, // sphere
- PARTISPHERE9 = 65, // sphere
- PARTIGUNDEL = 66, // bullet destroyed by shield
- PARTIPART = 67, // object part
- PARTITRACK1 = 68, // drag 1
- PARTITRACK2 = 69, // drag 2
- PARTITRACK3 = 70, // drag 3
- PARTITRACK4 = 71, // drag 4
- PARTITRACK5 = 72, // drag 5
- PARTITRACK6 = 73, // drag 6
- PARTITRACK7 = 74, // drag 7
- PARTITRACK8 = 75, // drag 8
- PARTITRACK9 = 76, // drag 9
- PARTITRACK10 = 77, // drag 10
- PARTITRACK11 = 78, // drag 11
- PARTITRACK12 = 79, // drag 12
- PARTITRACK13 = 80, // drag 13
- PARTITRACK14 = 81, // drag 14
- PARTITRACK15 = 82, // drag 15
- PARTITRACK16 = 83, // drag 16
- PARTITRACK17 = 84, // drag 17
- PARTITRACK18 = 85, // drag 18
- PARTITRACK19 = 86, // drag 19
- PARTITRACK20 = 87, // drag 20
- PARTIGLINTb = 88, // blue reflection
- PARTIGLINTr = 89, // red reflection
- PARTILENS1 = 90, // brilliance 1 (orange)
- PARTILENS2 = 91, // brilliance 2 (yellow)
- PARTILENS3 = 92, // brilliance 3 (red)
- PARTILENS4 = 93, // brilliance 4 (violet)
- PARTICONTROL = 94, // reflection on button
- PARTISHOW = 95, // shows a place
- PARTICHOC = 96, // shock wave
- PARTIGFLAT = 97, // shows if the ground is flat
- PARTIRECOVER = 98, // blue ball recycler
- PARTIROOT = 100, // gravity root smoke
- PARTIPLOUF0 = 101, // splash
- PARTIPLOUF1 = 102, // splash
- PARTIPLOUF2 = 103, // splash
- PARTIPLOUF3 = 104, // splash
- PARTIPLOUF4 = 105, // splash
- PARTIDROP = 106, // drop
- PARTIFOG0 = 107, // fog 0
- PARTIFOG1 = 108, // fog 1
- PARTIFOG2 = 109, // fog 2
- PARTIFOG3 = 110, // fog 3
- PARTIFOG4 = 111, // fog 4
- PARTIFOG5 = 112, // fog 5
- PARTIFOG6 = 113, // fog 6
- PARTIFOG7 = 114, // fog 7
- PARTIFOG8 = 115, // fog 8
- PARTIFOG9 = 116, // fog 9
- PARTILIMIT1 = 117, // shows the limits 1
- PARTILIMIT2 = 118, // shows the limits 2
- PARTILIMIT3 = 119, // shows the limits 3
- PARTILIMIT4 = 120, // shows the limits 4
- PARTIWATER = 121, // drop of water
- PARTIEXPLOG1 = 122, // ball explosion 1
- PARTIEXPLOG2 = 123, // ball explosion 2
- PARTIBASE = 124, // gases of spaceship
- PARTITRACE0 = 140, // trace
- PARTITRACE1 = 141, // trace
- PARTITRACE2 = 142, // trace
- PARTITRACE3 = 143, // trace
- PARTITRACE4 = 144, // trace
- PARTITRACE5 = 145, // trace
- PARTITRACE6 = 146, // trace
- PARTITRACE7 = 147, // trace
- PARTITRACE8 = 148, // trace
- PARTITRACE9 = 149, // trace
- PARTITRACE10 = 150, // trace
- PARTITRACE11 = 151, // trace
- PARTITRACE12 = 152, // trace
- PARTITRACE13 = 153, // trace
- PARTITRACE14 = 154, // trace
- PARTITRACE15 = 155, // trace
- PARTITRACE16 = 156, // trace
- PARTITRACE17 = 157, // trace
- PARTITRACE18 = 158, // trace
- PARTITRACE19 = 159, // trace
-};
-
-enum ParticlePhase
-{
- PARPHSTART = 0,
- PARPHEND = 1,
-};
-
-struct Particle
-{
- char bUsed; // TRUE -> particle used
- char bRay; // TRUE -> ray with goal
- unsigned short uniqueStamp; // unique mark
- short sheet; // sheet (0..n)
- ParticleType type; // type PARTI*
- ParticlePhase phase; // phase PARPH*
- float mass; // mass of the particle (in rebounding)
- float weight; // weight of the particle (for noise)
- float duration; // length of life
- Math::Vector pos; // absolute position (relative if object links)
- Math::Vector goal; // goal position (if bRay)
- Math::Vector speed; // speed of displacement
- float windSensitivity;
- short bounce; // number of rebounds
- Math::Point dim; // dimensions of the rectangle
- float zoom; // zoom (0..1)
- float angle; // angle of rotation
- float intensity; // intensity
- Math::Point texSup; // coordinated upper texture
- Math::Point texInf; // coordinated lower texture
- float time; // age of the particle (0..n)
- float phaseTime; // age at the beginning of phase
- float testTime; // time since last test
- CObject* objLink; // father object (for example reactor)
- CObject* objFather; // father object (for example reactor)
- short objRank; // rank of the object, or -1
- short trackRank; // rank of the drag
-};
-
-struct Track
-{
- char bUsed; // TRUE -> drag used
- char bDrawParticle;
- float step; // duration of not
- float last; // increase last not memorized
- float intensity; // intensity at starting (0..1)
- float width; // tail width
- int used; // number of positions in "pos"
- int head; // head to write index
- Math::Vector pos[MAXTRACKLEN];
- float len[MAXTRACKLEN];
-};
-
-struct WheelTrace
-{
- ParticleType type; // type PARTI*
- Math::Vector pos[4]; // rectangle positions
- float startTime; // beginning of life
-};
-
-
-
-class CParticle
-{
-public:
- CParticle(CInstanceManager* iMan, CEngine* engine);
- ~CParticle();
-
- void SetGLDevice(CDevice device);
-
- void FlushParticle();
- void FlushParticle(int sheet);
- int CreateParticle(Math::Vector pos, Math::Vector speed, Math::Point dim, ParticleType type, float duration=1.0f, float mass=0.0f, float windSensitivity=1.0f, int sheet=0);
- int CreateFrag(Math::Vector pos, Math::Vector speed, Gfx::EngineTriangle *triangle, ParticleType type, float duration=1.0f, float mass=0.0f, float windSensitivity=1.0f, int sheet=0);
- int CreatePart(Math::Vector pos, Math::Vector speed, ParticleType type, float duration=1.0f, float mass=0.0f, float weight=0.0f, float windSensitivity=1.0f, int sheet=0);
- int CreateRay(Math::Vector pos, Math::Vector goal, ParticleType type, Math::Point dim, float duration=1.0f, int sheet=0);
- int CreateTrack(Math::Vector pos, Math::Vector speed, Math::Point dim, ParticleType type, float duration=1.0f, float mass=0.0f, float length=10.0f, float width=1.0f);
- void CreateWheelTrace(const Math::Vector &p1, const Math::Vector &p2, const Math::Vector &p3, const Math::Vector &p4, ParticleType type);
- void DeleteParticle(ParticleType type);
- void DeleteParticle(int channel);
- void SetObjectLink(int channel, CObject *object);
- void SetObjectFather(int channel, CObject *object);
- void SetPosition(int channel, Math::Vector pos);
- void SetDimension(int channel, Math::Point dim);
- void SetZoom(int channel, float zoom);
- void SetAngle(int channel, float angle);
- void SetIntensity(int channel, float intensity);
- void SetParam(int channel, Math::Vector pos, Math::Point dim, float zoom, float angle, float intensity);
- void SetPhase(int channel, ParticlePhase phase, float duration);
- bool GetPosition(int channel, Math::Vector &pos);
-
- Gfx::Color RetFogColor(Math::Vector pos);
-
- void SetFrameUpdate(int sheet, bool bUpdate);
- void FrameParticle(float rTime);
- void DrawParticle(int sheet);
-
- bool WriteWheelTrace(char *filename, int width, int height, Math::Vector dl, Math::Vector ur);
-
-protected:
- void DeleteRank(int rank);
- bool CheckChannel(int &channel);
- void DrawParticleTriangle(int i);
- void DrawParticleNorm(int i);
- void DrawParticleFlat(int i);
- void DrawParticleFog(int i);
- void DrawParticleRay(int i);
- void DrawParticleSphere(int i);
- void DrawParticleCylinder(int i);
- void DrawParticleWheel(int i);
- CObject* SearchObjectGun(Math::Vector old, Math::Vector pos, ParticleType type, CObject *father);
- CObject* SearchObjectRay(Math::Vector pos, Math::Vector goal, ParticleType type, CObject *father);
- void Play(Sound sound, Math::Vector pos, float amplitude);
- bool TrackMove(int i, Math::Vector pos, float progress);
- void TrackDraw(int i, ParticleType type);
-
-protected:
- CInstanceManager* m_iMan;
- CEngine* m_engine;
- CDevice* m_pDevice;
- CRobotMain* m_main;
- CTerrain* m_terrain;
- CWater* m_water;
- CSound* m_sound;
-
- Gfx::Particle m_particule[MAXPARTICULE*MAXPARTITYPE];
- Gfx::EngineTriangle m_triangle[MAXPARTICULE]; // triangle if PartiType == 0
- Track m_track[MAXTRACK];
- int m_wheelTraceTotal;
- int m_wheelTraceIndex;
- WheelTrace m_wheelTrace[MAXWHEELTRACE];
- int m_totalInterface[MAXPARTITYPE][SH_MAX];
- bool m_bFrameUpdate[SH_MAX];
- int m_fogTotal;
- int m_fog[MAXPARTIFOG];
- int m_uniqueStamp;
- int m_exploGunCounter;
- float m_lastTimeGunDel;
- float m_absTime;
-};
-
-
-}; // namespace Gfx
diff --git a/src/graphics/common/planet.cpp b/src/graphics/common/planet.cpp
deleted file mode 100644
index 4fa17a1..0000000
--- a/src/graphics/common/planet.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-// * 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/.
-
-// planet.cpp
-
-#include "graphics/common/planet.h"
-
-
-// TODO implementation
diff --git a/src/graphics/common/planet.h b/src/graphics/common/planet.h
deleted file mode 100644
index 264d05c..0000000
--- a/src/graphics/common/planet.h
+++ /dev/null
@@ -1,80 +0,0 @@
-// * 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/.
-
-// planet.h
-
-#pragma once
-
-#include "common/event.h"
-#include "math/point.h"
-
-
-class CInstanceManager;
-
-
-namespace Gfx {
-
-class CEngine;
-
-
-const short MAXPLANET = 10;
-
-struct Planet
-{
- char bUsed; // TRUE -> planet exists
- Math::Point start; // initial position in degrees
- Math::Point angle; // current position in degrees
- float dim; // dimensions (0..1)
- float speed; // speed
- float dir; // direction in the sky
- char name[20]; // name of the texture
- Math::Point uv1, uv2; // texture mapping
- char bTGA; // texture .TGA
-};
-
-
-
-
-class CPlanet {
-public:
- CPlanet(CInstanceManager* iMan, CEngine* engine);
- ~CPlanet();
-
- void Flush();
- bool EventProcess(const Event &event);
- bool Create(int mode, Math::Point start, float dim, float speed, float dir, char *name, Math::Point uv1, Math::Point uv2);
- bool PlanetExist();
- void LoadTexture();
- void Draw();
- void SetMode(int mode);
- int RetMode();
-
-protected:
- bool EventFrame(const Event &event);
-
-protected:
- CInstanceManager* m_iMan;
- CEngine* m_engine;
-
- float m_time;
- int m_mode;
- Planet m_planet[2][MAXPLANET];
- bool m_bPlanetExist;
-};
-
-
-}; // namespace Gfx
diff --git a/src/graphics/common/pyro.cpp b/src/graphics/common/pyro.cpp
deleted file mode 100644
index 6b5b1af..0000000
--- a/src/graphics/common/pyro.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-// * 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/.
-
-// pyro.cpp
-
-#include "graphics/common/pyro.h"
-
-
-// TODO implementation
diff --git a/src/graphics/common/pyro.h b/src/graphics/common/pyro.h
deleted file mode 100644
index fda74b3..0000000
--- a/src/graphics/common/pyro.h
+++ /dev/null
@@ -1,175 +0,0 @@
-// * 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/.
-
-// pyro.h
-
-#pragma once
-
-#include "common/misc.h"
-#include "graphics/common/engine.h"
-//#include "object/object.h"
-// TEMPORARILY!
-enum ObjectType {};
-
-
-class CInstanceManager;
-class CObject;
-class CDisplayText;
-class CRobotMain;
-class CSound;
-
-
-namespace Gfx {
-
-class CEngine;
-class CTerrain;
-class CCamera;
-class CParticle;
-class CLight;
-
-
-enum PyroType
-{
- PT_NULL = 0,
- PT_FRAGT = 1, // fragmentation of technical object
- PT_FRAGO = 2, // fragmentation of organic object
- PT_FRAGW = 4, // fragmentation of object under water
- PT_EXPLOT = 5, // explosion of technical object
- PT_EXPLOO = 6, // explosion of organic object
- PT_EXPLOW = 8, // explosion of object under water
- PT_SHOTT = 9, // hit technical object
- PT_SHOTH = 10, // hit human
- PT_SHOTM = 11, // hit queen
- PT_SHOTW = 12, // hit under water
- PT_EGG = 13, // break the egg
- PT_BURNT = 14, // burning of technical object
- PT_BURNO = 15, // burning of organic object
- PT_SPIDER = 16, // spider explosion
- PT_FALL = 17, // cargo falling
- PT_WPCHECK = 18, // indicator reaches
- PT_FLCREATE = 19, // flag create
- PT_FLDELETE = 20, // flag destroy
- PT_RESET = 21, // reset position of the object
- PT_WIN = 22, // fireworks
- PT_LOST = 23, // black smoke
- PT_DEADG = 24, // shooting death
- PT_DEADW = 25, // drowning death
- PT_FINDING = 26, // object discovered
-};
-
-
-struct PyroBurnPart
-{
- int part;
- Math::Vector initialPos;
- Math::Vector finalPos;
- Math::Vector initialAngle;
- Math::Vector finalAngle;
-};
-
-struct PyroLightOper
-{
- float progress;
- float intensity;
- Gfx::Color color;
-};
-
-
-
-class CPyro {
-public:
- CPyro(CInstanceManager* iMan);
- ~CPyro();
-
- void DeleteObject(bool bAll=false);
- bool Create(PyroType type, CObject* pObj, float force=1.0f);
- bool EventProcess(const Event &event);
- Error IsEnded();
- void CutObjectLink(CObject* pObj);
-
-protected:
- void DisplayError(PyroType type, CObject* pObj);
- bool CreateLight(Math::Vector pos, float height);
- void DeleteObject(bool bPrimary, bool bSecondary);
-
- void CreateTriangle(CObject* pObj, ObjectType oType, int part);
-
- void ExploStart();
- void ExploTerminate();
-
- void BurnStart();
- void BurnAddPart(int part, Math::Vector pos, Math::Vector angle);
- void BurnProgress();
- bool BurnIsKeepPart(int part);
- void BurnTerminate();
-
- void FallStart();
- CObject* FallSearchBeeExplo();
- void FallProgress(float rTime);
- Error FallIsEnded();
-
- void LightOperFlush();
- void LightOperAdd(float progress, float intensity, float r, float g, float b);
- void LightOperFrame(float rTime);
-
-protected:
- CInstanceManager* m_iMan;
- CEngine* m_engine;
- CTerrain* m_terrain;
- CCamera* m_camera;
- CParticle* m_particule;
- CLight* m_light;
- CObject* m_object;
- CDisplayText* m_displayText;
- CRobotMain* m_main;
- CSound* m_sound;
-
- Math::Vector m_pos; // center of the effect
- Math::Vector m_posPower; // center of the battery
- bool m_bPower; // battery exists?
- PyroType m_type;
- float m_force;
- float m_size;
- float m_progress;
- float m_speed;
- float m_time;
- float m_lastParticule;
- float m_lastParticuleSmoke;
- int m_soundChannel;
-
- int m_lightRank;
- int m_lightOperTotal;
- PyroLightOper m_lightOper[10];
- float m_lightHeight;
-
- ObjectType m_burnType;
- int m_burnPartTotal;
- PyroBurnPart m_burnPart[10];
- int m_burnKeepPart[10];
- float m_burnFall;
-
- float m_fallFloor;
- float m_fallSpeed;
- float m_fallBulletTime;
- bool m_bFallEnding;
-
- int m_crashSphereUsed; // number of spheres used
- Math::Vector m_crashSpherePos[50];
- float m_crashSphereRadius[50];
-};
-
-}; // namespace Gfx
diff --git a/src/graphics/common/terrain.cpp b/src/graphics/common/terrain.cpp
deleted file mode 100644
index 9b61dfc..0000000
--- a/src/graphics/common/terrain.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-// * 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/.
-
-// terrain.cpp
-
-#include "graphics/common/terrain.h"
-
-
-// TODO implementation
diff --git a/src/graphics/common/terrain.h b/src/graphics/common/terrain.h
deleted file mode 100644
index fd9a1a6..0000000
--- a/src/graphics/common/terrain.h
+++ /dev/null
@@ -1,211 +0,0 @@
-// * 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/.
-
-// terrain.h
-
-#pragma once
-
-#include "graphics/common/engine.h"
-
-
-class CInstanceManager;
-
-
-namespace Gfx {
-
-class CEngine;
-class CWater;
-
-
-const short FLATLIMIT = (5.0f*Math::PI/180.0f);
-
-
-enum TerrainRes
-{
- TR_NULL = 0,
- TR_STONE = 1,
- TR_URANIUM = 2,
- TR_POWER = 3,
- TR_KEYa = 4,
- TR_KEYb = 5,
- TR_KEYc = 6,
- TR_KEYd = 7,
-};
-
-
-const short MAXBUILDINGLEVEL = 100;
-
-struct BuildingLevel
-{
- Math::Vector center;
- float factor;
- float min;
- float max;
- float level;
- float height;
- float bboxMinX;
- float bboxMaxX;
- float bboxMinZ;
- float bboxMaxZ;
-};
-
-
-const short MAXMATTERRAIN = 100;
-
-struct TerrainMaterial
-{
- short id;
- char texName[20];
- float u,v;
- float hardness;
- char mat[4]; // up, right, down, left
-};
-
-struct DotLevel
-{
- short id;
- char mat[4]; // up, right, down, left
-};
-
-
-const short MAXFLYINGLIMIT = 10;
-
-struct FlyingLimit
-{
- Math::Vector center;
- float extRadius;
- float intRadius;
- float maxHeight;
-};
-
-
-
-class CTerrain
-{
-public:
- CTerrain(CInstanceManager* iMan);
- ~CTerrain();
-
- bool Generate(int mosaic, int brickP2, float size, float vision, int depth, float hardness);
- bool InitTextures(char* baseName, int* table, int dx, int dy);
- void LevelFlush();
- bool LevelMaterial(int id, char* baseName, float u, float v, int up, int right, int down, int left, float hardness);
- bool LevelInit(int id);
- bool LevelGenerate(int *id, float min, float max, float slope, float freq, Math::Vector center, float radius);
- void FlushRelief();
- bool ReliefFromBMP(const char* filename, float scaleRelief, bool adjustBorder);
- bool ReliefFromDXF(const char* filename, float scaleRelief);
- bool ResFromBMP(const char* filename);
- bool CreateObjects(bool bMultiRes);
- bool Terraform(const Math::Vector &p1, const Math::Vector &p2, float height);
-
- void SetWind(Math::Vector speed);
- Math::Vector RetWind();
-
- float RetFineSlope(const Math::Vector &pos);
- float RetCoarseSlope(const Math::Vector &pos);
- bool GetNormal(Math::Vector &n, const Math::Vector &p);
- float RetFloorLevel(const Math::Vector &p, bool bBrut=false, bool bWater=false);
- float RetFloorHeight(const Math::Vector &p, bool bBrut=false, bool bWater=false);
- bool MoveOnFloor(Math::Vector &p, bool bBrut=false, bool bWater=false);
- bool ValidPosition(Math::Vector &p, float marging);
- TerrainRes RetResource(const Math::Vector &p);
- void LimitPos(Math::Vector &pos);
-
- void FlushBuildingLevel();
- bool AddBuildingLevel(Math::Vector center, float min, float max, float height, float factor);
- bool UpdateBuildingLevel(Math::Vector center);
- bool DeleteBuildingLevel(Math::Vector center);
- float RetBuildingFactor(const Math::Vector &p);
- float RetHardness(const Math::Vector &p);
-
- int RetMosaic();
- int RetBrick();
- float RetSize();
- float RetScaleRelief();
-
- void GroundFlat(Math::Vector pos);
- float RetFlatZoneRadius(Math::Vector center, float max);
-
- void SetFlyingMaxHeight(float height);
- float RetFlyingMaxHeight();
- void FlushFlyingLimit();
- bool AddFlyingLimit(Math::Vector center, float extRadius, float intRadius, float maxHeight);
- float RetFlyingLimit(Math::Vector pos, bool bNoLimit);
-
-protected:
- bool ReliefAddDot(Math::Vector pos, float scaleRelief);
- void AdjustRelief();
- Math::Vector RetVector(int x, int y);
- Gfx::VertexTex2 RetVertex(int x, int y, int step);
- bool CreateMosaic(int ox, int oy, int step, int objRank, const Gfx::Material &mat, float min, float max);
- bool CreateSquare(bool bMultiRes, int x, int y);
-
- TerrainMaterial* LevelSearchMat(int id);
- void LevelTextureName(int x, int y, char *name, Math::Point &uv);
- float LevelRetHeight(int x, int y);
- bool LevelGetDot(int x, int y, float min, float max, float slope);
- int LevelTestMat(char *mat);
- void LevelSetDot(int x, int y, int id, char *mat);
- bool LevelIfDot(int x, int y, int id, char *mat);
- bool LevelPutDot(int x, int y, int id);
- void LevelOpenTable();
- void LevelCloseTable();
-
- void AdjustBuildingLevel(Math::Vector &p);
-
-protected:
- CInstanceManager* m_iMan;
- CEngine* m_engine;
- CWater* m_water;
-
- int m_mosaic; // number of mosaics
- int m_brick; // number of bricks per mosaics
- float m_size; // size of an item in an brick
- float m_vision; // vision before a change of resolution
- float* m_relief; // table of the relief
- int* m_texture; // table of textures
- int* m_objRank; // table of rows of objects
- bool m_bMultiText;
- bool m_bLevelText;
- float m_scaleMapping; // scale of the mapping
- float m_scaleRelief;
- int m_subdivMapping;
- int m_depth; // number of different resolutions (1,2,3,4)
- char m_texBaseName[20];
- char m_texBaseExt[10];
- float m_defHardness;
-
- TerrainMaterial m_levelMat[MAXMATTERRAIN+1];
- int m_levelMatTotal;
- int m_levelMatMax;
- int m_levelDotSize;
- DotLevel* m_levelDot;
- int m_levelID;
-
- int m_buildingUsed;
- BuildingLevel m_buildingTable[MAXBUILDINGLEVEL];
-
- unsigned char* m_resources;
- Math::Vector m_wind; // wind speed
-
- float m_flyingMaxHeight;
- int m_flyingLimitTotal;
- FlyingLimit m_flyingLimit[MAXFLYINGLIMIT];
-};
-
-}; // namespace Gfx
diff --git a/src/graphics/common/test/CMakeLists.txt b/src/graphics/common/test/CMakeLists.txt
deleted file mode 100644
index bd83773..0000000
--- a/src/graphics/common/test/CMakeLists.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-cmake_minimum_required(VERSION 2.8)
-
-set(CMAKE_BUILD_TYPE debug)
-set(CMAKE_CXX_FLAGS_DEBUG "-Wall -g -O0")
-
-include_directories(. ../../..)
-add_executable(modelfile_test modelfile_test.cpp ../modelfile.cpp ../../../common/logger.cpp ../../../common/stringutils.cpp ../../../common/iman.cpp)
diff --git a/src/graphics/common/test/modelfile_test.cpp b/src/graphics/common/test/modelfile_test.cpp
deleted file mode 100644
index cc44f98..0000000
--- a/src/graphics/common/test/modelfile_test.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-#include "graphics/common/modelfile.h"
-#include "common/iman.h"
-
-#include <iostream>
-
-
-int main(int argc, char *argv[])
-{
- if (argc != 4)
- {
- std::cerr << "Usage: " << argv[0] << " {mod|dxf} in_file out_file" << std::endl;
- return 1;
- }
-
- CInstanceManager iMan;
- Gfx::CModelFile modfile(&iMan);
-
- std::string mode(argv[1]);
- if (mode == "mod")
- {
- if (! modfile.ReadModel(argv[2], false, false) )
- {
- std::cerr << "Read error: " << modfile.GetError() << std::endl;
- return 2;
- }
- }
- else if (mode == "dxf")
- {
- if (! modfile.ReadDXF(argv[2], false, false) )
- {
- std::cerr << "Read error: " << modfile.GetError() << std::endl;
- return 2;
- }
- }
- else
- {
- std::cerr << "Usage: " << argv[0] << " {mod|dxf} in_file out_file" << std::endl;
- return 1;
- }
-
- if (! modfile.WriteModel(argv[3]) )
- {
- std::cerr << "Write error: " << modfile.GetError() << std::endl;
- return 3;
- }
-
- return 0;
-}
diff --git a/src/graphics/common/text.cpp b/src/graphics/common/text.cpp
deleted file mode 100644
index 0c5eb66..0000000
--- a/src/graphics/common/text.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-// * 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/.
-
-// text.cpp
-
-#include "graphics/common/text.h"
-
-
-// TODO implementation
diff --git a/src/graphics/common/text.h b/src/graphics/common/text.h
deleted file mode 100644
index f96dc61..0000000
--- a/src/graphics/common/text.h
+++ /dev/null
@@ -1,113 +0,0 @@
-// * 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/.
-
-// text.h
-
-#pragma once
-
-#include "graphics/common/engine.h"
-#include "graphics/common/device.h"
-#include "math/point.h"
-
-
-class CInstanceManager;
-
-
-namespace Gfx {
-
-const float SMALLFONT = 10.0f;
-const float BIGFONT = 15.0f;
-
-const float NORMSTRETCH = 0.8f;
-
-
-
-enum FontType
-{
- FONT_COLOBOT = 0,
- FONT_COURIER = 1,
- FONT_BUTTON = 2,
-};
-
-enum FontTitle
-{
- TITLE_BIG = 0x04,
- TITLE_NORM = 0x08,
- TITLE_LITTLE = 0x0c,
-};
-
-enum FontColor
-{
- COLOR_LINK = 0x10,
- COLOR_TOKEN = 0x20,
- COLOR_TYPE = 0x30,
- COLOR_CONST = 0x40,
- COLOR_REM = 0x50,
- COLOR_KEY = 0x60,
- COLOR_TABLE = 0x70,
-};
-
-const short FONT_MASK = 0x03;
-const short TITLE_MASK = 0x0c;
-const short COLOR_MASK = 0x70;
-const short IMAGE_MASK = 0x80;
-
-
-
-class CText {
-public:
- CText(CInstanceManager *iMan, Gfx::CEngine* engine);
- ~CText();
-
- void SetDevice(Gfx::CDevice *device);
-
- void DrawText(char *string, char *format, int len, Math::Point pos, float width, int justif, float size, float stretch, int eol);
- void DrawText(char *string, char *format, Math::Point pos, float width, int justif, float size, float stretch, int eol);
- void DrawText(char *string, int len, Math::Point pos, float width, int justif, float size, float stretch, FontType font, int eol);
- void DrawText(char *string, Math::Point pos, float width, int justif, float size, float stretch, FontType font, int eol);
- void DimText(char *string, char *format, int len, Math::Point pos, int justif, float size, float stretch, Math::Point &start, Math::Point &end);
- void DimText(char *string, char *format, Math::Point pos, int justif, float size, float stretch, Math::Point &start, Math::Point &end);
- void DimText(char *string, int len, Math::Point pos, int justif, float size, float stretch, FontType font, Math::Point &start, Math::Point &end);
- void DimText(char *string, Math::Point pos, int justif, float size, float stretch, FontType font, Math::Point &start, Math::Point &end);
-
- float RetAscent(float size, FontType font);
- float RetDescent(float size, FontType font);
- float RetHeight(float size, FontType font);
-
- float RetStringWidth(char *string, char *format, int len, float size, float stretch);
- float RetStringWidth(char *string, int len, float size, float stretch, FontType font);
- float RetCharWidth(int character, float offset, float size, float stretch, FontType font);
-
- int Justif(char *string, char *format, int len, float width, float size, float stretch);
- int Justif(char *string, int len, float width, float size, float stretch, FontType font);
- int Detect(char *string, char *format, int len, float offset, float size, float stretch);
- int Detect(char *string, int len, float offset, float size, float stretch, FontType font);
-
-protected:
- void DrawString(char *string, char *format, int len, Math::Point pos, float width, float size, float stretch, int eol);
- void DrawString(char *string, int len, Math::Point pos, float width, float size, float stretch, FontType font, int eol);
- void DrawColor(Math::Point pos, float size, float width, int color);
- void DrawChar(int character, Math::Point pos, float size, float stretch, FontType font);
-
-protected:
- CInstanceManager* m_iMan;
- Gfx::CEngine* m_engine;
- Gfx::CDevice* m_device;
-
-};
-
-}; // namespace Gfx
diff --git a/src/graphics/common/texture.h b/src/graphics/common/texture.h
deleted file mode 100644
index 787c2bf..0000000
--- a/src/graphics/common/texture.h
+++ /dev/null
@@ -1,237 +0,0 @@
-// * This file is part of the COLOBOT source code
-// * 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/.
-
-// texture.h
-
-#pragma once
-
-namespace Gfx {
-
-/**
- \enum TexImgFormat
- \brief Format of image data */
-enum TexImgFormat
-{
- //! Try to determine automatically (may not work)
- TEX_IMG_AUTO,
- //! RGB triplet, 3 bytes
- TEX_IMG_RGB,
- //! BGR triplet, 3 bytes
- TEX_IMG_BGR,
- //! RGBA triplet, 4 bytes
- TEX_IMG_RGBA,
- //! BGRA triplet, 4 bytes
- TEX_IMG_BGRA
-};
-
-/**
- \enum TexMinFilter
- \brief Texture minification filter
-
- Corresponds to OpenGL modes but should translate to DirectX too. */
-enum TexMinFilter
-{
- TEX_MIN_FILTER_NEAREST,
- TEX_MIN_FILTER_LINEAR,
- TEX_MIN_FILTER_NEAREST_MIPMAP_NEAREST,
- TEX_MIN_FILTER_LINEAR_MIPMAP_NEAREST,
- TEX_MIN_FILTER_NEAREST_MIPMAP_LINEAR,
- TEX_MIN_FILTER_LINEAR_MIPMAP_LINEAR
-};
-
-/**
- \enum TexMagFilter
- \brief Texture magnification filter */
-enum TexMagFilter
-{
- TEX_MAG_FILTER_NEAREST,
- TEX_MAG_FILTER_LINEAR
-};
-
-/**
- \enum TexWrapMode
- \brief Wrapping mode for texture coords */
-enum TexWrapMode
-{
- TEX_WRAP_CLAMP,
- TEX_WRAP_REPEAT
-};
-
-/**
- \enum TexMixOperation
- \brief Multitexture mixing operation */
-enum TexMixOperation
-{
- //! Default operation on default params (modulate on computed & texture)
- TEX_MIX_OPER_DEFAULT,
- //! = Arg1
- TEX_MIX_OPER_REPLACE,
- //! = Arg1 * Arg2
- TEX_MIX_OPER_MODULATE,
- //! = Arg1 + Arg2
- TEX_MIX_OPER_ADD,
- //! = Arg1 - Arg2
- TEX_MIX_OPER_SUBTRACT
-};
-
-/**
- \enum TexMixArgument
- \brief Multitexture mixing argument */
-enum TexMixArgument
-{
- //! Color from current texture
- TEX_MIX_ARG_TEXTURE,
- //! Color computed by previous texture unit (current in DirectX; previous in OpenGL)
- TEX_MIX_ARG_COMPUTED_COLOR,
- //! (Source) color of textured fragment (diffuse in DirectX; primary color in OpenGL)
- TEX_MIX_ARG_SRC_COLOR,
- //! Constant color (texture factor in DirectX; texture env color in OpenGL)
- TEX_MIX_ARG_FACTOR
-};
-
-/**
- \struct TextureCreateParams
- \brief Parameters for texture creation
-
- These params define how particular texture is created and later displayed.
- They must be specified at texture creation time and cannot be changed later. */
-struct TextureCreateParams
-{
- //! Whether to generate mipmaps
- bool mipmap;
- //! Format of source image data
- Gfx::TexImgFormat format;
- //! Minification filter
- Gfx::TexMinFilter minFilter;
- //! Magnification filter
- Gfx::TexMagFilter magFilter;
-
- //! Constructor; calls LoadDefault()
- TextureCreateParams()
- { LoadDefault(); }
-
- //! Loads the default values
- inline void LoadDefault()
- {
- format = Gfx::TEX_IMG_RGB;
- mipmap = false;
-
- minFilter = Gfx::TEX_MIN_FILTER_NEAREST;
- magFilter = Gfx::TEX_MAG_FILTER_NEAREST;
- }
-};
-
-/**
- \struct TextureStageParams
- \brief Parameters for a texture unit
-
- These params define the behavior of texturing units (stages).
- They can be changed freely and are feature of graphics engine, not any particular texture. */
-struct TextureStageParams
-{
- //! Mixing operation done on color values
- Gfx::TexMixOperation colorOperation;
- //! 1st argument of color operations
- Gfx::TexMixArgument colorArg1;
- //! 2nd argument of color operations
- Gfx::TexMixArgument colorArg2;
- //! Mixing operation done on alpha values
- Gfx::TexMixOperation alphaOperation;
- //! 1st argument of alpha operations
- Gfx::TexMixArgument alphaArg1;
- //! 2nd argument of alpha operations
- Gfx::TexMixArgument alphaArg2;
- //! Wrap mode for 1st tex coord
- Gfx::TexWrapMode wrapS;
- //! Wrap mode for 2nd tex coord
- Gfx::TexWrapMode wrapT;
-
- //! Constructor; calls LoadDefault()
- TextureStageParams()
- { LoadDefault(); }
-
- //! Loads the default values
- inline void LoadDefault()
- {
- colorOperation = Gfx::TEX_MIX_OPER_DEFAULT;
- colorArg1 = Gfx::TEX_MIX_ARG_COMPUTED_COLOR;
- colorArg2 = Gfx::TEX_MIX_ARG_TEXTURE;
-
- alphaOperation = Gfx::TEX_MIX_OPER_DEFAULT;
- alphaArg1 = Gfx::TEX_MIX_ARG_COMPUTED_COLOR;
- alphaArg2 = Gfx::TEX_MIX_ARG_TEXTURE;
-
- wrapS = wrapT = Gfx::TEX_WRAP_REPEAT;
- }
-};
-
-/**
- \struct Texture
- \brief Info about a texture
-
- Identifies (through id) a texture created in graphics engine.
- Also contains some additional data. */
-struct Texture
-{
- //! Whether the texture (ID) is valid
- bool valid;
- //! ID of the texture in graphics engine
- unsigned int id;
- //! Width of texture
- int width;
- //! Height of texture
- int height;
- //! Whether the texture has alpha channel
- bool alpha;
-
- Texture()
- {
- valid = false;
- id = 0;
- width = height = 0;
- alpha = false;
- }
-
- //! Comparator for use in texture maps and sets
- inline bool operator<(const Gfx::Texture &other) const
- {
- // Invalid textures are always "less than" every other texture
-
- if ( (!valid) && (!other.valid) )
- return false;
-
- if (!valid)
- return true;
-
- if (!other.valid)
- return false;
-
- return id < other.id;
- }
-
- //! Comparator
- inline bool operator==(const Gfx::Texture &other) const
- {
- if (valid != other.valid)
- return false;
- if ( (!valid) && (!other.valid) )
- return true;
-
- return id == other.id;
- }
-};
-
-}; // namespace Gfx
diff --git a/src/graphics/common/vertex.h b/src/graphics/common/vertex.h
deleted file mode 100644
index 0a74587..0000000
--- a/src/graphics/common/vertex.h
+++ /dev/null
@@ -1,141 +0,0 @@
-// * This file is part of the COLOBOT source code
-// * 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/.
-
-// vertex.h
-
-#pragma once
-
-
-#include "graphics/common/color.h"
-#include "math/vector.h"
-#include "math/point.h"
-
-#include <sstream>
-
-namespace Gfx {
-
-/**
- * \struct Vertex
- * \brief Vertex of a primitive
- *
- * This structure was created as analog to DirectX's D3DVERTEX.
- *
- * It contains:
- * - vertex coordinates (x,y,z) as Math::Vector,
- * - normal coordinates (nx,ny,nz) as Math::Vector
- * - texture coordinates (u,v) as Math::Point.
- */
-struct Vertex
-{
- Math::Vector coord;
- Math::Vector normal;
- Math::Point texCoord;
-
- Vertex(Math::Vector aCoord = Math::Vector(),
- Math::Vector aNormal = Math::Vector(),
- Math::Point aTexCoord = Math::Point())
- : coord(aCoord), normal(aNormal), texCoord(aTexCoord) {}
-
-
- //! Returns a string "(c: [...], n: [...], tc: [...])"
- inline std::string ToString() const
- {
- std::stringstream s;
- s.precision(3);
- s << "(c: " << coord.ToString() << ", n: " << normal.ToString()
- << ", tc: " << texCoord.ToString() << ")";
- return s.str();
- }
-};
-
-/**
- * \struct VertexCol
- * \brief Vertex with color information
- *
- * This structure was created as analog to DirectX's D3DLVERTEX.
- *
- * It contains:
- * - vertex coordinates (x,y,z) as Math::Vector,
- * - RGBA color as Gfx::Color,
- * - RGBA specular color as Gfx::Color,
- * - texture coordinates (u,v) as Math::Point.
- */
-struct VertexCol
-{
- Math::Vector coord;
- Gfx::Color color;
- Gfx::Color specular;
- Math::Point texCoord;
-
- VertexCol(Math::Vector aCoord = Math::Vector(),
- Gfx::Color aColor = Gfx::Color(),
- Gfx::Color aSpecular = Gfx::Color(),
- Math::Point aTexCoord = Math::Point())
- : coord(aCoord), color(aColor), specular(aSpecular), texCoord(aTexCoord) {}
-
- //! Returns a string "(c: [...], col: [...], sp: [...], tc: [...])"
- inline std::string ToString() const
- {
- std::stringstream s;
- s.precision(3);
- s << "(c: " << coord.ToString() << ", col: " << color.ToString() << ", sp: "
- << specular.ToString() << ", tc: " << texCoord.ToString() << ")";
- return s.str();
- }
-};
-
-
-/**
- * \struct VertexTex2
- * \brief Vertex with secondary texture coordinates
- *
- * In addition to fields from Gfx::Vector, it contains
- * secondary texture coordinates (u2, v2) as Math::Point
- */
-struct VertexTex2
-{
- Math::Vector coord;
- Math::Vector normal;
- Math::Point texCoord;
- Math::Point texCoord2;
-
- VertexTex2(Math::Vector aCoord = Math::Vector(),
- Math::Vector aNormal = Math::Vector(),
- Math::Point aTexCoord = Math::Point(),
- Math::Point aTexCoord2 = Math::Point())
- : coord(aCoord), normal(aNormal), texCoord(aTexCoord), texCoord2(aTexCoord2) {}
-
- //! Sets the fields from Gfx::Vertex with texCoord2 = (0,0)
- void FromVertex(const Gfx::Vertex &v)
- {
- coord = v.coord;
- normal = v.normal;
- texCoord = v.texCoord;
- texCoord2 = Math::Point();
- }
-
- //! Returns a string "(c: [...], n: [...], tc: [...], tc2: [...])"
- inline std::string ToString() const
- {
- std::stringstream s;
- s.precision(3);
- s << "(c: " << coord.ToString() << ", n: " << normal.ToString()
- << ", tc: " << texCoord.ToString() << ", tc2: " << texCoord2.ToString() << ")";
- return s.str();
- }
-};
-
-}; // namespace Gfx
diff --git a/src/graphics/common/water.cpp b/src/graphics/common/water.cpp
deleted file mode 100644
index 5172b9f..0000000
--- a/src/graphics/common/water.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-// * 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.cpp
-
-#include "graphics/common/water.h"
-
-
-// TODO implementation
diff --git a/src/graphics/common/water.h b/src/graphics/common/water.h
deleted file mode 100644
index f5224a4..0000000
--- a/src/graphics/common/water.h
+++ /dev/null
@@ -1,134 +0,0 @@
-// * 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/common/engine.h"
-#include "graphics/common/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