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
63 while (entity_iter_next(&it)) {
65
66 for (sz i = 0; i < it.entity->as_construct.blocks.size; i++) {
67 block_t *blk =
69 if (blk->kind != BLOCK_KIND_THRUSTER)
70 continue;
71 if (blk->as_thruster.throttle == 0)
72 continue;
73
74 blk->as_thruster.throttle--;
75
76 float acceleration =
77 THRUSTER_POWER * (float)blk->as_thruster.throttle / 255.f;
79 *v = vec2_add(*v, vec2_new(0, acceleration));
80 }
81 }
82}
83
84#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:21
@ BLOCK_KIND_THRUSTER
Definition construct.h:12
@ ENTITY_KIND_CONSTRUCT
Definition entity.h:37
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_req_entity_iter(system_req_t *req)
Definition require.h:127
A generic allocator type passed by value. Contains a fallback allocator and a set of function pointer...
Definition memory.h:30
Definition construct.h:34
byte throttle
Definition construct.h:44
struct block_t::@0::@3 as_thruster
block_kind_t kind
Definition construct.h:35
vec2i offset
Definition construct.h:36
vec2 velocity
Definition construct.h:67
instance_buffer_t instance
Definition construct.h:64
list_t blocks
Definition construct.h:63
bool is_dirty
Definition construct.h:66
Definition world.h:111
entity_t * entity
Definition world.h:114
construct_t as_construct
Definition entity.h:54
entity_kind_t kind
Definition entity.h:45
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:60
world_t * world
Definition require.h:61
Definition vec2.h:11
static void system_tick_thrusters(system_req_t payload, allocator_t _)
Definition construct.h:61
static void system_render_constructs(system_req_t payload, allocator_t temporary_allocator)
Definition construct.h:17
#define THRUSTER_POWER
Definition construct.h:9
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