Colobot
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Pages
src
graphics
engine
lightman.h
Go to the documentation of this file.
1
// * This file is part of the COLOBOT source code
2
// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch
3
// * Copyright (C) 2012, Polish Portal of Colobot (PPC)
4
// *
5
// * This program is free software: you can redistribute it and/or modify
6
// * it under the terms of the GNU General Public License as published by
7
// * the Free Software Foundation, either version 3 of the License, or
8
// * (at your option) any later version.
9
// *
10
// * This program is distributed in the hope that it will be useful,
11
// * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
// * GNU General Public License for more details.
14
// *
15
// * You should have received a copy of the GNU General Public License
16
// * along with this program. If not, see http://www.gnu.org/licenses/.
17
23
#pragma once
24
25
26
#include "
graphics/core/color.h
"
27
#include "
graphics/core/light.h
"
28
#include "
graphics/engine/engine.h
"
29
30
#include "
math/vector.h
"
31
32
33
// Graphics module namespace
34
namespace
Gfx {
35
40
struct
LightProgression
41
{
43
float
starting
;
45
float
ending
;
47
float
current
;
49
float
progress
;
51
float
speed
;
52
53
LightProgression
()
54
:
starting
(0.0f)
55
,
ending
(0.0f)
56
,
current
(0.0f)
57
,
progress
(0.0f)
58
,
speed
(0.0f)
59
{}
60
62
void
Init
(
float
value);
63
65
void
Update
(
float
rTime);
66
68
void
SetTarget
(
float
value);
69
};
70
75
enum
LightPriority
76
{
77
LIGHT_PRI_HIGHEST
= 0,
78
LIGHT_PRI_HIGH
= 1,
79
LIGHT_PRI_LOW
= 2
80
};
81
89
struct
DynamicLight
90
{
92
int
rank
;
93
95
bool
used
;
97
bool
enabled
;
98
100
LightPriority
priority
;
101
103
Light
light
;
104
106
LightProgression
intensity
;
108
LightProgression
colorRed
;
110
LightProgression
colorGreen
;
112
LightProgression
colorBlue
;
113
115
EngineObjectType
includeType
;
117
EngineObjectType
excludeType
;
118
119
DynamicLight
()
120
:
rank
(0)
121
,
used
(false)
122
,
enabled
(false)
123
,
priority
(
LIGHT_PRI_LOW
)
124
,
includeType
(
ENG_OBJTYPE_NULL
)
125
,
excludeType
(
ENG_OBJTYPE_NULL
)
126
{}
127
};
128
142
class
CLightManager
143
{
144
public
:
146
CLightManager
(
CEngine
* engine);
148
virtual
~CLightManager
();
149
151
void
SetDevice
(
CDevice
* device);
152
154
void
DebugDumpLights
();
155
157
void
FlushLights
();
159
int
CreateLight
(
LightPriority
priority =
LIGHT_PRI_LOW
);
161
bool
DeleteLight
(
int
lightRank);
163
bool
SetLight
(
int
lightRank,
const
Light
&light);
165
bool
GetLight
(
int
lightRank,
Light
&light);
167
bool
SetLightEnabled
(
int
lightRank,
bool
enable);
169
bool
SetLightPriority
(
int
lightRank,
LightPriority
priority);
170
172
bool
SetLightIncludeType
(
int
lightRank,
EngineObjectType
type);
174
bool
SetLightExcludeType
(
int
lightRank,
EngineObjectType
type);
175
177
bool
SetLightPos
(
int
lightRank,
const
Math::Vector
&pos);
179
Math::Vector
GetLightPos
(
int
lightRank);
180
182
bool
SetLightDir
(
int
lightRank,
const
Math::Vector
&dir);
184
Math::Vector
GetLightDir
(
int
lightRank);
185
187
bool
SetLightIntensity
(
int
lightRank,
float
value);
189
float
GetLightIntensity
(
int
lightRank);
191
bool
SetLightIntensitySpeed
(
int
lightRank,
float
speed);
192
194
void
AdaptLightColor
(
const
Color
&color,
float
factor);
195
197
bool
SetLightColor
(
int
lightRank,
const
Color
&color);
199
Color
GetLightColor
(
int
lightRank);
201
bool
SetLightColorSpeed
(
int
lightRank,
float
speed);
202
204
void
UpdateProgression
(
float
rTime);
206
void
UpdateLights
();
208
void
UpdateDeviceLights
(
EngineObjectType
type);
209
210
protected
:
211
class
LightsComparator
212
{
213
public
:
214
LightsComparator
(
Math::Vector
eyePos,
EngineObjectType
objectType);
215
216
bool
operator()(
const
DynamicLight
& left,
const
DynamicLight
& right);
217
218
private
:
219
float
GetLightWeight(
const
DynamicLight
& dynLight);
220
221
Math::Vector
m_eyePos;
222
EngineObjectType
m_objectType;
223
};
224
225
protected
:
226
CEngine
* m_engine;
227
CDevice
* m_device;
228
230
float
m_time
;
232
std::vector<DynamicLight>
m_dynLights
;
234
std::vector<int>
m_lightMap
;
235
};
236
237
};
// namespace Gfx
238
Generated on Sat Jul 5 2014 09:25:02 for Colobot by
1.8.1.2