summaryrefslogtreecommitdiff
path: root/sprite.gd
diff options
context:
space:
mode:
authorDaniel Weipert <git@mail.dweipert.de>2024-12-13 14:53:38 +0100
committerDaniel Weipert <git@mail.dweipert.de>2024-12-13 14:53:38 +0100
commitca4d1945598863d0ce297f4272317e5dd5797f88 (patch)
treec2675b394140a71c7eee04034f087c107dcd7c9c /sprite.gd
parenta22381eff3bf2286ee27f4d15ddf4c431ea063be (diff)
next commit
Diffstat (limited to 'sprite.gd')
-rw-r--r--sprite.gd92
1 files changed, 0 insertions, 92 deletions
diff --git a/sprite.gd b/sprite.gd
deleted file mode 100644
index 745a86d..0000000
--- a/sprite.gd
+++ /dev/null
@@ -1,92 +0,0 @@
-class_name Sprite
-extends Node2D
-
-
-@export var sprite_data: SpriteResource
-var action_data: ActionFormat
-
-var current_action_idx := 0
-var current_frame := 0
-var current_start_time := 0.0
-var accumulator := 0.0
-
-var cache: Dictionary
-
-
-func _ready() -> void:
- if not sprite_data or not action_data:
- set_process(false)
-
-
-func load_file(path: String):
- var basename = path.get_basename()
-
- sprite_data = load("%s/sprite.tres" % basename)
-
- var act = FileAccess.open("%s.act" % basename, FileAccess.READ)
- action_data = ActionFormat.from_bytes(ByteStream.from_bytes(
- act.get_buffer(act.get_length())
- ))
-
- set_process(true)
- set_current_action(0)
-
-
-func set_current_action(idx: int):
- current_action_idx = idx
- current_frame = 0
- current_start_time = 0
- accumulator = 0
-
- update(action_data.actions[current_action_idx].motions[current_frame].sprite_layers)
-
-
-func _process(delta: float) -> void:
- var action = action_data.actions[current_action_idx]
- var frame_time = ((action_data.frame_times[current_action_idx] * 24) / 1000)
-
- accumulator += delta
- if accumulator > current_start_time + frame_time:
- var motion: ActionFormat.Motion = action.motions[current_frame]
- update(motion.sprite_layers)
-
- current_start_time = accumulator
- current_frame += 1
- if current_frame >= action.motions.size():
- set_current_action(current_action_idx) # reset current action
-
-
-func update(sprite_layers: Array[ActionFormat.SpriteLayer]):
- if not is_processing():
- return
-
- var has_different_layer_count = %SpriteLayers.get_child_count() != sprite_layers.size()
-
- if has_different_layer_count:
- for node in %SpriteLayers.get_children():
- node.queue_free()
-
- for idx in sprite_layers.size():
- var sprite_layer = sprite_layers[idx]
- var image = sprite_data.images[sprite_layer.sprite_index]
-
- var sprite: Sprite2D
- if has_different_layer_count:
- sprite = Sprite2D.new()
- sprite.centered = false # 必要!!
- sprite.texture_filter = CanvasItem.TEXTURE_FILTER_NEAREST
- else:
- sprite = %SpriteLayers.get_child(idx)
-
- sprite.texture = image
- sprite.position = sprite_layer.get_position() - ceil(sprite_layer.get_size() / 2) # for fixing half pixel drawing
- sprite.self_modulate = sprite_layer.get_color()
- sprite.scale = sprite_layer.get_scale()
- sprite.rotation_degrees = sprite_layer.rotation_degrees
- sprite.flip_h = sprite_layer.flip_h
-
- # TODO: use sprite and action together to generate AnimatedSprite2D with SpriteFrame Resources?
- # TODO: no. needs AnimationPlayer with config for different sprite positions in the animation
-
- if has_different_layer_count:
- %SpriteLayers.add_child(sprite)