Subastra
Loading...
Searching...
No Matches
camera.h
Go to the documentation of this file.
1#ifndef __H__SYSTEMS_CAMERA__
2#define __H__SYSTEMS_CAMERA__
3
4#include "../rendering/shader.h"
5#include "require.h"
6
7#define CAMERA_SPEED 2.5
8
10 allocator_t temporary_allocator) {
12
13 while (entity_iter_next(&it)) {
14 entity_t *ptr = it.entity;
15 if (ptr->kind != ENTITY_KIND_CAMERA)
16 continue;
17
18 vec2i inp = input_vector(payload.input);
19 vec2 wish =
20 vec2_scale(vec2i_to_vec2(inp), CAMERA_SPEED * payload.delta_time);
21 ptr->chunk_local_position = vec2_add(ptr->chunk_local_position, wish);
22 }
23}
24
26 .name = "system_camera_move",
27 .phase = SYSTEM_PHASE_UPDATE,
28 .pin_to_main = false,
29 .dependencies = 0,
30 .dependency_count = 0,
31 .entities_mut = ENTITY_KIND_CAMERA,
32 .entities_const = 0,
33 .resources = SYSTEM_RESOURCE_MASK_INPUT,
34 .runner = system_camera_move};
35
37 allocator_t temporary_allocator) {
38 shader_t *shader_ptr = (shader_t *)payload.system_specific_data;
39 GLuint program = shader_ptr->gl_program;
40
42
43 while (entity_iter_next(&it)) {
44 entity_t *ptr = it.entity;
45 if (ptr->kind != ENTITY_KIND_CAMERA)
46 continue;
47
48 mat4 projection =
50 rendering_ctx_set_projection(payload.rendering_ctx, program, projection);
51 break;
52 }
53}
54
56 .name = "system_camera_set_projection",
57 .phase = SYSTEM_PHASE_UPDATE,
58 .pin_to_main = false,
59 .dependencies = 0,
60 .dependency_count = 0,
61 .entities_mut = ENTITY_KIND_CAMERA,
62 .entities_const = 0,
65
66#endif
#define CAMERA_SPEED
Definition camera.h:7
static system_requirements_declaration_t system_decl_camera_move
Definition camera.h:25
static system_requirements_declaration_t system_decl_camera_set_projection
Definition camera.h:55
static void system_camera_move(system_payload_t payload, allocator_t temporary_allocator)
Definition camera.h:9
static void system_camera_set_projection(system_payload_t payload, allocator_t temporary_allocator)
Definition camera.h:36
static void rendering_ctx_set_projection(rendering_ctx_t *ctx, GLuint program, mat4 projection)
Definition context.h:65
static vec2i input_vector(input_t *input)
Definition input.h:16
@ ENTITY_KIND_CAMERA
Definition entity.h:37
static mat4 entity_camera_calculate_projection(const rendering_ctx_t *ctx, const entity_t *entity)
Definition entity.h:88
@ SYSTEM_RESOURCE_MASK_SYSTEM_SPECIFIC_DATA
Definition require.h:71
@ SYSTEM_RESOURCE_MASK_INPUT
Definition require.h:69
@ SYSTEM_PHASE_UPDATE
Definition require.h:12
A generic allocator type passed by value. Contains a fallback allocator and a set of function pointer...
Definition memory.h:30
Definition world.h:111
entity_t * entity
Definition world.h:114
Definition entity.h:43
entity_kind_t kind
Definition entity.h:44
vec2 chunk_local_position
Definition entity.h:50
Definition mat4.h:7
Small container and wrapper over OpenGL for shader-related things. In actually it is closer to what O...
Definition shader.h:15
GLuint gl_program
Definition shader.h:16
Definition require.h:51
input_t * input
Definition require.h:54
void * system_specific_data
Definition require.h:52
double delta_time
Definition require.h:60
rendering_ctx_t * rendering_ctx
Definition require.h:55
world_t * world
Definition require.h:53
Definition require.h:89
const char * name
Definition require.h:90
Definition vec2.h:11
Definition vec2i.h:7
static vec2 vec2i_to_vec2(vec2i v)
{.x = (int)v.x, .y = (int)v.y)
Definition vec2i.h:23
static bool entity_iter_next(entity_iter_t *it)
Definition world.h:137
static entity_iter_t world_entity_iter(world_t *world)
Definition world.h:118