12var requests_recorded:int = 0
16func draw_sprite(canvas:CanvasItem, sprite_manager, sprite_id:String, rect:Rect2, options:Dictionary = {}) -> bool:
18 if canvas == null
or sprite_manager == null
or sprite_id ==
"":
20 _draw_fallback_rect(canvas, rect, options)
22 var metadata = options.get(
"manifest", {})
23 if sprite_manager.has_method(
"record_sprite_request"):
24 sprite_manager.record_sprite_request(sprite_id, metadata
if metadata
is Dictionary
else {})
25 requests_recorded += 1
26 var texture = sprite_manager.get_texture(sprite_id)
if sprite_manager.has_method(
"get_texture")
else null
29 _draw_fallback_rect(canvas, rect, options)
31 var modulate:Color =
Color(options.get(
"modulate", Color.WHITE))
32 var rotation:float =
float(options.get(
"rotation", 0.0))
33 if abs(rotation) > 0.0001:
35 canvas.draw_set_transform(rect.get_center(), rotation, Vector2.ONE)
36 canvas.draw_texture_rect(texture, Rect2(-rect.size * 0.5, rect.size), false, modulate)
37 canvas.draw_set_transform(Vector2.ZERO, 0.0, Vector2.ONE)
39 canvas.draw_texture_rect(texture, rect, false, modulate)
45func draw_sprite_with_fallback(canvas:CanvasItem, sprite_manager, sprite_ids:Array, rect:Rect2, options:Dictionary = {}) -> bool:
46 for sprite_id
in sprite_ids:
49 var id = str(sprite_id)
52 var sprite_options = options.duplicate(true)
53 sprite_options[
"draw_fallback"] = false
54 if draw_sprite(canvas, sprite_manager, id, rect, sprite_options):
56 _draw_fallback_rect(canvas, rect, options)
61func draw_directional_sprite(canvas:CanvasItem, sprite_manager, sprite_ids:Array, rect:Rect2, direction:Vector2, base_direction:String =
"right", options:Dictionary = {}) -> bool:
62 var rotation:float = 0.0
63 if sprite_manager != null
and sprite_manager.has_method(
"rotation_for_vector"):
64 rotation = sprite_manager.rotation_for_vector(direction, base_direction)
65 var next_options:Dictionary = options.duplicate(true)
66 next_options[
"rotation"] = rotation +
float(options.get(
"rotation_offset", 0.0))
67 return draw_sprite_with_fallback(canvas, sprite_manager, sprite_ids, rect, next_options)
70func _draw_fallback_rect(canvas:CanvasItem, rect:Rect2, options:Dictionary) -> void:
71 if canvas == null
or not bool(options.get(
"draw_fallback", true)):
74 canvas.draw_rect(rect,
Color(options.get(
"fallback_color", Color.WHITE)), true)
78func reset_stats() -> void:
88func get_cache_stats() -> Dictionary:
92func get_stats() -> Dictionary:
94 "draw_calls": draw_calls,
95 "sprite_hits": sprite_hits,
96 "fallbacks": fallbacks,
99 "requests_recorded": requests_recorded