Add sprite rotation
parent
b01edded42
commit
ad421d724a
|
@ -43,8 +43,8 @@ int main(void)
|
||||||
DrawTextEx(*fnt, "Press C to play a sound", (Vector2){64, 64}, 24, 1, RED);
|
DrawTextEx(*fnt, "Press C to play a sound", (Vector2){64, 64}, 24, 1, RED);
|
||||||
|
|
||||||
// Draw the static Sprite and animated Sprite
|
// Draw the static Sprite and animated Sprite
|
||||||
draw_sprite(spr, (Vector2){64,128}, false);
|
draw_sprite(spr, (Vector2){64,128}, 0.0f, false);
|
||||||
draw_sprite(spr2, (Vector2){64,180}, true);
|
draw_sprite(spr2, (Vector2){64,180}, 0.0f, true);
|
||||||
EndDrawing();
|
EndDrawing();
|
||||||
|
|
||||||
// Update the animated Sprite
|
// Update the animated Sprite
|
||||||
|
|
|
@ -183,6 +183,7 @@ typedef struct Sprite {
|
||||||
Texture2D* texture;
|
Texture2D* texture;
|
||||||
Vector2 frame_size;
|
Vector2 frame_size;
|
||||||
Vector2 origin;
|
Vector2 origin;
|
||||||
|
Vector2 anchor;
|
||||||
int frame_count;
|
int frame_count;
|
||||||
int current_frame;
|
int current_frame;
|
||||||
int elapsed;
|
int elapsed;
|
||||||
|
|
|
@ -429,7 +429,7 @@ LevelPack_t* get_level_pack(Assets_t* assets, const char* name)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void draw_sprite(Sprite_t* spr, Vector2 pos, bool flip_x)
|
void draw_sprite(Sprite_t* spr, Vector2 pos, float rotation, bool flip_x)
|
||||||
{
|
{
|
||||||
Rectangle rec = {
|
Rectangle rec = {
|
||||||
spr->origin.x + spr->frame_size.x * spr->current_frame,
|
spr->origin.x + spr->frame_size.x * spr->current_frame,
|
||||||
|
@ -437,5 +437,18 @@ void draw_sprite(Sprite_t* spr, Vector2 pos, bool flip_x)
|
||||||
spr->frame_size.x * (flip_x ? -1:1),
|
spr->frame_size.x * (flip_x ? -1:1),
|
||||||
spr->frame_size.y
|
spr->frame_size.y
|
||||||
};
|
};
|
||||||
DrawTextureRec(*spr->texture, rec, pos, WHITE);
|
//DrawTextureRec(*spr->texture, rec, pos, WHITE);
|
||||||
|
Rectangle dest = {
|
||||||
|
.x = pos.x - spr->anchor.x,
|
||||||
|
.y = pos.y - spr->anchor.y,
|
||||||
|
.width = spr->frame_size.x,
|
||||||
|
.height = spr->frame_size.y
|
||||||
|
};
|
||||||
|
DrawTexturePro(
|
||||||
|
*spr->texture,
|
||||||
|
rec,
|
||||||
|
dest,
|
||||||
|
spr->anchor,
|
||||||
|
rotation, WHITE
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,7 @@ Sound* get_sound(Assets_t* assets, const char* name);
|
||||||
Font* get_font(Assets_t* assets, const char* name);
|
Font* get_font(Assets_t* assets, const char* name);
|
||||||
LevelPack_t* get_level_pack(Assets_t* assets, const char* name);
|
LevelPack_t* get_level_pack(Assets_t* assets, const char* name);
|
||||||
|
|
||||||
void draw_sprite(Sprite_t* spr, Vector2 pos, bool flip_x);
|
void draw_sprite(Sprite_t* spr, Vector2 pos, float rotation, bool flip_x);
|
||||||
|
|
||||||
typedef struct SFX
|
typedef struct SFX
|
||||||
{
|
{
|
||||||
|
|
|
@ -119,7 +119,7 @@ void draw_particle_system(ParticleSystem_t* system)
|
||||||
{
|
{
|
||||||
if (part->alive)
|
if (part->alive)
|
||||||
{
|
{
|
||||||
if (emitter->tex == NULL || emitter->tex->width == 0)
|
if (emitter->spr->texture == NULL || emitter->spr->texture->width == 0)
|
||||||
{
|
{
|
||||||
Rectangle rect = {
|
Rectangle rect = {
|
||||||
.x = part->position.x,
|
.x = part->position.x,
|
||||||
|
@ -135,21 +135,7 @@ void draw_particle_system(ParticleSystem_t* system)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Rectangle source = {
|
draw_sprite(emitter->spr, part->position, part->rotation, false);
|
||||||
0.0f, 0.0f,
|
|
||||||
(float)emitter->tex->width, (float)emitter->tex->height
|
|
||||||
};
|
|
||||||
|
|
||||||
Rectangle dest = {
|
|
||||||
part->position.x, part->position.y,
|
|
||||||
(float)emitter->tex->width, (float)emitter->tex->height
|
|
||||||
};
|
|
||||||
Vector2 origin = { (float)emitter->tex->width / 2, (float)emitter->tex->height / 2 };
|
|
||||||
DrawTexturePro(
|
|
||||||
*emitter->tex,
|
|
||||||
source, dest, origin,
|
|
||||||
part->rotation, WHITE
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include "raylib.h"
|
#include "raylib.h"
|
||||||
#include "engine_conf.h"
|
#include "engine_conf.h"
|
||||||
#include "sc_queue.h"
|
#include "sc_queue.h"
|
||||||
|
#include "assets.h"
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
@ -41,7 +42,7 @@ typedef struct ParticleEmitter
|
||||||
Vector2 position;
|
Vector2 position;
|
||||||
Particle_t particles[MAX_PARTICLES];
|
Particle_t particles[MAX_PARTICLES];
|
||||||
uint32_t n_particles;
|
uint32_t n_particles;
|
||||||
Texture2D* tex;
|
Sprite_t* spr;
|
||||||
uint32_t timer;
|
uint32_t timer;
|
||||||
bool one_shot;
|
bool one_shot;
|
||||||
bool finished;
|
bool finished;
|
||||||
|
|
|
@ -52,6 +52,17 @@ int main(void)
|
||||||
|
|
||||||
init_particle_system(&part_sys);
|
init_particle_system(&part_sys);
|
||||||
Texture2D tex = LoadTexture("res/bomb.png");
|
Texture2D tex = LoadTexture("res/bomb.png");
|
||||||
|
Sprite_t spr = {
|
||||||
|
.texture = &tex,
|
||||||
|
.frame_size = (Vector2){tex.width, tex.height},
|
||||||
|
.origin = (Vector2){0, 0},
|
||||||
|
.anchor = (Vector2){tex.width / 2, tex.height / 2},
|
||||||
|
.frame_count = 0,
|
||||||
|
.current_frame = 0,
|
||||||
|
.elapsed = 0,
|
||||||
|
.speed = 0,
|
||||||
|
.name = "test_spr"
|
||||||
|
};
|
||||||
|
|
||||||
EmitterConfig_t conf ={
|
EmitterConfig_t conf ={
|
||||||
.launch_range = {0, 360},
|
.launch_range = {0, 360},
|
||||||
|
@ -64,7 +75,7 @@ int main(void)
|
||||||
.config = conf,
|
.config = conf,
|
||||||
.n_particles = MAX_PARTICLES,
|
.n_particles = MAX_PARTICLES,
|
||||||
.one_shot = true,
|
.one_shot = true,
|
||||||
.tex = &tex,
|
.spr = &spr,
|
||||||
};
|
};
|
||||||
|
|
||||||
bool key_press = false;
|
bool key_press = false;
|
||||||
|
|
|
@ -225,7 +225,7 @@ static void render_editor_game_scene(Scene_t* scene)
|
||||||
uint8_t tile_sprite_idx = tilemap.tiles[i].tile_type + tilemap.tiles[i].rotation;
|
uint8_t tile_sprite_idx = tilemap.tiles[i].tile_type + tilemap.tiles[i].rotation;
|
||||||
if (data->tile_sprites[tile_sprite_idx] != NULL)
|
if (data->tile_sprites[tile_sprite_idx] != NULL)
|
||||||
{
|
{
|
||||||
draw_sprite(data->tile_sprites[tile_sprite_idx], (Vector2){x,y}, false);
|
draw_sprite(data->tile_sprites[tile_sprite_idx], (Vector2){x,y}, 0.0f, false);
|
||||||
}
|
}
|
||||||
else if (tilemap.tiles[i].tile_type == SOLID_TILE)
|
else if (tilemap.tiles[i].tile_type == SOLID_TILE)
|
||||||
{
|
{
|
||||||
|
@ -429,7 +429,7 @@ static void render_editor_game_scene(Scene_t* scene)
|
||||||
if (spr.sprite != NULL)
|
if (spr.sprite != NULL)
|
||||||
{
|
{
|
||||||
Vector2 pos = Vector2Add(p_ct->position, spr.offset);
|
Vector2 pos = Vector2Add(p_ct->position, spr.offset);
|
||||||
draw_sprite(spr.sprite, pos, p_cspr->flip_x);
|
draw_sprite(spr.sprite, pos, 0.0f, p_cspr->flip_x);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,7 +131,7 @@ static void render_regular_game_scene(Scene_t* scene)
|
||||||
|
|
||||||
if (data->tile_sprites[tilemap.tiles[i].tile_type] != NULL)
|
if (data->tile_sprites[tilemap.tiles[i].tile_type] != NULL)
|
||||||
{
|
{
|
||||||
draw_sprite(data->tile_sprites[tilemap.tiles[i].tile_type], (Vector2){x,y}, false);
|
draw_sprite(data->tile_sprites[tilemap.tiles[i].tile_type], (Vector2){x,y}, 0.0f, false);
|
||||||
}
|
}
|
||||||
else if (tilemap.tiles[i].tile_type == SOLID_TILE)
|
else if (tilemap.tiles[i].tile_type == SOLID_TILE)
|
||||||
{
|
{
|
||||||
|
@ -223,7 +223,7 @@ static void render_regular_game_scene(Scene_t* scene)
|
||||||
if (spr.sprite != NULL)
|
if (spr.sprite != NULL)
|
||||||
{
|
{
|
||||||
Vector2 pos = Vector2Add(p_ct->position, spr.offset);
|
Vector2 pos = Vector2Add(p_ct->position, spr.offset);
|
||||||
draw_sprite(spr.sprite, pos, p_cspr->flip_x);
|
draw_sprite(spr.sprite, pos, 0.0f, p_cspr->flip_x);
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,7 +109,7 @@ static void level_scene_render_func(Scene_t* scene)
|
||||||
if (spr.sprite != NULL)
|
if (spr.sprite != NULL)
|
||||||
{
|
{
|
||||||
Vector2 pos = Vector2Add(p_ct->position, spr.offset);
|
Vector2 pos = Vector2Add(p_ct->position, spr.offset);
|
||||||
draw_sprite(spr.sprite, pos, p_cspr->flip_x);
|
draw_sprite(spr.sprite, pos, 0.0f, p_cspr->flip_x);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue