Stable interface for both Animation player and Animated Sprite (#363)
Co-authored-by: Dennis Ploeger <develop@dieploegers.de>
This commit is contained in:
@@ -107,17 +107,16 @@ func _process(delta: float) -> void:
|
|||||||
last_deg = escoria.utils.get_deg_from_rad(angle)
|
last_deg = escoria.utils.get_deg_from_rad(angle)
|
||||||
last_dir = _get_dir_deg(last_deg, parent.animations)
|
last_dir = _get_dir_deg(last_deg, parent.animations)
|
||||||
|
|
||||||
var current_animation = ""
|
var animation_player: ESCAnimationPlayer = \
|
||||||
if parent.animation_sprite != null:
|
parent.get_animation_player()
|
||||||
current_animation = parent.animation_sprite.animation
|
|
||||||
|
var current_animation = animation_player.get_animation()
|
||||||
|
|
||||||
var animation_to_play = \
|
var animation_to_play = \
|
||||||
parent.animations.directions[last_dir].animation
|
parent.animations.directions[last_dir].animation
|
||||||
if current_animation != animation_to_play:
|
if current_animation != animation_to_play:
|
||||||
if parent.animation_sprite.frames.has_animation(
|
if animation_player.has_animation(animation_to_play):
|
||||||
animation_to_play
|
animation_player.play(animation_to_play)
|
||||||
):
|
|
||||||
parent.animation_sprite.play(animation_to_play)
|
|
||||||
else:
|
else:
|
||||||
current_animation = animation_to_play
|
current_animation = animation_to_play
|
||||||
escoria.logger.report_warnings(
|
escoria.logger.report_warnings(
|
||||||
@@ -241,19 +240,19 @@ func walk_stop(pos: Vector2) -> void:
|
|||||||
walk_context.target_object.interactive:
|
walk_context.target_object.interactive:
|
||||||
var orientation = walk_context.target_object.node.interaction_direction
|
var orientation = walk_context.target_object.node.interaction_direction
|
||||||
last_dir = orientation
|
last_dir = orientation
|
||||||
parent.animation_sprite.play(
|
parent.get_animation_player().play(
|
||||||
parent.animations.idles[orientation].animation
|
parent.animations.idles[orientation].animation
|
||||||
)
|
)
|
||||||
pose_scale = -1 if parent.animations.idles[orientation].mirrored else 1
|
pose_scale = -1 if parent.animations.idles[orientation].mirrored else 1
|
||||||
else:
|
else:
|
||||||
parent.animation_sprite.play(
|
parent.get_animation_player().play(
|
||||||
parent.animations.idles[last_dir].animation
|
parent.animations.idles[last_dir].animation
|
||||||
)
|
)
|
||||||
pose_scale = -1 if parent.animations.idles[last_dir].mirrored else 1
|
pose_scale = -1 if parent.animations.idles[last_dir].mirrored else 1
|
||||||
|
|
||||||
update_terrain()
|
update_terrain()
|
||||||
|
|
||||||
yield(parent.animation_sprite, "animation_finished")
|
yield(parent.get_animation_player(), "animation_finished")
|
||||||
if walk_context.target_object:
|
if walk_context.target_object:
|
||||||
escoria.logger.debug(
|
escoria.logger.debug(
|
||||||
"%s arrived at %s" % [
|
"%s arrived at %s" % [
|
||||||
@@ -399,9 +398,9 @@ func set_angle(deg: int, immediate = true) -> void:
|
|||||||
|
|
||||||
# The character may have a state animation from before, which would be
|
# The character may have a state animation from before, which would be
|
||||||
# resumed, so we immediately force the correct idle animation
|
# resumed, so we immediately force the correct idle animation
|
||||||
if parent.animation_sprite.animation != \
|
if parent.get_animation_player().get_animation() != \
|
||||||
parent.animations.idles[last_dir].animation:
|
parent.animations.idles[last_dir].animation:
|
||||||
parent.animation_sprite.play(
|
parent.get_animation_player().play(
|
||||||
parent.animations.idles[last_dir].animation
|
parent.animations.idles[last_dir].animation
|
||||||
)
|
)
|
||||||
pose_scale = -1 if parent.animations.idles[last_dir].mirrored else 1
|
pose_scale = -1 if parent.animations.idles[last_dir].mirrored else 1
|
||||||
@@ -420,10 +419,10 @@ func set_angle(deg: int, immediate = true) -> void:
|
|||||||
if dir < 0:
|
if dir < 0:
|
||||||
dir = parent.animations.dir_angles.size() - 1
|
dir = parent.animations.dir_angles.size() - 1
|
||||||
|
|
||||||
parent.animation_sprite.play(
|
parent.get_animation_player().play(
|
||||||
parent.animations.idles[dir].animation
|
parent.animations.idles[dir].animation
|
||||||
)
|
)
|
||||||
yield(parent.animation_sprite, "animation_finished")
|
yield(parent.get_animation_player(), "animation_finished")
|
||||||
pose_scale = -1 if parent.animations.idles[dir].mirrored else 1
|
pose_scale = -1 if parent.animations.idles[dir].mirrored else 1
|
||||||
|
|
||||||
update_terrain()
|
update_terrain()
|
||||||
|
|||||||
@@ -38,7 +38,8 @@ func run(command_params: Array) -> int:
|
|||||||
var obj = escoria.object_manager.objects[command_params[0]]
|
var obj = escoria.object_manager.objects[command_params[0]]
|
||||||
var anim_id = command_params[1]
|
var anim_id = command_params[1]
|
||||||
var reverse = command_params[2]
|
var reverse = command_params[2]
|
||||||
var animator = (obj.node as ESCItem).get_animation_player()
|
var animator: ESCAnimationPlayer = \
|
||||||
|
(obj.node as ESCItem).get_animation_player()
|
||||||
if reverse:
|
if reverse:
|
||||||
animator.play_backwards(anim_id)
|
animator.play_backwards(anim_id)
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -38,7 +38,8 @@ func run(command_params: Array) -> int:
|
|||||||
var obj = escoria.object_manager.objects[command_params[0]]
|
var obj = escoria.object_manager.objects[command_params[0]]
|
||||||
var anim_id = command_params[1]
|
var anim_id = command_params[1]
|
||||||
var reverse = command_params[2]
|
var reverse = command_params[2]
|
||||||
var animator = (obj.node as ESCItem).get_animation_player()
|
var animator: ESCAnimationPlayer = \
|
||||||
|
(obj.node as ESCItem).get_animation_player()
|
||||||
if reverse:
|
if reverse:
|
||||||
animator.play_backwards(anim_id)
|
animator.play_backwards(anim_id)
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -38,28 +38,16 @@ func set_state(p_state: String, immediate: bool = false):
|
|||||||
state = p_state
|
state = p_state
|
||||||
|
|
||||||
if node.has_method("get_animation_player"):
|
if node.has_method("get_animation_player"):
|
||||||
var animation_node = node.get_animation_player()
|
var animation_node: ESCAnimationPlayer = node.get_animation_player()
|
||||||
|
|
||||||
if animation_node:
|
if animation_node:
|
||||||
animation_node.stop()
|
animation_node.stop()
|
||||||
var actual_animator
|
var actual_animator
|
||||||
if animation_node is AnimationPlayer:
|
if animation_node.has_animation(p_state):
|
||||||
if animation_node.has_animation(p_state):
|
if immediate:
|
||||||
if immediate:
|
animation_node.seek_end(p_state)
|
||||||
animation_node.current_animation = p_state
|
else:
|
||||||
animation_node.seek(
|
animation_node.play(p_state)
|
||||||
animation_node.get_animation(p_state).length
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
animation_node.play(p_state)
|
|
||||||
elif animation_node is AnimatedSprite:
|
|
||||||
if animation_node.frames.has_animation(p_state):
|
|
||||||
if immediate:
|
|
||||||
animation_node.animation = p_state
|
|
||||||
animation_node.frame = \
|
|
||||||
animation_node.frames.get_frame_count(p_state)
|
|
||||||
else:
|
|
||||||
animation_node.play(p_state)
|
|
||||||
|
|
||||||
|
|
||||||
# Set the active value, thus hiding or showing the object
|
# Set the active value, thus hiding or showing the object
|
||||||
|
|||||||
139
addons/escoria-core/game/core-scripts/esc_animation_player.gd
Normal file
139
addons/escoria-core/game/core-scripts/esc_animation_player.gd
Normal file
@@ -0,0 +1,139 @@
|
|||||||
|
# An abstraction class to expose the same animation methods for noth
|
||||||
|
# AnimatedSprite and AnimationPlayer
|
||||||
|
extends Node
|
||||||
|
class_name ESCAnimationPlayer
|
||||||
|
|
||||||
|
|
||||||
|
signal animation_finished(name)
|
||||||
|
|
||||||
|
|
||||||
|
# The actual player node
|
||||||
|
var _player_node: Node
|
||||||
|
|
||||||
|
# A AnimationPlayer typed reference to the player node (for intellisense)
|
||||||
|
var _animation_player: AnimationPlayer
|
||||||
|
|
||||||
|
# A AnimationPlayer typed reference to the player node (for intellisense)
|
||||||
|
var _animated_sprite: AnimatedSprite
|
||||||
|
|
||||||
|
# Wether the player node is of type AnimationPlayer (just for convenience)
|
||||||
|
var _is_animation_player: bool = false
|
||||||
|
|
||||||
|
|
||||||
|
# Create a new animation player
|
||||||
|
#
|
||||||
|
# #### Parameters
|
||||||
|
#
|
||||||
|
# - node: The actual player node
|
||||||
|
func _init(node: Node):
|
||||||
|
_player_node = node
|
||||||
|
if node is AnimationPlayer:
|
||||||
|
_is_animation_player = true
|
||||||
|
_animation_player = node
|
||||||
|
else:
|
||||||
|
_animated_sprite = node
|
||||||
|
|
||||||
|
|
||||||
|
# Return the currently playing animation
|
||||||
|
# **Returns** the currently playing animation name
|
||||||
|
func get_animation() -> String:
|
||||||
|
if _is_animation_player:
|
||||||
|
return _animation_player.current_animation
|
||||||
|
else:
|
||||||
|
return _animated_sprite.animation
|
||||||
|
|
||||||
|
|
||||||
|
# Returns a list of all animation names
|
||||||
|
# **Returns** A list of all animation names
|
||||||
|
func get_animations() -> PoolStringArray:
|
||||||
|
if _is_animation_player:
|
||||||
|
return _animation_player.get_animation_list()
|
||||||
|
else:
|
||||||
|
return _animated_sprite.frames.get_animation_names()
|
||||||
|
|
||||||
|
|
||||||
|
# Wether the animation is playing
|
||||||
|
# **Returns: Wether the animation is playing**
|
||||||
|
func is_playing() -> bool:
|
||||||
|
return _player_node.is_playing()
|
||||||
|
|
||||||
|
|
||||||
|
# Stop the animation
|
||||||
|
func stop():
|
||||||
|
_player_node.stop()
|
||||||
|
|
||||||
|
|
||||||
|
# Play the animation
|
||||||
|
#
|
||||||
|
# #### Parameters
|
||||||
|
#
|
||||||
|
# - name: The animation name to play
|
||||||
|
# - backwards: Play backwards
|
||||||
|
func play(name: String, backwards: bool = false):
|
||||||
|
if _player_node.is_connected(
|
||||||
|
"animation_finished",
|
||||||
|
self,
|
||||||
|
"_on_animation_finished"
|
||||||
|
):
|
||||||
|
_player_node.disconnect(
|
||||||
|
"animation_finished",
|
||||||
|
self,
|
||||||
|
"_on_animation_finished"
|
||||||
|
)
|
||||||
|
_player_node.connect(
|
||||||
|
"animation_finished",
|
||||||
|
self,
|
||||||
|
"_on_animation_finished",
|
||||||
|
[name]
|
||||||
|
)
|
||||||
|
if backwards and _is_animation_player:
|
||||||
|
_animation_player.play_backwards(name)
|
||||||
|
elif backwards:
|
||||||
|
_animated_sprite.play(name, true)
|
||||||
|
else:
|
||||||
|
_player_node.play(name)
|
||||||
|
|
||||||
|
|
||||||
|
# Play the given animation backwards
|
||||||
|
#
|
||||||
|
# #### Parameters
|
||||||
|
#
|
||||||
|
# - name: Animation to play
|
||||||
|
func play_backwards(name: String):
|
||||||
|
self.play(name, true)
|
||||||
|
|
||||||
|
|
||||||
|
# Check if the given animation exists
|
||||||
|
#
|
||||||
|
# #### Parameters
|
||||||
|
#
|
||||||
|
# - name: Name of the animation to check
|
||||||
|
# **Returns** Wether the animation player has the animation
|
||||||
|
func has_animation(name: String) -> bool:
|
||||||
|
if _is_animation_player:
|
||||||
|
return _animation_player.has_animation(name)
|
||||||
|
else:
|
||||||
|
return _animated_sprite.frames.has_animation(name)
|
||||||
|
|
||||||
|
|
||||||
|
# Play an animation and directly skip to the end
|
||||||
|
#
|
||||||
|
# #### Parameters
|
||||||
|
#
|
||||||
|
# - name: Name of the animation to play
|
||||||
|
func seek_end(name: String):
|
||||||
|
if _is_animation_player:
|
||||||
|
_animation_player.current_animation = name
|
||||||
|
_animation_player.seek(_animation_player.get_animation(name).length)
|
||||||
|
else:
|
||||||
|
_animated_sprite.animation = name
|
||||||
|
_animated_sprite.frame = _animated_sprite.frames.get_frame_count(name)
|
||||||
|
|
||||||
|
|
||||||
|
# Transport the animation_finished signal
|
||||||
|
#
|
||||||
|
# #### Parameters
|
||||||
|
#
|
||||||
|
# - name: Name of the animation played
|
||||||
|
func _on_animation_finished(name: String):
|
||||||
|
emit_signal("animation_finished", name)
|
||||||
@@ -120,15 +120,13 @@ export(int) var speed: int = 300
|
|||||||
# Speed damp of this item if movable
|
# Speed damp of this item if movable
|
||||||
export(float) var v_speed_damp: float = 1.0
|
export(float) var v_speed_damp: float = 1.0
|
||||||
|
|
||||||
|
# The node used to play animations
|
||||||
|
export(NodePath) var animation_player_node: NodePath = "" \
|
||||||
|
setget _set_animation_player_node
|
||||||
|
|
||||||
# ESCAnimationsResource (for walking, idling...)
|
# ESCAnimationsResource (for walking, idling...)
|
||||||
var animations: ESCAnimationResource
|
var animations: ESCAnimationResource
|
||||||
|
|
||||||
# The movable subnode
|
|
||||||
var _movable: ESCMovable = null
|
|
||||||
|
|
||||||
# Reference to the animation node (null if none was found)
|
|
||||||
var animation_sprite = null
|
|
||||||
|
|
||||||
# Reference to the current terrain
|
# Reference to the current terrain
|
||||||
var terrain: ESCTerrain
|
var terrain: ESCTerrain
|
||||||
|
|
||||||
@@ -140,6 +138,13 @@ var collision: Node
|
|||||||
var inventory_item: ESCInventoryItem = null setget ,_get_inventory_item
|
var inventory_item: ESCInventoryItem = null setget ,_get_inventory_item
|
||||||
|
|
||||||
|
|
||||||
|
# The movable subnode
|
||||||
|
var _movable: ESCMovable = null
|
||||||
|
|
||||||
|
# The identified animation player
|
||||||
|
var _animation_player: ESCAnimationPlayer = null
|
||||||
|
|
||||||
|
|
||||||
# Add the movable node, connect signals, detect child nodes
|
# Add the movable node, connect signals, detect child nodes
|
||||||
# and register this item
|
# and register this item
|
||||||
func _ready():
|
func _ready():
|
||||||
@@ -194,8 +199,20 @@ func _ready():
|
|||||||
|
|
||||||
|
|
||||||
# Return the animation player node
|
# Return the animation player node
|
||||||
func get_animation_player():
|
func get_animation_player() -> Node:
|
||||||
return animation_sprite
|
if _animation_player == null:
|
||||||
|
var player_node_path = animation_player_node
|
||||||
|
if player_node_path == "":
|
||||||
|
for child in self.get_children():
|
||||||
|
if child is AnimatedSprite or \
|
||||||
|
child is AnimationPlayer:
|
||||||
|
player_node_path = child.get_path()
|
||||||
|
if not has_node(player_node_path):
|
||||||
|
escoria.logger.error(
|
||||||
|
"Can not find node at path %s" % player_node_path
|
||||||
|
)
|
||||||
|
_animation_player = ESCAnimationPlayer.new(get_node(player_node_path))
|
||||||
|
return _animation_player
|
||||||
|
|
||||||
|
|
||||||
# Return the position the player needs to walk to to interact with this
|
# Return the position the player needs to walk to to interact with this
|
||||||
@@ -327,29 +344,20 @@ func set_angle(deg: int, immediate = true):
|
|||||||
|
|
||||||
# Play the talking animation
|
# Play the talking animation
|
||||||
func start_talking():
|
func start_talking():
|
||||||
if animation_sprite.is_playing():
|
if get_animation_player().is_playing():
|
||||||
animation_sprite.stop()
|
get_animation_player().stop()
|
||||||
animation_sprite.play(animations.speaks[_movable.last_dir].animation)
|
get_animation_player().play(animations.speaks[_movable.last_dir].animation)
|
||||||
|
|
||||||
|
|
||||||
# Stop playing the talking animation
|
# Stop playing the talking animation
|
||||||
func stop_talking():
|
func stop_talking():
|
||||||
if animation_sprite.is_playing():
|
if get_animation_player().is_playing():
|
||||||
animation_sprite.stop()
|
get_animation_player().stop()
|
||||||
animation_sprite.play(animations.idles[_movable.last_dir].animation)
|
get_animation_player().play(animations.idles[_movable.last_dir].animation)
|
||||||
|
|
||||||
|
|
||||||
# Detect the child nodes and set respective references
|
# Detect the child nodes and set respective references
|
||||||
func _detect_children() -> void:
|
func _detect_children() -> void:
|
||||||
# Detect animation player
|
|
||||||
for n in get_children():
|
|
||||||
if n is AnimatedSprite:
|
|
||||||
animation_sprite = n
|
|
||||||
continue
|
|
||||||
if n is AnimationPlayer:
|
|
||||||
animation_sprite = n
|
|
||||||
continue
|
|
||||||
|
|
||||||
# Initialize collision variable.
|
# Initialize collision variable.
|
||||||
for c in get_children():
|
for c in get_children():
|
||||||
if c is CollisionShape2D or c is CollisionPolygon2D:
|
if c is CollisionShape2D or c is CollisionPolygon2D:
|
||||||
@@ -380,3 +388,23 @@ func _get_property_list():
|
|||||||
"hint_string": "ESCAnimationResource"
|
"hint_string": "ESCAnimationResource"
|
||||||
})
|
})
|
||||||
return properties
|
return properties
|
||||||
|
|
||||||
|
|
||||||
|
# Set the node path to the animation player
|
||||||
|
#
|
||||||
|
# #### Parameters
|
||||||
|
#
|
||||||
|
# - node_path: Path to the player node
|
||||||
|
func _set_animation_player_node(node_path: NodePath):
|
||||||
|
if node_path == "":
|
||||||
|
animation_player_node = node_path
|
||||||
|
return
|
||||||
|
|
||||||
|
assert(has_node(node_path), "Node with path %s not found" % node_path)
|
||||||
|
assert(
|
||||||
|
get_node(node_path) is AnimatedSprite or \
|
||||||
|
get_node(node_path) is AnimationPlayer,
|
||||||
|
"Selected node has to be an AnimatedSprite or AnimationPlayer node"
|
||||||
|
)
|
||||||
|
|
||||||
|
animation_player_node = node_path
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ var result_angles = []
|
|||||||
func _ready():
|
func _ready():
|
||||||
# Find player animations
|
# Find player animations
|
||||||
$player_animations.add_item("")
|
$player_animations.add_item("")
|
||||||
for anim_name in $player.get_animation_player.get_sprite_frames().get_animation_names():
|
for anim_name in $player.get_animation_player().get_animations():
|
||||||
$player_animations.add_item(anim_name)
|
$player_animations.add_item(anim_name)
|
||||||
|
|
||||||
# Set initial angles
|
# Set initial angles
|
||||||
|
|||||||
113
docs/api/ESCAnimationPlayer.md
Normal file
113
docs/api/ESCAnimationPlayer.md
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
<!-- Auto-generated from JSON by GDScript docs maker. Do not edit this document directly. -->
|
||||||
|
|
||||||
|
# ESCAnimationPlayer
|
||||||
|
|
||||||
|
**Extends:** [Node](../Node)
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
An abstraction class to expose the same animation methods for noth
|
||||||
|
AnimatedSprite and AnimationPlayer
|
||||||
|
|
||||||
|
## Method Descriptions
|
||||||
|
|
||||||
|
### \_init
|
||||||
|
|
||||||
|
```gdscript
|
||||||
|
func _init(node: Node)
|
||||||
|
```
|
||||||
|
|
||||||
|
Create a new animation player
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
- node: The actual player node
|
||||||
|
|
||||||
|
### get\_animation
|
||||||
|
|
||||||
|
```gdscript
|
||||||
|
func get_animation() -> String
|
||||||
|
```
|
||||||
|
|
||||||
|
Return the currently playing animation
|
||||||
|
**Returns** the currently playing animation name
|
||||||
|
|
||||||
|
### get\_animations
|
||||||
|
|
||||||
|
```gdscript
|
||||||
|
func get_animations() -> PoolStringArray
|
||||||
|
```
|
||||||
|
|
||||||
|
Returns a list of all animation names
|
||||||
|
**Returns** A list of all animation names
|
||||||
|
|
||||||
|
### is\_playing
|
||||||
|
|
||||||
|
```gdscript
|
||||||
|
func is_playing() -> bool
|
||||||
|
```
|
||||||
|
|
||||||
|
Wether the animation is playing
|
||||||
|
**Returns: Wether the animation is playing**
|
||||||
|
|
||||||
|
### stop
|
||||||
|
|
||||||
|
```gdscript
|
||||||
|
func stop()
|
||||||
|
```
|
||||||
|
|
||||||
|
Stop the animation
|
||||||
|
|
||||||
|
### play
|
||||||
|
|
||||||
|
```gdscript
|
||||||
|
func play(name: String, backwards: bool = false)
|
||||||
|
```
|
||||||
|
|
||||||
|
Play the animation
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
- name: The animation name to play
|
||||||
|
- backwards: Play backwards
|
||||||
|
|
||||||
|
### play\_backwards
|
||||||
|
|
||||||
|
```gdscript
|
||||||
|
func play_backwards(name: String)
|
||||||
|
```
|
||||||
|
|
||||||
|
Play the given animation backwards
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
- name: Animation to play
|
||||||
|
|
||||||
|
### has\_animation
|
||||||
|
|
||||||
|
```gdscript
|
||||||
|
func has_animation(name: String) -> bool
|
||||||
|
```
|
||||||
|
|
||||||
|
Check if the given animation exists
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
- name: Name of the animation to check
|
||||||
|
**Returns** Wether the animation player has the animation
|
||||||
|
|
||||||
|
### seek\_end
|
||||||
|
|
||||||
|
```gdscript
|
||||||
|
func seek_end(name: String)
|
||||||
|
```
|
||||||
|
|
||||||
|
Play an animation and directly skip to the end
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
- name: Name of the animation to play
|
||||||
|
|
||||||
|
## Signals
|
||||||
|
|
||||||
|
- signal animation_finished(name):
|
||||||
@@ -188,6 +188,14 @@ export var v_speed_damp: float = 1
|
|||||||
|
|
||||||
Speed damp of this item if movable
|
Speed damp of this item if movable
|
||||||
|
|
||||||
|
### animation\_player\_node
|
||||||
|
|
||||||
|
```gdscript
|
||||||
|
export var animation_player_node: NodePath = ""
|
||||||
|
```
|
||||||
|
|
||||||
|
The node used to play animations
|
||||||
|
|
||||||
### animations
|
### animations
|
||||||
|
|
||||||
```gdscript
|
```gdscript
|
||||||
@@ -196,14 +204,6 @@ var animations: ESCAnimationResource
|
|||||||
|
|
||||||
ESCAnimationsResource (for walking, idling...)
|
ESCAnimationsResource (for walking, idling...)
|
||||||
|
|
||||||
### animation\_sprite
|
|
||||||
|
|
||||||
```gdscript
|
|
||||||
var animation_sprite
|
|
||||||
```
|
|
||||||
|
|
||||||
Reference to the animation node (null if none was found)
|
|
||||||
|
|
||||||
### terrain
|
### terrain
|
||||||
|
|
||||||
```gdscript
|
```gdscript
|
||||||
@@ -234,7 +234,7 @@ be loaded, if inventory_item_scene_file is set.
|
|||||||
### get\_animation\_player
|
### get\_animation\_player
|
||||||
|
|
||||||
```gdscript
|
```gdscript
|
||||||
func get_animation_player()
|
func get_animation_player() -> Node
|
||||||
```
|
```
|
||||||
|
|
||||||
Return the animation player node
|
Return the animation player node
|
||||||
|
|||||||
@@ -14,99 +14,99 @@ region = Rect2( 120, 0, 24, 70 )
|
|||||||
|
|
||||||
[sub_resource type="AtlasTexture" id=2]
|
[sub_resource type="AtlasTexture" id=2]
|
||||||
atlas = ExtResource( 4 )
|
atlas = ExtResource( 4 )
|
||||||
region = Rect2( 0, 0, 24, 70 )
|
region = Rect2( 24, 0, 24, 70 )
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id=3]
|
[sub_resource type="AtlasTexture" id=3]
|
||||||
atlas = ExtResource( 2 )
|
atlas = ExtResource( 5 )
|
||||||
region = Rect2( 0, 0, 24, 70 )
|
region = Rect2( 0, 0, 24, 70 )
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id=4]
|
[sub_resource type="AtlasTexture" id=4]
|
||||||
atlas = ExtResource( 2 )
|
atlas = ExtResource( 5 )
|
||||||
region = Rect2( 24, 0, 24, 70 )
|
region = Rect2( 24, 0, 24, 70 )
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id=5]
|
[sub_resource type="AtlasTexture" id=5]
|
||||||
atlas = ExtResource( 2 )
|
atlas = ExtResource( 5 )
|
||||||
region = Rect2( 48, 0, 24, 70 )
|
region = Rect2( 48, 0, 24, 70 )
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id=6]
|
[sub_resource type="AtlasTexture" id=6]
|
||||||
|
atlas = ExtResource( 6 )
|
||||||
|
region = Rect2( 0, 0, 24, 70 )
|
||||||
|
|
||||||
|
[sub_resource type="AtlasTexture" id=7]
|
||||||
|
atlas = ExtResource( 6 )
|
||||||
|
region = Rect2( 24, 0, 24, 70 )
|
||||||
|
|
||||||
|
[sub_resource type="AtlasTexture" id=8]
|
||||||
|
atlas = ExtResource( 2 )
|
||||||
|
region = Rect2( 0, 0, 24, 70 )
|
||||||
|
|
||||||
|
[sub_resource type="AtlasTexture" id=9]
|
||||||
|
atlas = ExtResource( 2 )
|
||||||
|
region = Rect2( 24, 0, 24, 70 )
|
||||||
|
|
||||||
|
[sub_resource type="AtlasTexture" id=10]
|
||||||
|
atlas = ExtResource( 2 )
|
||||||
|
region = Rect2( 48, 0, 24, 70 )
|
||||||
|
|
||||||
|
[sub_resource type="AtlasTexture" id=11]
|
||||||
atlas = ExtResource( 4 )
|
atlas = ExtResource( 4 )
|
||||||
region = Rect2( 48, 0, 24, 70 )
|
region = Rect2( 48, 0, 24, 70 )
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id=7]
|
[sub_resource type="AtlasTexture" id=12]
|
||||||
atlas = ExtResource( 7 )
|
atlas = ExtResource( 7 )
|
||||||
region = Rect2( 0, 0, 24, 70 )
|
region = Rect2( 0, 0, 24, 70 )
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id=8]
|
[sub_resource type="AtlasTexture" id=13]
|
||||||
atlas = ExtResource( 7 )
|
atlas = ExtResource( 7 )
|
||||||
region = Rect2( 24, 0, 24, 70 )
|
region = Rect2( 24, 0, 24, 70 )
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id=9]
|
[sub_resource type="AtlasTexture" id=14]
|
||||||
atlas = ExtResource( 7 )
|
atlas = ExtResource( 7 )
|
||||||
region = Rect2( 48, 0, 24, 70 )
|
region = Rect2( 48, 0, 24, 70 )
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id=10]
|
[sub_resource type="AtlasTexture" id=15]
|
||||||
atlas = ExtResource( 7 )
|
atlas = ExtResource( 7 )
|
||||||
region = Rect2( 72, 0, 24, 70 )
|
region = Rect2( 72, 0, 24, 70 )
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id=11]
|
[sub_resource type="AtlasTexture" id=16]
|
||||||
atlas = ExtResource( 7 )
|
atlas = ExtResource( 7 )
|
||||||
region = Rect2( 96, 0, 24, 70 )
|
region = Rect2( 96, 0, 24, 70 )
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id=12]
|
[sub_resource type="AtlasTexture" id=17]
|
||||||
atlas = ExtResource( 4 )
|
atlas = ExtResource( 4 )
|
||||||
region = Rect2( 144, 0, 24, 70 )
|
region = Rect2( 144, 0, 24, 70 )
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id=13]
|
[sub_resource type="AtlasTexture" id=18]
|
||||||
atlas = ExtResource( 4 )
|
atlas = ExtResource( 4 )
|
||||||
region = Rect2( 168, 0, 24, 70 )
|
region = Rect2( 168, 0, 24, 70 )
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id=14]
|
[sub_resource type="AtlasTexture" id=19]
|
||||||
atlas = ExtResource( 4 )
|
atlas = ExtResource( 4 )
|
||||||
region = Rect2( 192, 0, 24, 70 )
|
region = Rect2( 192, 0, 24, 70 )
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id=15]
|
[sub_resource type="AtlasTexture" id=20]
|
||||||
atlas = ExtResource( 4 )
|
atlas = ExtResource( 4 )
|
||||||
region = Rect2( 216, 0, 24, 70 )
|
region = Rect2( 216, 0, 24, 70 )
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id=16]
|
[sub_resource type="AtlasTexture" id=21]
|
||||||
atlas = ExtResource( 4 )
|
atlas = ExtResource( 4 )
|
||||||
region = Rect2( 240, 0, 24, 70 )
|
region = Rect2( 240, 0, 24, 70 )
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id=17]
|
[sub_resource type="AtlasTexture" id=22]
|
||||||
atlas = ExtResource( 4 )
|
atlas = ExtResource( 4 )
|
||||||
region = Rect2( 264, 0, 24, 70 )
|
region = Rect2( 264, 0, 24, 70 )
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id=18]
|
[sub_resource type="AtlasTexture" id=23]
|
||||||
atlas = ExtResource( 4 )
|
atlas = ExtResource( 4 )
|
||||||
region = Rect2( 288, 0, 24, 70 )
|
region = Rect2( 288, 0, 24, 70 )
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id=19]
|
[sub_resource type="AtlasTexture" id=24]
|
||||||
atlas = ExtResource( 4 )
|
atlas = ExtResource( 4 )
|
||||||
region = Rect2( 312, 0, 24, 70 )
|
region = Rect2( 312, 0, 24, 70 )
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id=20]
|
|
||||||
atlas = ExtResource( 4 )
|
|
||||||
region = Rect2( 24, 0, 24, 70 )
|
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id=21]
|
|
||||||
atlas = ExtResource( 5 )
|
|
||||||
region = Rect2( 0, 0, 24, 70 )
|
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id=22]
|
|
||||||
atlas = ExtResource( 5 )
|
|
||||||
region = Rect2( 24, 0, 24, 70 )
|
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id=23]
|
|
||||||
atlas = ExtResource( 5 )
|
|
||||||
region = Rect2( 48, 0, 24, 70 )
|
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id=24]
|
|
||||||
atlas = ExtResource( 6 )
|
|
||||||
region = Rect2( 0, 0, 24, 70 )
|
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id=25]
|
[sub_resource type="AtlasTexture" id=25]
|
||||||
atlas = ExtResource( 6 )
|
atlas = ExtResource( 4 )
|
||||||
region = Rect2( 24, 0, 24, 70 )
|
region = Rect2( 0, 0, 24, 70 )
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id=26]
|
[sub_resource type="AtlasTexture" id=26]
|
||||||
atlas = ExtResource( 4 )
|
atlas = ExtResource( 4 )
|
||||||
@@ -137,49 +137,49 @@ animations = [ {
|
|||||||
}, {
|
}, {
|
||||||
"frames": [ SubResource( 2 ) ],
|
"frames": [ SubResource( 2 ) ],
|
||||||
"loop": true,
|
"loop": true,
|
||||||
"name": "idle_down",
|
|
||||||
"speed": 5.0
|
|
||||||
}, {
|
|
||||||
"frames": [ SubResource( 3 ), SubResource( 4 ), SubResource( 5 ), SubResource( 4 ), SubResource( 5 ) ],
|
|
||||||
"loop": true,
|
|
||||||
"name": "speak_down",
|
|
||||||
"speed": 6.0
|
|
||||||
}, {
|
|
||||||
"frames": [ SubResource( 6 ) ],
|
|
||||||
"loop": true,
|
|
||||||
"name": "idle_right",
|
|
||||||
"speed": 5.0
|
|
||||||
}, {
|
|
||||||
"frames": [ SubResource( 7 ), SubResource( 8 ), SubResource( 9 ), SubResource( 10 ), SubResource( 11 ) ],
|
|
||||||
"loop": true,
|
|
||||||
"name": "speak_right",
|
|
||||||
"speed": 5.0
|
|
||||||
}, {
|
|
||||||
"frames": [ SubResource( 12 ), SubResource( 13 ), SubResource( 14 ), SubResource( 13 ) ],
|
|
||||||
"loop": true,
|
|
||||||
"name": "walk_down",
|
|
||||||
"speed": 6.0
|
|
||||||
}, {
|
|
||||||
"frames": [ SubResource( 15 ), SubResource( 16 ), SubResource( 17 ), SubResource( 18 ), SubResource( 19 ) ],
|
|
||||||
"loop": true,
|
|
||||||
"name": "walk_right",
|
|
||||||
"speed": 6.0
|
|
||||||
}, {
|
|
||||||
"frames": [ SubResource( 20 ) ],
|
|
||||||
"loop": true,
|
|
||||||
"name": "idle_down_right",
|
"name": "idle_down_right",
|
||||||
"speed": 5.0
|
"speed": 5.0
|
||||||
}, {
|
}, {
|
||||||
"frames": [ SubResource( 21 ), SubResource( 22 ), SubResource( 23 ) ],
|
"frames": [ SubResource( 3 ), SubResource( 4 ), SubResource( 5 ) ],
|
||||||
"loop": true,
|
"loop": true,
|
||||||
"name": "speak_down_right",
|
"name": "speak_down_right",
|
||||||
"speed": 6.0
|
"speed": 6.0
|
||||||
}, {
|
}, {
|
||||||
"frames": [ SubResource( 24 ), SubResource( 25 ), SubResource( 24 ), SubResource( 25 ), SubResource( 25 ) ],
|
"frames": [ SubResource( 6 ), SubResource( 7 ), SubResource( 6 ), SubResource( 7 ), SubResource( 7 ) ],
|
||||||
"loop": true,
|
"loop": true,
|
||||||
"name": "speak_up",
|
"name": "speak_up",
|
||||||
"speed": 3.0
|
"speed": 3.0
|
||||||
}, {
|
}, {
|
||||||
|
"frames": [ SubResource( 8 ), SubResource( 9 ), SubResource( 10 ), SubResource( 9 ), SubResource( 10 ) ],
|
||||||
|
"loop": true,
|
||||||
|
"name": "speak_down",
|
||||||
|
"speed": 6.0
|
||||||
|
}, {
|
||||||
|
"frames": [ SubResource( 11 ) ],
|
||||||
|
"loop": true,
|
||||||
|
"name": "idle_right",
|
||||||
|
"speed": 5.0
|
||||||
|
}, {
|
||||||
|
"frames": [ SubResource( 12 ), SubResource( 13 ), SubResource( 14 ), SubResource( 15 ), SubResource( 16 ) ],
|
||||||
|
"loop": true,
|
||||||
|
"name": "speak_right",
|
||||||
|
"speed": 5.0
|
||||||
|
}, {
|
||||||
|
"frames": [ SubResource( 17 ), SubResource( 18 ), SubResource( 19 ), SubResource( 18 ) ],
|
||||||
|
"loop": true,
|
||||||
|
"name": "walk_down",
|
||||||
|
"speed": 6.0
|
||||||
|
}, {
|
||||||
|
"frames": [ SubResource( 20 ), SubResource( 21 ), SubResource( 22 ), SubResource( 23 ), SubResource( 24 ) ],
|
||||||
|
"loop": true,
|
||||||
|
"name": "walk_right",
|
||||||
|
"speed": 6.0
|
||||||
|
}, {
|
||||||
|
"frames": [ SubResource( 25 ) ],
|
||||||
|
"loop": true,
|
||||||
|
"name": "idle_down",
|
||||||
|
"speed": 5.0
|
||||||
|
}, {
|
||||||
"frames": [ SubResource( 26 ), SubResource( 27 ), SubResource( 28 ), SubResource( 27 ) ],
|
"frames": [ SubResource( 26 ), SubResource( 27 ), SubResource( 28 ), SubResource( 27 ) ],
|
||||||
"loop": true,
|
"loop": true,
|
||||||
"name": "walk_up",
|
"name": "walk_up",
|
||||||
|
|||||||
@@ -89,6 +89,11 @@ _global_script_classes=[ {
|
|||||||
"language": "GDScript",
|
"language": "GDScript",
|
||||||
"path": "res://addons/escoria-core/game/core-scripts/resources/esc_animationname.gd"
|
"path": "res://addons/escoria-core/game/core-scripts/resources/esc_animationname.gd"
|
||||||
}, {
|
}, {
|
||||||
|
"base": "Node",
|
||||||
|
"class": "ESCAnimationPlayer",
|
||||||
|
"language": "GDScript",
|
||||||
|
"path": "res://addons/escoria-core/game/core-scripts/esc_animation_player.gd"
|
||||||
|
}, {
|
||||||
"base": "Resource",
|
"base": "Resource",
|
||||||
"class": "ESCAnimationResource",
|
"class": "ESCAnimationResource",
|
||||||
"language": "GDScript",
|
"language": "GDScript",
|
||||||
@@ -486,6 +491,7 @@ _global_script_class_icons={
|
|||||||
"DecGlobalCommand": "",
|
"DecGlobalCommand": "",
|
||||||
"ESCActionManager": "",
|
"ESCActionManager": "",
|
||||||
"ESCAnimationName": "",
|
"ESCAnimationName": "",
|
||||||
|
"ESCAnimationPlayer": "",
|
||||||
"ESCAnimationResource": "",
|
"ESCAnimationResource": "",
|
||||||
"ESCBackground": "",
|
"ESCBackground": "",
|
||||||
"ESCBackgroundMusic": "",
|
"ESCBackgroundMusic": "",
|
||||||
|
|||||||
Reference in New Issue
Block a user