Argentum Online - Cliente
camera.h
1 #ifndef __CAMERA_H
2 #define __CAMERA_H
3 
4 #include <vector>
5 
6 #include "SDL/sdl_timer.h"
7 #include "components/position_component.h"
8 #include "decoration.h"
9 #include "renderizable_object.h"
10 
11 typedef struct position {
12  int x;
13  int y;
14 } position_t;
15 
20 class Camera {
21  private:
22  PositionComponent &follow_component;
23  /* Coordenadas del tile donde esta centrada la camara. */
24  int x_center_tile;
25  int y_center_tile;
26  int map_size; /* Lado del mapa, en tiles (los mapas son cuadrados). */
27 
28  int tile_size; /* Lado de cada tile, en pixeles.*/
29  /* Ancho que se va a renderizar en tiles. */
30  int width_tiles;
31 
32  /* Altura que se va a renderizar en tiles. */
33  int height_tiles;
34 
35  int speed; // En tiles/segundo.
36  SDL_Rect viewport;
37 
38  int camera_offset_x;
39  int camera_offset_y;
40 
41  SDLTimer movement_timer;
42 
43 
44 
45  /* Devuelve true si un componente visual esta dentro del campo
46  de vision de la camara.*/
47  bool _is_within_visual_range(RenderizableObject *component);
48 
49  /* Devuelve el area fisica donde deberia ser dibujado el componente.*/
50  SDL_Rect _get_render_area(RenderizableObject *component, int x, int y,
51  int x_tmp_offset, int y_tmp_offset);
52  SDL_Rect _get_render_area(Decoration &decoration);
53 
54  void _update_offset();
55 
56  public:
69  Camera(PositionComponent &follow_component, SDL_Rect viewport, int map_size,
70  int tile_size, int speed);
71  ~Camera();
72 
78  void update();
79 
91  void draw(RenderizableObject *component, int x, int y, int x_tmp_offset,
92  int y_tmp_offset);
93 
98  void draw_all();
99 
105  void render_map_layers(std::vector<std::vector<Decoration>> &layers);
106 
114  position_t tile_at(int x, int y);
115 };
116 
117 #endif
RenderizableObject
Interfaz que deben implementar todos los componentes que vayan a ser renderizados por la camara.
Definition: renderizable_object.h:29
Decoration
Objeto renderizable estatico.
Definition: decoration.h:11
Camera
Camara, utilizada para renderizar el mapa y las entidades.
Definition: camera.h:20
Camera::render_map_layers
void render_map_layers(std::vector< std::vector< Decoration >> &layers)
Renderiza un conjunto de capas del mapa.
Definition: camera.cpp:170
Camera::tile_at
position_t tile_at(int x, int y)
Indica cual fue el tile clickeado.
Definition: camera.cpp:208
PositionComponent
Componente de posicion. Usada en NPCs y jugadores.
Definition: position_component.h:13
SDLTimer
Timer basado en la cuenta de SDL.
Definition: sdl_timer.h:9
Camera::draw
void draw(RenderizableObject *component, int x, int y, int x_tmp_offset, int y_tmp_offset)
Renderiza un objeto renderizable.
Definition: camera.cpp:163
Camera::Camera
Camera(PositionComponent &follow_component, SDL_Rect viewport, int map_size, int tile_size, int speed)
Crea un objeto Camera.
Definition: camera.cpp:14
Camera::update
void update()
Actualiza la posicion de la camara segun el objeto que esta siguiendo.
Definition: camera.cpp:133
Camera::draw_all
void draw_all()
Renderiza todas las entidades que contengan una componente visual.
Definition: camera.cpp:179
position
Definition: camera.h:11