summaryrefslogtreecommitdiffhomepage
path: root/src/player.c
blob: 7804c59a6366f008cf56bdda2c4ce8bba75dfa2c (plain)
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
#include "rodeo.h"
#include "input.h"
#include "player.h"
#include "rodeo/collision.h"
#include "sprite.h"

static rodeo_texture_2d_t player_texture;
static sprite_t player_sprite = {
	.iter = 0,
	.config = {
		.width = 128,
		.height = 128,
		.count = 61
	}
};
static world_id player_collision_id;
static rodeo_collision_2d_world_t player_collision_world;

static float orc_size[] = {13.0f * 2.0f, 19.0f * 2.0f};

void
init_player(void)
{
	//player_texture = rodeo_texture_2d_create_from_path(cstr_lit("assets/orc.png"));
	player_texture = rodeo_texture_2d_create_from_path(cstr_lit("assets/mainblob-128.png"));
	player_sprite.config.texture = &player_texture;
	player_collision_world = rodeo_collision_2d_world_create();
	player_collision_id = rodeo_collision_2d_world_item_create(
		&player_collision_world,
		(rodeo_collision_2d_world_item_t){
			.x = 100,
			.y = 100,
			.width = orc_size[0],
			.height = orc_size[1]
		}
	)->id;
}

void
deinit_player(void)
{
	rodeo_texture_2d_destroy(&player_texture);
	rodeo_collision_2d_world_destroy(&player_collision_world);
}

void
draw_player(void)
{
	cvec_collision_2d_world_item_value *player = rodeo_collision_2d_world_item_get_by_id(player_collision_id);
	draw_sprite(&player_sprite, player->x, player->y, 0.25f);
	/*
	   rodeo_texture_2d_draw(
			&(rodeo_rectangle_t){
				.x = (float)(int32_t)player->x - (orc_size[0] / 2.0f),
				.y = (float)(int32_t)player->y - (orc_size[1] / 2.0f) ,
				.width = orc_size[0],
				.height = orc_size[1],
			},
			&(rodeo_rectangle_t){
				.x = 5,
				.y = 5,
				.width = 13,
				.height = 19
			},
			NULL,
			&player_texture
		);
		*/
}

void
parse_player_input(void)
{
	cvec_collision_2d_world_item_value *player = rodeo_collision_2d_world_item_get_by_id(player_collision_id);
	bool reset_movement = true;
	units_move_up_input(NULL, &reset_movement);
	units_move_down_input(NULL, &reset_movement);
	units_move_left_input(NULL, &reset_movement);
	units_move_right_input(NULL, &reset_movement);
	player->dx = *(float*)units_move_right_input(NULL, NULL) + *(float*)units_move_left_input(NULL, NULL);
	player->dy = *(float*)units_move_down_input(NULL, NULL) + *(float*)units_move_up_input(NULL, NULL);
}

void
move_player(void)
{
	player_sprite.iter += 1;
	player_sprite.iter %= player_sprite.config.count;
	cvec_collision_2d_world_item_value *player = rodeo_collision_2d_world_item_get_by_id(player_collision_id);
	player->x += player->dx;
	player->dx = 0;
	player->y += player->dy;
	player->dy = 0;
}

void
player_shoot(rodeo_collision_2d_world_t *bullet_collision_world)
{
	cvec_collision_2d_world_item_value *player = rodeo_collision_2d_world_item_get_by_id(player_collision_id);
	const uint32_t bullet_per_frame = 10;
	for(uint32_t i = 0; i < bullet_per_frame; ++i)
	{
		rodeo_collision_2d_world_item_create(
				bullet_collision_world,
				(rodeo_collision_2d_world_item_t){
				.x = (float)player->x - (orc_size[0] / 2.0f),
				.y = (float)player->y - (orc_size[1] / 2.0f),
				.dx = (float)((int8_t)(rodeo_random_uint64_get() % 10) - 5),
				.dy = (float)((int8_t)(rodeo_random_uint64_get() % 10) - 5),
				.width = 25.0f,
				.height = 25.0f
				}
				);
	}
}