Add set_sprite_clip_def for pre-resolved clip switches.
This commit is contained in:
@@ -144,6 +144,37 @@ set_sprite_clip_caches_clip_def :: proc(t: ^testing.T) {
|
|||||||
testing.expect_value(t, len(sprite.clip_def.frames), 3)
|
testing.expect_value(t, len(sprite.clip_def.frames), 3)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@(test)
|
||||||
|
set_sprite_clip_def_applies_and_guards :: proc(t: ^testing.T) {
|
||||||
|
data := make_test_character()
|
||||||
|
defer destroy_test_character(&data)
|
||||||
|
|
||||||
|
sprite := spawn_sprite(&data, {}, "idle", 0)
|
||||||
|
sprite.frame = 2
|
||||||
|
sprite.time = 0.05
|
||||||
|
|
||||||
|
once := data.def.clips["once"]
|
||||||
|
set_sprite_clip_def(&sprite, "once", once)
|
||||||
|
testing.expect_value(t, sprite.clip, "once")
|
||||||
|
testing.expect(t, sprite.has_clip, "def apply should mark clip present")
|
||||||
|
testing.expect_value(t, sprite.frame, 0)
|
||||||
|
testing.expect_value(t, sprite.time, f32(0))
|
||||||
|
testing.expect(t, !sprite.clip_def.loop, "once clip does not loop")
|
||||||
|
testing.expect_value(t, len(sprite.clip_def.frames), 3)
|
||||||
|
|
||||||
|
sprite.frame = 1
|
||||||
|
sprite.time = 0.09
|
||||||
|
set_sprite_clip_def(&sprite, "once", once)
|
||||||
|
testing.expect_value(t, sprite.frame, 1)
|
||||||
|
testing.expect_value(t, sprite.time, f32(0.09))
|
||||||
|
|
||||||
|
set_sprite_clip_def(&sprite, "empty", Clip_Def{loop = true, fps = 10, frames = nil})
|
||||||
|
testing.expect_value(t, sprite.clip, "once")
|
||||||
|
testing.expect_value(t, sprite.frame, 1)
|
||||||
|
|
||||||
|
set_sprite_clip_def(nil, "once", once)
|
||||||
|
}
|
||||||
|
|
||||||
@(test)
|
@(test)
|
||||||
spawn_sprite_valid_and_invalid :: proc(t: ^testing.T) {
|
spawn_sprite_valid_and_invalid :: proc(t: ^testing.T) {
|
||||||
data := make_test_character()
|
data := make_test_character()
|
||||||
|
|||||||
@@ -183,6 +183,17 @@ set_sprite_clip :: proc(sprite: ^Sprite, clip: string) {
|
|||||||
def, ok := character_clip(sprite.data, clip)
|
def, ok := character_clip(sprite.data, clip)
|
||||||
if !ok do return
|
if !ok do return
|
||||||
|
|
||||||
|
set_sprite_clip_def(sprite, clip, def)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Applies a pre-resolved clip without looking up the character clip map.
|
||||||
|
// Use when callers already hold Clip_Def (e.g. thrashing between known clips).
|
||||||
|
set_sprite_clip_def :: proc(sprite: ^Sprite, clip: string, def: Clip_Def) {
|
||||||
|
if sprite == nil do return
|
||||||
|
if len(def.frames) == 0 do return
|
||||||
|
|
||||||
|
if sprite.clip == clip && sprite.has_clip do return
|
||||||
|
|
||||||
sprite.clip = clip
|
sprite.clip = clip
|
||||||
sprite.clip_def = def
|
sprite.clip_def = def
|
||||||
sprite.has_clip = true
|
sprite.has_clip = true
|
||||||
|
|||||||
Reference in New Issue
Block a user