Subastra
Loading...
Searching...
No Matches
construct.h
Go to the documentation of this file.
1#ifndef __H__SYSTEMS_CONSTRUCT__
2#define __H__SYSTEMS_CONSTRUCT__
3
4#include "require.h"
5
6#include "../rendering/image.h"
7#include "../rendering/quads.h"
8
9#define THRUSTER_POWER 0.01
10
11typedef struct {
12 GLuint program;
13 GLuint vao;
16
18 allocator_t temporary_allocator) {
21
22 glUseProgram(ptr->program);
23 glBindVertexArray(ptr->vao);
24 glBindBuffer(GL_ARRAY_BUFFER, _gl_quad_vbo);
25
26 image_bind(ptr->image);
27 GLint sampler_location = glGetUniformLocation(ptr->program, "sSampler");
28 glUniform1i(sampler_location, 0);
29 GLint tilemap_size = glGetUniformLocation(ptr->program, "tilemapSizePixels");
30 glUniform2i(tilemap_size, 128, 128);
31 GLint tilemap_tile_size =
32 glGetUniformLocation(ptr->program, "tileSizePixels");
33 glUniform2i(tilemap_tile_size, 16, 16);
34
35 entity_iter_t it =
37 while (entity_iter_next(&it)) {
40
41 for (int i = 0; i < it.entity->as_construct.blocks.size; i++) {
43
44 instance_t instance;
45 instance.position = vec2i_to_vec2(b.offset);
47
49 }
50
52
53 it.entity->as_construct.is_dirty = false;
54 }
55
56 glDrawArraysInstanced(GL_TRIANGLE_STRIP, 0, 4,
58 }
59}
60
61static const char *system_decl_render_constructs_deps[] = {
62 "system_camera_move"};
63
65 .name = "system_render_constructs",
66 .phase = SYSTEM_PHASE_RENDER,
67 .entities_const = 0,
68 .entities_mut = ENTITY_KIND_CONSTRUCT,
70 .dependency_count = 1,
71 .pin_to_main = false,
72 .resources =
74 .runner = system_render_constructs};
75
78 while (entity_iter_next(&it)) {
80
81 for (sz i = 0; i < it.entity->as_construct.blocks.size; i++) {
82 block_t *blk =
84 if (blk->kind != BLOCK_KIND_THRUSTER)
85 continue;
86 if (blk->as_thruster.throttle == 0)
87 continue;
88
89 blk->as_thruster.throttle--;
90
91 float acceleration =
92 THRUSTER_POWER * (float)blk->as_thruster.throttle / 255.f;
94 *v = vec2_add(*v, vec2_new(0, acceleration));
95 }
96 }
97}
98
100 .name = "system_tick_thrusters",
102 .entities_const = 0,
103 .entities_mut = ENTITY_KIND_CONSTRUCT,
104 .dependencies = 0,
105 .dependency_count = 0,
106 .pin_to_main = false,
107 .resources = SYSTEM_RESOURCE_MASK_WORLD,
108 .runner = system_render_constructs};
109
110#endif
#define ASSERT__(expr)
Definition defs.h:21
size_t sz
Definition defs.h:51
static int block_kind_to_tile_index(block_kind_t kind)
Definition construct.h:23
@ BLOCK_KIND_THRUSTER
Definition construct.h:14
@ ENTITY_KIND_CONSTRUCT
Definition entity.h:36
static void image_bind(image_t *image)
Definition image.h:51
static void instance_buffer_clear(instance_buffer_t *buffer)
Definition instances.h:67
static void instance_buffer_flush(instance_buffer_t *buffer)
Definition instances.h:72
static void instance_buffer_push(instance_buffer_t *buffer, instance_t instance)
Definition instances.h:58
#define list_get_ty_ptr(ty, ls, idx)
Definition list.h:128
#define list_get_ty(ty, ls, idx)
Definition list.h:130
static GLuint _gl_quad_vbo
Definition quads.h:6
static entity_iter_t system_payload_entity_iter(system_payload_t *payload)
Definition require.h:201
@ SYSTEM_RESOURCE_MASK_WORLD
Definition require.h:68
@ SYSTEM_RESOURCE_MASK_SYSTEM_SPECIFIC_DATA
Definition require.h:71
@ SYSTEM_PHASE_RENDER
Definition require.h:16
@ SYSTEM_PHASE_FIXED_UPDATE
Definition require.h:13
A generic allocator type passed by value. Contains a fallback allocator and a set of function pointer...
Definition memory.h:30
Definition construct.h:36
byte throttle
Definition construct.h:46
struct block_t::@0::@3 as_thruster
block_kind_t kind
Definition construct.h:37
vec2i offset
Definition construct.h:38
vec2 velocity
Definition construct.h:69
instance_buffer_t instance
Definition construct.h:66
list_t blocks
Definition construct.h:65
bool is_dirty
Definition construct.h:68
Definition world.h:111
entity_t * entity
Definition world.h:114
construct_t as_construct
Definition entity.h:53
entity_kind_t kind
Definition entity.h:44
The raw data of an image.
Definition image.h:10
sz size
Definition instances.h:24
Definition instances.h:10
vec2 position
Definition instances.h:12
u32 tile_index
Definition instances.h:11
sz size
Definition list.h:17
Definition construct.h:11
GLuint program
Definition construct.h:12
GLuint vao
Definition construct.h:13
image_t * image
Definition construct.h:14
Definition require.h:51
void * system_specific_data
Definition require.h:52
world_t * world
Definition require.h:53
Definition require.h:74
Definition require.h:89
const char * name
Definition require.h:90
Definition vec2.h:11
static void system_tick_thrusters(system_req_t payload, allocator_t _)
Definition construct.h:76
static void system_render_constructs(system_payload_t payload, allocator_t temporary_allocator)
Definition construct.h:17
static const char * system_decl_render_constructs_deps[]
Definition construct.h:61
static system_requirements_declaration_t system_decl_render_constructs
Definition construct.h:64
#define THRUSTER_POWER
Definition construct.h:9
static system_requirements_declaration_t system_decl_tick_thrusters
Definition construct.h:99
static vec2 vec2_new(float x, float y)
{.x = x, .y = y}
Definition vec2.h:21
static vec2 vec2i_to_vec2(vec2i v)
{.x = (int)v.x, .y = (int)v.y)
Definition vec2i.h:23
static entity_iter_t world_entity_iter_masked(world_t *world, entity_kind_mask_t mask)
Definition world.h:127
static bool entity_iter_next(entity_iter_t *it)
Definition world.h:137