File: renderentry.h

package info (click to toggle)
scummvm 2.9.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 450,580 kB
  • sloc: cpp: 4,299,825; asm: 28,322; python: 12,901; sh: 11,302; java: 9,289; xml: 7,895; perl: 2,639; ansic: 2,465; yacc: 1,670; javascript: 1,020; makefile: 933; lex: 578; awk: 275; objc: 82; sed: 11; php: 1
file content (134 lines) | stat: -rw-r--r-- 3,605 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/* ScummVM - Graphic Adventure Engine
 *
 * ScummVM is the legal property of its developers, whose names
 * are too numerous to list here. Please refer to the COPYRIGHT
 * file distributed with this source distribution.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

#ifndef STARK_GFX_RENDER_ENTRY_H
#define STARK_GFX_RENDER_ENTRY_H

#include "common/array.h"
#include "common/rect.h"
#include "common/str.h"

#include "math/ray.h"
#include "math/vector3d.h"

namespace Stark {

class Visual;
class VisualImageXMG;
class VisualText;

namespace Resources {
class ItemVisual;
}

namespace Gfx {

struct LightEntry {
	enum Type {
		kAmbient     = 0,
		kPoint       = 1,
		kDirectional = 2,
		kSpot        = 4
	};

	Type type;
	Math::Vector3d color;
	Math::Vector3d position;
	Math::Vector3d direction;
	Math::Angle innerConeAngle;
	Math::Angle outerConeAngle;
	float falloffNear;
	float falloffFar;
	Math::Vector4d worldPosition;
	Math::Vector4d eyePosition;
	Math::Vector3d eyeDirection;
};

typedef Common::Array<LightEntry *> LightEntryArray;

class RenderEntry {
public:
	RenderEntry(Resources::ItemVisual *owner, const Common::String &name);
	virtual ~RenderEntry() {}

	void render(const LightEntryArray &lights = LightEntryArray());

	void setVisual(Visual *visual);
	void setPosition(const Common::Point &position);
	void setPosition3D(const Math::Vector3d &position, float direction);
	void setSortKey(float sortKey);
	void setClickable(bool clickable);

	/** Gets the position */
	Common::Point getPosition() const { return _position; }

	/** Gets the owner-object */
	Resources::ItemVisual *getOwner() const { return _owner; }

	/** Gets the entry's name */
	const Common::String &getName() const { return _name; }

	/** Obtain the underlying image visual, if any */
	VisualImageXMG *getImage() const;

	/** Obtain the underlying text visual, if any */
	VisualText *getText() const;

	/**
	 * Mouse picking test for 2D items
	 *
	 * @param position game window coordinates to test
	 * @param relativePosition successful hit item relative coordinates
	 * @param cursorRect cursor rectangle to be used to test small world items
	 * @return successful hit
	 */
	bool containsPoint(const Common::Point &position, Common::Point &relativePosition, const Common::Rect &cursorRect) const;

	/** Mouse picking test for 3D items */
	bool intersectRay(const Math::Ray &ray) const;

	/** Compare two render entries by their sort keys */
	static bool compare(const RenderEntry *x, const RenderEntry *y);

	/**
	 * Compute the 2D screen space bounding rect for the item,
	 * in original game view coordinates.
	 */
	Common::Rect getBoundingRect() const;

protected:
	Common::String _name;
	Resources::ItemVisual *_owner;

	Visual *_visual;
	Common::Point _position;
	Math::Vector3d _position3D;
	float _direction3D;
	float _sortKey;
	bool _clickable;
};

typedef Common::Array<RenderEntry *> RenderEntryArray;

} // End of namespace Gfx
} // End of namespace Stark

#endif // STARK_GFX_RENDER_ENTRY_H