forked from EasyRPG/Player
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathspriteset_map.h
135 lines (109 loc) · 3.27 KB
/
spriteset_map.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/*
* This file is part of EasyRPG Player.
*
* EasyRPG Player 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.
*
* EasyRPG Player 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 EasyRPG Player. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef EP_SPRITESET_MAP_H
#define EP_SPRITESET_MAP_H
// Headers
#include <string>
#include "async_handler.h"
#include "frame.h"
#include "plane.h"
#include "screen.h"
#include "sprite_airshipshadow.h"
#include "sprite_character.h"
#include "sprite_timer.h"
#include "system.h"
#include "tilemap.h"
class Game_Character;
class FileRequestAsync;
class DrawableList;
struct FileRequestResult;
/**
* Spriteset_Map class.
*/
class Spriteset_Map {
public:
Spriteset_Map();
void Refresh();
void Update();
/**
* Notifies that the map's chipset has changed.
*/
void ChipsetUpdated();
/**
* Notifies that the map's parallax has changed.
*/
void ParallaxUpdated();
/**
* Notifies that the System graphic has changed.
*/
void SystemGraphicUpdated();
/**
* Substitutes tile in lower layer.
*/
void SubstituteDown(int old_id, int new_id);
/**
* Substitutes tile in upper layer.
*/
void SubstituteUp(int old_id, int new_id);
/**
* @return true if we should clear the screen before drawing the map
*/
bool RequireClear(DrawableList& drawable_list);
/**
* Determines the map render offset when Fake Resolution is used and sets the viewport of the screen for cropping.
*/
void CalculateMapRenderOffset();
/**
* Determines the panorama offset when Fake Resolution is used.
*/
void CalculatePanoramaRenderOffset();
/** @return x offset for the rendering of the tilemap and events */
int GetRenderOx() const;
/** @return y offset for the rendering of the tilemap and events */
int GetRenderOy() const;
protected:
std::unique_ptr<Tilemap> tilemap;
std::unique_ptr<Plane> panorama;
std::string panorama_name;
std::vector<std::unique_ptr<Sprite_Character>> character_sprites;
std::vector<std::unique_ptr<Sprite_AirshipShadow>> airship_shadows;
std::unique_ptr<Sprite_Timer> timer1;
std::unique_ptr<Sprite_Timer> timer2;
std::unique_ptr<Screen> screen;
std::unique_ptr<Frame> frame;
void CreateSprite(Game_Character* character, bool create_x_clone, bool create_y_clone);
void CreateAirshipShadowSprite(bool create_x_clone, bool create_y_clone);
void OnTilemapSpriteReady(FileRequestResult*);
void OnPanoramaSpriteReady(FileRequestResult* result);
FileRequestBinding panorama_request_id;
FileRequestBinding tilemap_request_id;
bool need_x_clone = false;
bool need_y_clone = false;
int map_render_ox = 0;
int map_render_oy = 0;
int map_tiles_x = 0;
int map_tiles_y = 0;
bool vehicle_loaded[3] = {};
Tone last_tone;
};
inline int Spriteset_Map::GetRenderOx() const {
return map_render_ox;
}
inline int Spriteset_Map::GetRenderOy() const {
return map_render_oy;
}
#endif