2025-04-30 21:31:31 +02:00
|
|
|
extends Resource
|
|
|
|
class_name SpriteData
|
|
|
|
|
|
|
|
@export var anim_speed = 0
|
|
|
|
@export var clipped = false
|
|
|
|
@export var costume_layers: Array[bool] = [true, true, true, true, true, true, true, true, true, true]
|
2025-04-30 23:39:00 +02:00
|
|
|
@export var drag_speed = 0
|
2025-04-30 21:31:31 +02:00
|
|
|
@export var frames = 1
|
|
|
|
@export var ignore_bounce = false
|
2025-04-30 23:39:00 +02:00
|
|
|
#@export_global_file var path = ""
|
2025-04-30 21:31:31 +02:00
|
|
|
@export var image: Texture
|
|
|
|
@export var offset = Vector2(0, 0)
|
|
|
|
@export var pos = Vector2(0, 0)
|
|
|
|
@export var r_limit_max = 180
|
|
|
|
@export var r_limit_min = -180
|
|
|
|
@export var rot_drag = 0
|
|
|
|
@export var show_blink = 0
|
|
|
|
@export var show_talk = 0
|
2025-04-30 23:39:00 +02:00
|
|
|
@export var stretch_amount = 0.0
|
|
|
|
@export var x_amp: float = 0
|
|
|
|
@export var x_frq: float = 0
|
|
|
|
@export var y_amp: float = 0
|
|
|
|
@export var y_frq: float = 0
|
|
|
|
@export var zindex = 0
|
2025-04-30 21:31:31 +02:00
|
|
|
@export var children: Array[SpriteData] = []
|
2025-04-30 23:39:00 +02:00
|
|
|
var legacy_id
|
|
|
|
var legacy_parent_id
|
|
|
|
|
|
|
|
static func from_legacy_dict(data: Dictionary) -> SpriteData:
|
|
|
|
var sprite = new()
|
|
|
|
|
|
|
|
sprite.anim_speed = data.get("animSpeed", sprite.anim_speed)
|
|
|
|
sprite.clipped = data.get("clipped", sprite.clipped)
|
|
|
|
|
|
|
|
if "costumeLayers" in data:
|
|
|
|
var layers: Array[bool] = []
|
|
|
|
for l in str_to_var(data["costumeLayers"]):
|
|
|
|
layers.append(l == 1) # .map doesn't result in a typed array :/
|
|
|
|
sprite.costume_layers = layers
|
|
|
|
|
|
|
|
sprite.drag_speed = data.get("drag", sprite.drag_speed)
|
|
|
|
sprite.frames = data.get("frames", sprite.frames)
|
|
|
|
sprite.ignore_bounce = data.get("ignoreBounce", sprite.ignore_bounce)
|
|
|
|
|
|
|
|
if "path" in data:
|
|
|
|
sprite.image = Image.load_from_file(data["path"])
|
|
|
|
if sprite.image == null:
|
|
|
|
if "imageData" not in data: return null
|
|
|
|
var image = Image.new()
|
|
|
|
var error = image.load_png_from_buffer(Marshalls.base64_to_raw(data["imageData"]))
|
|
|
|
if error != OK:
|
|
|
|
return null
|
|
|
|
|
|
|
|
|
|
|
|
sprite.offset = legacy_get_from_string(data, "offset", sprite.offset)
|
|
|
|
sprite.pos = legacy_get_from_string(data, "pos", sprite.pos)
|
|
|
|
sprite.r_limit_max = data.get("rLimitMax", sprite.r_limit_max)
|
|
|
|
sprite.r_limit_min = data.get("rLimitMin", sprite.r_limit_min)
|
|
|
|
sprite.rot_drag = data.get("rotDrag", sprite.rot_drag)
|
|
|
|
sprite.show_blink = data.get("showBlink", sprite.show_blink)
|
|
|
|
sprite.show_talk = data.get("showTalk", sprite.show_talk)
|
|
|
|
sprite.stretch_amount = data.get("stretchAmount", sprite.stretch_amount)
|
|
|
|
sprite.x_amp = data.get("xAmp", sprite.x_amp)
|
|
|
|
sprite.x_frq = data.get("xFrq", sprite.x_frq)
|
|
|
|
sprite.y_amp = data.get("yAmp", sprite.y_amp)
|
|
|
|
sprite.y_frq = data.get("yFrq", sprite.y_frq)
|
|
|
|
sprite.zindex = data.get("zindex", sprite.zindex)
|
|
|
|
|
|
|
|
sprite.legacy_id = data.get("identification")
|
|
|
|
sprite.legacy_parent_id = data.get("parentId")
|
|
|
|
|
|
|
|
return sprite
|
|
|
|
|
|
|
|
static func legacy_get_from_string(data: Dictionary, index: String, default: Variant) -> Variant:
|
|
|
|
if index in data:
|
|
|
|
return str_to_var(data[index])
|
|
|
|
return default
|