Adding Sprite Animation (untested {no sprite sheet}) [running]
This commit is contained in:
parent
23a40216de
commit
b7ddc3f292
6 changed files with 160 additions and 33 deletions
|
@ -21,6 +21,7 @@ target_compile_definitions(alyson PRIVATE ASSETS_PATH="${ASSETS_PATH}")
|
||||||
|
|
||||||
# Add alyson files
|
# Add alyson files
|
||||||
find_files(alyson_src src cpp hpp cxx hxx c h)
|
find_files(alyson_src src cpp hpp cxx hxx c h)
|
||||||
|
|
||||||
target_sources(alyson PRIVATE ${alyson_src})
|
target_sources(alyson PRIVATE ${alyson_src})
|
||||||
|
|
||||||
# set(ALYSON_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/alyson/include)
|
# set(ALYSON_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/alyson/include)
|
||||||
|
|
38
alyson/includes/animation/sprite.h
Normal file
38
alyson/includes/animation/sprite.h
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
#ifndef ANIMATION_SPRITE_H
|
||||||
|
#define ANIMATION_SPRITE_H
|
||||||
|
|
||||||
|
#include <raylib.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
Texture2D texture;
|
||||||
|
Vector2 dimentions;
|
||||||
|
|
||||||
|
Rectangle sourceRect;
|
||||||
|
Vector2 size;
|
||||||
|
float rotation;
|
||||||
|
float scale;
|
||||||
|
|
||||||
|
int frameCount;
|
||||||
|
int currentFrame;
|
||||||
|
|
||||||
|
float speed;
|
||||||
|
float time;
|
||||||
|
} sprite_animation_t, *SpriteAnimation;
|
||||||
|
|
||||||
|
SpriteAnimation CreateSpriteAnimation(Texture2D texture, Vector2 sprite_texture_dimentions, Vector2 sprite_size, float rotation, float scale, int frameCount);
|
||||||
|
|
||||||
|
void UpdateSpriteAnimation(SpriteAnimation spriteAnimation, float dt);
|
||||||
|
|
||||||
|
void DrawSpriteAnimation(SpriteAnimation spriteAnimation, Vector2 position);
|
||||||
|
|
||||||
|
void DestroySpriteAnimation(SpriteAnimation spriteAnimation);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ANIMATION_SPRITE_H
|
|
@ -1,42 +1,47 @@
|
||||||
#ifndef RLYSON_HPP
|
#ifndef RLYSON_HPP
|
||||||
#define RLYSON_HPP
|
#define RLYSON_HPP
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#include <raylib.h>
|
#include <raylib.h>
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
the following functions are not part of the raylib API,
|
the following functions are not part of the raylib API,
|
||||||
but are used by alyson and can be used by other projects using alyson
|
but are used by alyson and can be used by other projects using alyson
|
||||||
*/
|
*/
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
TEXT_ORIENTATION_LEFT,
|
TEXT_ORIENTATION_LEFT,
|
||||||
TEXT_ORIENTATION_RIGHT,
|
TEXT_ORIENTATION_RIGHT,
|
||||||
TEXT_ORIENTATION_CENTER
|
TEXT_ORIENTATION_CENTER
|
||||||
} text_orientation_t;
|
} text_orientation_t;
|
||||||
|
|
||||||
/*
|
|
||||||
* Draws a text with all possible parameters
|
|
||||||
* @function DrawTextFull
|
|
||||||
* @param font Font to use
|
|
||||||
* @param text Text to draw
|
|
||||||
* @param origin Position to draw the text from
|
|
||||||
* @param orientation Text orientation
|
|
||||||
* @param fontSize Font size
|
|
||||||
* @param spacing Spacing between letters
|
|
||||||
* @param lineSpacing Line spacing
|
|
||||||
* @param tint Tint of the text
|
|
||||||
*/
|
|
||||||
void DrawTextFull(
|
void DrawTextFull(
|
||||||
Font font,
|
Font font,
|
||||||
const char *text,
|
const char* text,
|
||||||
Vector2 origin,
|
Vector2 origin,
|
||||||
text_orientation_t orientation,
|
text_orientation_t orientation,
|
||||||
float fontSize,
|
float rotation,
|
||||||
float spacing,
|
float fontSize,
|
||||||
float lineSpacing,
|
float spacing,
|
||||||
Color tint
|
float lineSpacing,
|
||||||
|
Color tint
|
||||||
);
|
);
|
||||||
|
|
||||||
|
#ifndef RLAYSON_NO_ANIMATION
|
||||||
|
#include <animation/sprite.h>
|
||||||
|
// other animation types
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#endif // RLYSON_HPP
|
#endif // RLYSON_HPP
|
|
@ -31,7 +31,14 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
BeginDrawing();
|
BeginDrawing();
|
||||||
DrawTexture(logo, GetScreenWidth() / 2 - logo.width / 2, GetScreenHeight() / 2 - logo.height / 2, WHITE);
|
DrawTexture(logo, GetScreenWidth() / 2 - logo.width / 2, GetScreenHeight() / 2 - logo.height / 2, WHITE);
|
||||||
DrawTextFull(GetFontDefault(), WINDOW_TITLE, { GetScreenWidth() / 2.f, GetScreenHeight() - 60.f }, TEXT_ORIENTATION_CENTER, 40.f, 0.f, 0.f, WHITE);
|
DrawTextFull(
|
||||||
|
GetFontDefault(),
|
||||||
|
WINDOW_TITLE,
|
||||||
|
{ GetScreenWidth() / 2.f, GetScreenHeight() - 60.f },
|
||||||
|
TEXT_ORIENTATION_CENTER, 0.f,
|
||||||
|
40.f, 5.f,
|
||||||
|
0.f, BLACK
|
||||||
|
);
|
||||||
|
|
||||||
ClearBackground(RAYWHITE);
|
ClearBackground(RAYWHITE);
|
||||||
EndDrawing();
|
EndDrawing();
|
||||||
|
|
58
alyson/src/animation/sprite.c
Normal file
58
alyson/src/animation/sprite.c
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
#include <animation/sprite.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "raylib.h"
|
||||||
|
#include "raymath.h"
|
||||||
|
|
||||||
|
SpriteAnimation CreateSpriteAnimation(Texture2D texture, Vector2 sprite_texture_dimentions, Vector2 sprite_size, float rotation, float scale, int frameCount) {
|
||||||
|
SpriteAnimation spriteAnimation = malloc(sizeof(sprite_animation_t));
|
||||||
|
spriteAnimation->texture = texture;
|
||||||
|
spriteAnimation->dimentions = sprite_texture_dimentions;
|
||||||
|
spriteAnimation->sourceRect = (Rectangle){0, 0, sprite_size.x, sprite_size.y};
|
||||||
|
spriteAnimation->size = sprite_size;
|
||||||
|
spriteAnimation->rotation = rotation;
|
||||||
|
spriteAnimation->scale = scale;
|
||||||
|
spriteAnimation->frameCount = frameCount;
|
||||||
|
spriteAnimation->currentFrame = 0;
|
||||||
|
spriteAnimation->time = 0.f;
|
||||||
|
spriteAnimation->speed = 1.f;
|
||||||
|
|
||||||
|
return spriteAnimation;
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateSpriteAnimation(SpriteAnimation self, float dt) {
|
||||||
|
self->time += dt;
|
||||||
|
if (self->time >= self->speed) {
|
||||||
|
self->time = 0.f;
|
||||||
|
self->currentFrame++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(self->currentFrame >= self->frameCount) {
|
||||||
|
self->currentFrame = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
self->sourceRect.x = (self->currentFrame * (int)self->size.x) % (int)self->dimentions.x;
|
||||||
|
self->sourceRect.y = (self->currentFrame * (int)self->size.y) % (int)self->dimentions.y;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrawSpriteAnimation(SpriteAnimation spriteAnimation, Vector2 position) {
|
||||||
|
Vector2 drawpos = Vector2Add(position, Vector2Scale(spriteAnimation->size, 2.f));
|
||||||
|
DrawTexturePro(
|
||||||
|
spriteAnimation->texture,
|
||||||
|
(Rectangle){
|
||||||
|
spriteAnimation->sourceRect.x,
|
||||||
|
spriteAnimation->sourceRect.y,
|
||||||
|
spriteAnimation->sourceRect.width,
|
||||||
|
spriteAnimation->sourceRect.height
|
||||||
|
},
|
||||||
|
(Rectangle){
|
||||||
|
position.x,
|
||||||
|
position.y,
|
||||||
|
spriteAnimation->size.x * spriteAnimation->scale,
|
||||||
|
spriteAnimation->size.y * spriteAnimation->scale
|
||||||
|
},
|
||||||
|
position,
|
||||||
|
spriteAnimation->rotation,
|
||||||
|
WHITE
|
||||||
|
);
|
||||||
|
}
|
|
@ -1,10 +1,15 @@
|
||||||
|
|
||||||
#include <rlyson.h>
|
#include <rlyson.h>
|
||||||
|
|
||||||
|
#include "raylib.h"
|
||||||
|
#include "raymath.h"
|
||||||
|
|
||||||
void DrawTextFull(
|
void DrawTextFull(
|
||||||
Font font,
|
Font font,
|
||||||
const char *text,
|
const char *text,
|
||||||
Vector2 origin,
|
Vector2 origin,
|
||||||
text_orientation_t orientation,
|
text_orientation_t orientation,
|
||||||
|
float rotation,
|
||||||
float fontSize,
|
float fontSize,
|
||||||
float spacing,
|
float spacing,
|
||||||
float lineSpacing,
|
float lineSpacing,
|
||||||
|
@ -13,16 +18,29 @@ void DrawTextFull(
|
||||||
{
|
{
|
||||||
Vector2 textSize = MeasureTextEx(font, text, fontSize, spacing);
|
Vector2 textSize = MeasureTextEx(font, text, fontSize, spacing);
|
||||||
|
|
||||||
|
DrawCircleV(origin, 10, RED);
|
||||||
|
|
||||||
|
Vector2 pos = origin;
|
||||||
|
origin = (Vector2){0,0};
|
||||||
|
|
||||||
switch (orientation) {
|
switch (orientation) {
|
||||||
case TEXT_ORIENTATION_LEFT:
|
case TEXT_ORIENTATION_LEFT:
|
||||||
origin.x -= textSize.x;
|
|
||||||
break;
|
|
||||||
case TEXT_ORIENTATION_RIGHT:
|
|
||||||
origin.x += textSize.x;
|
origin.x += textSize.x;
|
||||||
break;
|
break;
|
||||||
|
case TEXT_ORIENTATION_RIGHT:
|
||||||
|
break;
|
||||||
case TEXT_ORIENTATION_CENTER:
|
case TEXT_ORIENTATION_CENTER:
|
||||||
origin.x -= textSize.x / 2;
|
origin.x += (textSize.x / 2);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
DrawTextPro(font, text, textSize, origin, 0, spacing, lineSpacing, tint);
|
|
||||||
|
origin.y += textSize.y / 2;
|
||||||
|
|
||||||
|
DrawCircleV(Vector2Add(origin, pos), 10, DARKGREEN);
|
||||||
|
|
||||||
|
SetTextLineSpacing(lineSpacing);
|
||||||
|
|
||||||
|
DrawTextPro(font, text, pos, origin, rotation, fontSize, spacing, tint);
|
||||||
}
|
}
|
Loading…
Reference in a new issue