Skip to content

Commit

Permalink
improved sprite interface
Browse files Browse the repository at this point in the history
  • Loading branch information
PaoloMazzon committed Feb 8, 2023
1 parent d11c30f commit 7b550c6
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 0 deletions.
21 changes: 21 additions & 0 deletions docs/classes/Sprite.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ world will be drawn with sprites.
+ [from](#from)
+ [free](#free)
+ [copy](#copy)
+ [frame](#frame-getter)
+ [frame=](#frame-setter)
+ [frame_count](#frame_count)
+ [delay](#delay-setter)
+ [delay=](#delay-setter)
+ [origin_x](#origin_x-setter)
Expand Down Expand Up @@ -70,6 +73,24 @@ using copies.
> that everything uses will result in that transformation being shown every time it is
> drawn.
## frame (Getter)
`frame`

Returns the current frame in the sprite's animations.

## frame= (Setter)
`frame=(frame)`

Parameters
+ `frame -> Num` Index of the frame to go to.

Sets the current animation frame. If `frame` is out of bounds, the frame is set to 0,
if `frame` is -1, it is set to the last frame in the animation.

## frame_count

Returns the number of frames in the animation.

## delay (getter)
`delay`

Expand Down
9 changes: 9 additions & 0 deletions prog/lib/Drawing.wren
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,15 @@ foreign class Sprite {
// texture and doesn't copy it
foreign copy()

// Returns current frame in the animation
foreign frame

// Sets the current frame
foreign frame=(frame)

// Returns the number of frames in the animations
foreign frame_count

// Gets this sprite's delay
foreign delay

Expand Down
23 changes: 23 additions & 0 deletions src/JUTypes.c
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,29 @@ void vksk_RuntimeJUSpriteFrom(WrenVM *vm) {
newspr->type = FOREIGN_SPRITE;
}

void vksk_RuntimeJUSpriteGetFrame(WrenVM *vm) {
VKSK_RuntimeForeign *spr = wrenGetSlotForeign(vm, 0);
wrenSetSlotDouble(vm, 0, spr->sprite->Internal.frame);
}

void vksk_RuntimeJUSpriteSetFrame(WrenVM *vm) {
VALIDATE_FOREIGN_ARGS(vm, FOREIGN_NUM, FOREIGN_END)
VKSK_RuntimeForeign *spr = wrenGetSlotForeign(vm, 0);
int frame = wrenGetSlotDouble(vm, 1);
if (frame == -1)
spr->sprite->Internal.frame = spr->sprite->Internal.frames - 1;
else if (frame < 0 || frame > spr->sprite->Internal.frames - 1)
spr->sprite->Internal.frame = 0;
else
spr->sprite->Internal.frame = frame;
spr->sprite->Internal.lastTime = SDL_GetPerformanceCounter();
}

void vksk_RuntimeJUSpriteGetFrameCount(WrenVM *vm) {
VKSK_RuntimeForeign *spr = wrenGetSlotForeign(vm, 0);
wrenSetSlotDouble(vm, 0, spr->sprite->Internal.frames);
}

void vksk_RuntimeJUSpriteGetDelay(WrenVM *vm) {
VKSK_RuntimeForeign *spr = wrenGetSlotForeign(vm, 0);
wrenSetSlotDouble(vm, 0, spr->sprite->delay);
Expand Down
3 changes: 3 additions & 0 deletions src/JUTypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ void vksk_RuntimeJUSpriteFinalize(void *data);
void vksk_RuntimeJUSpriteCopy(WrenVM *vm);
void vksk_RuntimeJUSpriteFrom(WrenVM *vm);
void vksk_RuntimeJUSpriteFree(WrenVM *vm);
void vksk_RuntimeJUSpriteGetFrame(WrenVM *vm);
void vksk_RuntimeJUSpriteSetFrame(WrenVM *vm);
void vksk_RuntimeJUSpriteGetFrameCount(WrenVM *vm);
void vksk_RuntimeJUSpriteGetDelay(WrenVM *vm);
void vksk_RuntimeJUSpriteSetDelay(WrenVM *vm);
void vksk_RuntimeJUSpriteGetOriginX(WrenVM *vm);
Expand Down
3 changes: 3 additions & 0 deletions src/VMConfig.c
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,9 @@ WrenForeignMethodFn vksk_WrenBindForeignMethod(WrenVM* vm, const char* module, c
BIND_METHOD("Surface", false, "free()", vksk_RuntimeVK2DSurfaceFree)
BIND_METHOD("BitmapFont", false, "free()", vksk_RuntimeJUBitmapFontFree)
BIND_METHOD("Sprite", true, "from(_,_,_,_,_,_,_)", vksk_RuntimeJUSpriteFrom)
BIND_METHOD("Sprite", false, "frame", vksk_RuntimeJUSpriteGetFrame)
BIND_METHOD("Sprite", false, "frame=(_)", vksk_RuntimeJUSpriteSetFrame)
BIND_METHOD("Sprite", false, "frame_count", vksk_RuntimeJUSpriteGetFrameCount)
BIND_METHOD("Sprite", false, "free()", vksk_RuntimeJUSpriteFree)
BIND_METHOD("Sprite", false, "copy()", vksk_RuntimeJUSpriteCopy)
BIND_METHOD("Sprite", false, "delay", vksk_RuntimeJUSpriteGetDelay)
Expand Down

0 comments on commit 7b550c6

Please sign in to comment.