Add ESCAnimationResource to hold characters animations. (#342)

Co-authored-by: StraToN <StraToN@users.noreply.github.com>
Co-authored-by: Dennis Ploeger <develop@dieploegers.de>
Co-authored-by: dploeger <dploeger@users.noreply.github.com>
This commit is contained in:
Julian Murgia
2021-08-03 17:48:55 +02:00
committed by GitHub
parent 56bf96da8c
commit 392dc2d607
15 changed files with 553 additions and 207 deletions

View File

@@ -113,7 +113,7 @@ func _process(delta: float) -> void:
current_animation = parent.animation_sprite.animation current_animation = parent.animation_sprite.animation
var animation_to_play = \ var animation_to_play = \
parent.animations.directions[last_dir][0] 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 parent.animation_sprite.frames.has_animation(
animation_to_play animation_to_play
@@ -132,7 +132,8 @@ func _process(delta: float) -> void:
true true
) )
pose_scale = parent.animations.directions[last_dir][1] pose_scale = -1 if parent.animations.directions[last_dir].mirrored \
else 1
update_terrain() update_terrain()
else: else:
@@ -242,12 +243,12 @@ func walk_stop(pos: Vector2) -> void:
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.animation_sprite.play(
parent.animations.idles[orientation][0] parent.animations.idles[orientation].animation
) )
pose_scale = parent.animations.idles[orientation][1] pose_scale = -1 if parent.animations.idles[orientation].mirrored else 1
else: else:
parent.animation_sprite.play(parent.animations.idles[last_dir][0]) parent.animation_sprite.play(parent.animations.idles[last_dir].animation)
pose_scale = parent.animations.idles[last_dir][1] pose_scale = -1 if parent.animations.idles[last_dir].mirrored else 1
update_terrain() update_terrain()
@@ -316,15 +317,15 @@ func update_terrain(on_event_finished_name = null) -> void:
# #
# - deg: Degrees # - deg: Degrees
# - animations: Player animations script # - animations: Player animations script
func _get_dir_deg(deg: int, animations: Script) -> int: func _get_dir_deg(deg: int, animations: ESCAnimationResource) -> int:
# We turn the angle by -90° because angle_to_point gives the angle # We turn the angle by -90° because angle_to_point gives the angle
# against X axis, not Y # against X axis, not Y
deg = wrapi(deg - 90, 0, 360) deg = wrapi(deg - 90, 0, 360)
var dir = -1 var dir = -1
var i = 0 var i = 0
for arr_angle_zone in animations.dir_angles: for direction_angle in animations.dir_angles:
if is_angle_in_interval(deg, arr_angle_zone): if is_angle_in_interval(deg, direction_angle):
dir = i dir = i
break break
else: else:
@@ -347,22 +348,23 @@ func _get_dir_deg(deg: int, animations: Script) -> int:
# #### Parameters # #### Parameters
# #
# - angle: Angle to test # - angle: Angle to test
# - interval: Array of size 2, containing the starting angle, and the size of # - direction_angle: ESCDirectionAngle resource, containing the starting angle,
# interval # and the size of interval
# eg: [90, 40] corresponds to angle between 90° and 130° # eg: angle_start=90, angle_size=40 corresponds to angle between 90° and 130°
func is_angle_in_interval(angle: float, interval: Array) -> bool: func is_angle_in_interval(angle: float, direction_angle: ESCDirectionAngle) -> bool:
angle = wrapi(angle, 0, 360) angle = wrapi(angle, 0, 360)
if angle == 0: if angle == 0:
angle = 360 angle = 360
var start_angle = wrapi(interval[0], 0, 360) var start_angle = wrapi(direction_angle.angle_start, 0, 360)
var angle_area = interval[1] var angle_area = direction_angle.angle_size
var end_angle = wrapi(interval[0] + angle_area, 0, 360) var end_angle = wrapi(direction_angle.angle_start + angle_area, 0, 360)
if ((angle >= 270 and angle <= 360) \ if ((angle >= 270 and angle <= 360) \
or (angle >= 0 and angle <= 90)) \ or (angle >= 0 and angle <= 90)) \
and wrapi(angle + 180, 0, 360) > wrapi(interval[0] + 180, 0, 360) \ and wrapi(angle + 180, 0, 360) > wrapi(direction_angle.angle_start
+ 180, 0, 360) \
and wrapi(angle + 180, 0, 360) <= wrapi( and wrapi(angle + 180, 0, 360) <= wrapi(
interval[0] + angle_area + 180, 0, 360 direction_angle.angle_start + angle_area + 180, 0, 360
): ):
return true return true
elif wrapi(angle, 0, 360) > start_angle \ elif wrapi(angle, 0, 360) > start_angle \
@@ -392,12 +394,12 @@ 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.animation_sprite.animation != \
parent.animations.idles[last_dir][0]: parent.animations.idles[last_dir].animation:
parent.animation_sprite.play(parent.animations.idles[last_dir][0]) parent.animation_sprite.play(parent.animations.idles[last_dir].animation)
pose_scale = parent.animations.idles[last_dir][1] pose_scale = -1 if parent.animations.idles[last_dir].mirrored else 1
update_terrain() update_terrain()
# Returns the angle that corresponds to the current direction of the object. # Returns the angle that corresponds to the current direction of the object.
func _get_angle() -> int: func _get_angle() -> int:
return parent.animations.dir_angles[last_dir][0] return parent.animations.dir_angles[last_dir].animation

View File

@@ -120,8 +120,8 @@ 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
# Animations script (for walking, idling...) # ESCAnimationsResource (for walking, idling...)
export(Script) var animations var animations: ESCAnimationResource
# The movable subnode # The movable subnode
var _movable: ESCMovable = null var _movable: ESCMovable = null
@@ -369,5 +369,14 @@ func _get_inventory_item() -> ESCInventoryItem:
inventory_item = inventory_item_scene_file.instance() inventory_item = inventory_item_scene_file.instance()
inventory_item.global_id = self.global_id inventory_item.global_id = self.global_id
return inventory_item return inventory_item
func _get_property_list():
var properties = []
properties.append({
"name": "animations",
"type": TYPE_OBJECT,
"hint": PROPERTY_HINT_RESOURCE_TYPE,
"hint_string": "ESCAnimationResource"
})
return properties

View File

@@ -0,0 +1,10 @@
# Class defining an animation to use for an angle.
tool
extends Resource
class_name ESCAnimationName
# Name of the animation
export(String) var animation: String
# Animation mirror (false is no mirror, true is mirrored)
export(bool) var mirrored: bool

View File

@@ -0,0 +1,58 @@
# Resource containing all defined animations and angles for
# characters movement.
tool
extends Resource
class_name ESCAnimationResource
# Array containing the different angles available for animations.
# Each angle is defined by an array [start_angle, angle_size].
# start_angle must be between 0 and 360.
# Angle 0 and 360 are the same and correspond to UP/NORTH
# 90 is RIGHT/EAST, 180 is DOWN/SOUTH, etc
var dir_angles: Array = []
# Array of animations for each direction, from UP to RIGHT_UP clockwise
# [animation_name, scale]: scale parameter can be set to -1 to mirror
# the animation
var directions: Array = []
# Array containing the idle animations for each direction (in the
# order defined by dir_angles): scale parameter can be set to -1 to mirror
# the animation
var idles: Array = []
# Array containing the speak animations for each direction (in the
# order defined by dir_angles): scale parameter can be set to -1 to mirror
# the animation
var speaks: Array = []
func _get_property_list():
var properties = []
properties.append({
"name": "dir_angles",
"type": TYPE_ARRAY,
"hint": 19,
"hint_string": "17/17:ESCDirectionAngle"
})
properties.append({
"name": "directions",
"type": TYPE_ARRAY,
"hint": 19,
"hint_string": "17/17:ESCAnimationName"
})
properties.append({
"name": "idles",
"type": TYPE_ARRAY,
"hint": 19,
"hint_string": "17/17:ESCAnimationName"
})
properties.append({
"name": "speaks",
"type": TYPE_ARRAY,
"hint": 19,
"hint_string": "17/17:ESCAnimationName"
})
return properties

View File

@@ -0,0 +1,11 @@
# Class defining an angle, with a start angle (between 0 and 360) and a size.
tool
extends Resource
class_name ESCDirectionAngle
# Start angle of the directional angle.
export(int) var angle_start: int
# Size of the angle
export(int) var angle_size: int

View File

@@ -0,0 +1,27 @@
<!-- Auto-generated from JSON by GDScript docs maker. Do not edit this document directly. -->
# ESCAnimationName
**Extends:** [Resource](../Resource)
## Description
Class defining an animation to use for an angle.
## Property Descriptions
### animation
```gdscript
export var animation: String = ""
```
Name of the animation
### mirrored
```gdscript
export var mirrored: bool = false
```
Animation mirror (false is no mirror, true is mirrored)

View File

@@ -0,0 +1,54 @@
<!-- Auto-generated from JSON by GDScript docs maker. Do not edit this document directly. -->
# ESCAnimationResource
**Extends:** [Resource](../Resource)
## Description
Resource containing all defined animations and angles for
characters movement.
## Property Descriptions
### dir\_angles
```gdscript
var dir_angles: Array
```
Array containing the different angles available for animations.
Each angle is defined by an array [start_angle, angle_size].
start_angle must be between 0 and 360.
Angle 0 and 360 are the same and correspond to UP/NORTH
90 is RIGHT/EAST, 180 is DOWN/SOUTH, etc
### directions
```gdscript
var directions: Array
```
Array of animations for each direction, from UP to RIGHT_UP clockwise
[animation_name, scale]: scale parameter can be set to -1 to mirror
the animation
### idles
```gdscript
var idles: Array
```
Array containing the idle animations for each direction (in the
order defined by dir_angles): scale parameter can be set to -1 to mirror
the animation
### speaks
```gdscript
var speaks: Array
```
Array containing the speak animations for each direction (in the
order defined by dir_angles): scale parameter can be set to -1 to mirror
the animation

View File

@@ -0,0 +1,27 @@
<!-- Auto-generated from JSON by GDScript docs maker. Do not edit this document directly. -->
# ESCDirectionAngle
**Extends:** [Resource](../Resource)
## Description
 Class defining an angle, with a start angle (between 0 and 360) and a size.
## Property Descriptions
### angle\_start
```gdscript
export var angle_start: int = 0
```
Start angle of the directional angle.
### angle\_size
```gdscript
export var angle_size: int = 0
```
Size of the angle

View File

@@ -191,10 +191,10 @@ Speed damp of this item if movable
### animations ### animations
```gdscript ```gdscript
export var animations = "[Object:null]" var animations: ESCAnimationResource
``` ```
 Animations script (for walking, idling...)  ESCAnimationsResource (for walking, idling...)
### animation\_sprite ### animation\_sprite

View File

@@ -13,7 +13,7 @@ Logging framework for Escoria
### LOG\_DEBUG ### LOG\_DEBUG
```gdscript ```gdscript
const LOG_WARNING: int = 1 const LOG_DEBUG: int = 3
``` ```
Valid log levels Valid log levels
@@ -21,7 +21,7 @@ Valid log levels
### LOG\_ERROR ### LOG\_ERROR
```gdscript ```gdscript
const LOG_WARNING: int = 1 const LOG_DEBUG: int = 3
``` ```
Valid log levels Valid log levels
@@ -29,7 +29,7 @@ Valid log levels
### LOG\_INFO ### LOG\_INFO
```gdscript ```gdscript
const LOG_WARNING: int = 1 const LOG_DEBUG: int = 3
``` ```
Valid log levels Valid log levels
@@ -37,7 +37,7 @@ Valid log levels
### LOG\_WARNING ### LOG\_WARNING
```gdscript ```gdscript
const LOG_WARNING: int = 1 const LOG_DEBUG: int = 3
``` ```
Valid log levels Valid log levels

View File

@@ -178,7 +178,7 @@ Update the sprite scale and lighting
### is\_angle\_in\_interval ### is\_angle\_in\_interval
```gdscript ```gdscript
func is_angle_in_interval(angle: float, interval: Array) -> bool func is_angle_in_interval(angle: float, direction_angle: ESCDirectionAngle) -> bool
``` ```
Returns true if given angle is inside the interval given by a starting_angle Returns true if given angle is inside the interval given by a starting_angle
@@ -187,9 +187,9 @@ and the size.
#### Parameters #### Parameters
- angle: Angle to test - angle: Angle to test
- interval: Array of size 2, containing the starting angle, and the size of - direction_angle: ESCDirectionAngle resource, containing the starting angle,
interval and the size of interval
eg: [90, 40] corresponds to angle between 90° and 130° eg: angle_start=90, angle_size=40 corresponds to angle between 90° and 130°
### set\_angle ### set\_angle

View File

@@ -1,68 +1,181 @@
[gd_scene load_steps=40 format=2] [gd_scene load_steps=75 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/esc_player.gd" type="Script" id=1] [ext_resource path="res://addons/escoria-core/game/core-scripts/esc_player.gd" type="Script" id=1]
[ext_resource path="res://game/characters/mark/png/mark_talk_down.png" type="Texture" id=2] [ext_resource path="res://game/characters/mark/png/mark_talk_down.png" type="Texture" id=2]
[ext_resource path="res://game/characters/mark/mark_anims.gd" type="Script" id=3] [ext_resource path="res://addons/escoria-core/game/core-scripts/resources/esc_animationname.gd" type="Script" id=3]
[ext_resource path="res://game/characters/mark/png/mark.png" type="Texture" id=4] [ext_resource path="res://game/characters/mark/png/mark.png" type="Texture" id=4]
[ext_resource path="res://game/characters/mark/png/mark_talk_down_right.png" type="Texture" id=5] [ext_resource path="res://game/characters/mark/png/mark_talk_down_right.png" type="Texture" id=5]
[ext_resource path="res://game/characters/mark/png/mark_talk_up.png" type="Texture" id=6] [ext_resource path="res://game/characters/mark/png/mark_talk_up.png" type="Texture" id=6]
[ext_resource path="res://game/characters/mark/png/mark_talk_right.png" type="Texture" id=7] [ext_resource path="res://game/characters/mark/png/mark_talk_right.png" type="Texture" id=7]
[ext_resource path="res://addons/escoria-core/game/core-scripts/resources/esc_animationresource.gd" type="Script" id=8]
[ext_resource path="res://addons/escoria-core/game/core-scripts/resources/esc_directionangle.gd" type="Script" id=9]
[sub_resource type="AtlasTexture" id=1] [sub_resource type="Resource" id=33]
atlas = ExtResource( 2 ) script = ExtResource( 9 )
region = Rect2( 0, 0, 24, 70 ) angle_start = 340
angle_size = 40
[sub_resource type="AtlasTexture" id=2] [sub_resource type="Resource" id=34]
atlas = ExtResource( 2 ) script = ExtResource( 9 )
region = Rect2( 24, 0, 24, 70 ) angle_start = 20
angle_size = 50
[sub_resource type="AtlasTexture" id=3] [sub_resource type="Resource" id=35]
atlas = ExtResource( 2 ) script = ExtResource( 9 )
region = Rect2( 48, 0, 24, 70 ) angle_start = 70
angle_size = 40
[sub_resource type="AtlasTexture" id=4] [sub_resource type="Resource" id=36]
atlas = ExtResource( 4 ) script = ExtResource( 9 )
region = Rect2( 216, 0, 24, 70 ) angle_start = 110
angle_size = 50
[sub_resource type="AtlasTexture" id=5] [sub_resource type="Resource" id=37]
atlas = ExtResource( 4 ) script = ExtResource( 9 )
region = Rect2( 240, 0, 24, 70 ) angle_start = 160
angle_size = 40
[sub_resource type="AtlasTexture" id=6] [sub_resource type="Resource" id=38]
atlas = ExtResource( 4 ) script = ExtResource( 9 )
region = Rect2( 264, 0, 24, 70 ) angle_start = 200
angle_size = 50
[sub_resource type="AtlasTexture" id=7] [sub_resource type="Resource" id=39]
atlas = ExtResource( 4 ) script = ExtResource( 9 )
region = Rect2( 288, 0, 24, 70 ) angle_start = 250
angle_size = 40
[sub_resource type="AtlasTexture" id=8] [sub_resource type="Resource" id=40]
atlas = ExtResource( 4 ) script = ExtResource( 9 )
region = Rect2( 312, 0, 24, 70 ) angle_start = 290
angle_size = 50
[sub_resource type="AtlasTexture" id=9] [sub_resource type="Resource" id=41]
atlas = ExtResource( 4 ) script = ExtResource( 3 )
region = Rect2( 72, 0, 24, 70 ) animation = "walk_up"
mirrored = false
[sub_resource type="AtlasTexture" id=10] [sub_resource type="Resource" id=42]
atlas = ExtResource( 4 ) script = ExtResource( 3 )
region = Rect2( 336, 0, 24, 70 ) animation = "walk_up"
mirrored = false
[sub_resource type="AtlasTexture" id=11] [sub_resource type="Resource" id=43]
atlas = ExtResource( 4 ) script = ExtResource( 3 )
region = Rect2( 360, 0, 24, 70 ) animation = "walk_right"
mirrored = false
[sub_resource type="AtlasTexture" id=12] [sub_resource type="Resource" id=44]
atlas = ExtResource( 4 ) script = ExtResource( 3 )
region = Rect2( 384, 0, 24, 70 ) animation = "walk_down"
mirrored = false
[sub_resource type="AtlasTexture" id=13] [sub_resource type="Resource" id=45]
atlas = ExtResource( 6 ) script = ExtResource( 3 )
region = Rect2( 0, 0, 24, 70 ) animation = "walk_down"
mirrored = false
[sub_resource type="AtlasTexture" id=14] [sub_resource type="Resource" id=46]
atlas = ExtResource( 6 ) script = ExtResource( 3 )
region = Rect2( 24, 0, 24, 70 ) animation = "walk_down"
mirrored = false
[sub_resource type="Resource" id=47]
script = ExtResource( 3 )
animation = "walk_right"
mirrored = true
[sub_resource type="Resource" id=48]
script = ExtResource( 3 )
animation = "walk_up"
mirrored = false
[sub_resource type="Resource" id=50]
script = ExtResource( 3 )
animation = "idle_up"
mirrored = false
[sub_resource type="Resource" id=51]
script = ExtResource( 3 )
animation = "idle_up"
mirrored = false
[sub_resource type="Resource" id=52]
script = ExtResource( 3 )
animation = "idle_right"
mirrored = false
[sub_resource type="Resource" id=53]
script = ExtResource( 3 )
animation = "idle_down_right"
mirrored = false
[sub_resource type="Resource" id=54]
script = ExtResource( 3 )
animation = "idle_down"
mirrored = false
[sub_resource type="Resource" id=55]
script = ExtResource( 3 )
animation = "idle_down_left"
mirrored = false
[sub_resource type="Resource" id=56]
script = ExtResource( 3 )
animation = "idle_left"
mirrored = false
[sub_resource type="Resource" id=57]
script = ExtResource( 3 )
animation = "idle_up"
mirrored = false
[sub_resource type="Resource" id=58]
script = ExtResource( 3 )
animation = "speak_up"
mirrored = false
[sub_resource type="Resource" id=59]
script = ExtResource( 3 )
animation = "speak_up"
mirrored = false
[sub_resource type="Resource" id=60]
script = ExtResource( 3 )
animation = "speak_right"
mirrored = false
[sub_resource type="Resource" id=61]
script = ExtResource( 3 )
animation = "speak_down"
mirrored = false
[sub_resource type="Resource" id=62]
script = ExtResource( 3 )
animation = "speak_down"
mirrored = false
[sub_resource type="Resource" id=63]
script = ExtResource( 3 )
animation = "speak_down"
mirrored = false
[sub_resource type="Resource" id=64]
script = ExtResource( 3 )
animation = "speak_right"
mirrored = true
[sub_resource type="Resource" id=65]
script = ExtResource( 3 )
animation = "speak_up"
mirrored = false
[sub_resource type="Resource" id=49]
script = ExtResource( 8 )
dir_angles = [ SubResource( 33 ), SubResource( 34 ), SubResource( 35 ), SubResource( 36 ), SubResource( 37 ), SubResource( 38 ), SubResource( 39 ), SubResource( 40 ) ]
directions = [ SubResource( 41 ), SubResource( 42 ), SubResource( 43 ), SubResource( 44 ), SubResource( 45 ), SubResource( 46 ), SubResource( 47 ), SubResource( 48 ) ]
idles = [ SubResource( 50 ), SubResource( 51 ), SubResource( 52 ), SubResource( 53 ), SubResource( 54 ), SubResource( 55 ), SubResource( 56 ), SubResource( 57 ) ]
speaks = [ SubResource( 58 ), SubResource( 59 ), SubResource( 60 ), SubResource( 61 ), SubResource( 62 ), SubResource( 63 ), SubResource( 64 ), SubResource( 65 ) ]
[sub_resource type="AtlasTexture" id=15] [sub_resource type="AtlasTexture" id=15]
atlas = ExtResource( 7 ) atlas = ExtResource( 7 )
@@ -96,18 +209,70 @@ region = Rect2( 168, 0, 24, 70 )
atlas = ExtResource( 4 ) atlas = ExtResource( 4 )
region = Rect2( 192, 0, 24, 70 ) region = Rect2( 192, 0, 24, 70 )
[sub_resource type="AtlasTexture" id=4]
atlas = ExtResource( 4 )
region = Rect2( 216, 0, 24, 70 )
[sub_resource type="AtlasTexture" id=5]
atlas = ExtResource( 4 )
region = Rect2( 240, 0, 24, 70 )
[sub_resource type="AtlasTexture" id=6]
atlas = ExtResource( 4 )
region = Rect2( 264, 0, 24, 70 )
[sub_resource type="AtlasTexture" id=7]
atlas = ExtResource( 4 )
region = Rect2( 288, 0, 24, 70 )
[sub_resource type="AtlasTexture" id=8]
atlas = ExtResource( 4 )
region = Rect2( 312, 0, 24, 70 )
[sub_resource type="AtlasTexture" id=29]
atlas = ExtResource( 4 )
region = Rect2( 24, 0, 24, 70 )
[sub_resource type="AtlasTexture" id=1]
atlas = ExtResource( 2 )
region = Rect2( 0, 0, 24, 70 )
[sub_resource type="AtlasTexture" id=2]
atlas = ExtResource( 2 )
region = Rect2( 24, 0, 24, 70 )
[sub_resource type="AtlasTexture" id=3]
atlas = ExtResource( 2 )
region = Rect2( 48, 0, 24, 70 )
[sub_resource type="AtlasTexture" id=23] [sub_resource type="AtlasTexture" id=23]
atlas = ExtResource( 4 ) atlas = ExtResource( 4 )
region = Rect2( 48, 0, 24, 70 ) region = Rect2( 48, 0, 24, 70 )
[sub_resource type="AtlasTexture" id=24] [sub_resource type="AtlasTexture" id=9]
atlas = ExtResource( 4 ) atlas = ExtResource( 4 )
region = Rect2( 120, 0, 24, 70 ) region = Rect2( 72, 0, 24, 70 )
[sub_resource type="AtlasTexture" id=10]
atlas = ExtResource( 4 )
region = Rect2( 336, 0, 24, 70 )
[sub_resource type="AtlasTexture" id=11]
atlas = ExtResource( 4 )
region = Rect2( 360, 0, 24, 70 )
[sub_resource type="AtlasTexture" id=12]
atlas = ExtResource( 4 )
region = Rect2( 384, 0, 24, 70 )
[sub_resource type="AtlasTexture" id=25] [sub_resource type="AtlasTexture" id=25]
atlas = ExtResource( 4 ) atlas = ExtResource( 4 )
region = Rect2( 96, 0, 24, 70 ) region = Rect2( 96, 0, 24, 70 )
[sub_resource type="AtlasTexture" id=24]
atlas = ExtResource( 4 )
region = Rect2( 120, 0, 24, 70 )
[sub_resource type="AtlasTexture" id=26] [sub_resource type="AtlasTexture" id=26]
atlas = ExtResource( 5 ) atlas = ExtResource( 5 )
region = Rect2( 0, 0, 24, 70 ) region = Rect2( 0, 0, 24, 70 )
@@ -120,19 +285,28 @@ region = Rect2( 24, 0, 24, 70 )
atlas = ExtResource( 5 ) atlas = ExtResource( 5 )
region = Rect2( 48, 0, 24, 70 ) region = Rect2( 48, 0, 24, 70 )
[sub_resource type="AtlasTexture" id=29]
atlas = ExtResource( 4 )
region = Rect2( 24, 0, 24, 70 )
[sub_resource type="AtlasTexture" id=30] [sub_resource type="AtlasTexture" id=30]
atlas = ExtResource( 4 ) atlas = ExtResource( 4 )
region = Rect2( 0, 0, 24, 70 ) region = Rect2( 0, 0, 24, 70 )
[sub_resource type="AtlasTexture" id=13]
atlas = ExtResource( 6 )
region = Rect2( 0, 0, 24, 70 )
[sub_resource type="AtlasTexture" id=14]
atlas = ExtResource( 6 )
region = Rect2( 24, 0, 24, 70 )
[sub_resource type="SpriteFrames" id=31] [sub_resource type="SpriteFrames" id=31]
animations = [ { animations = [ {
"frames": [ SubResource( 1 ), SubResource( 2 ), SubResource( 3 ), SubResource( 2 ), SubResource( 3 ) ], "frames": [ SubResource( 15 ), SubResource( 16 ), SubResource( 17 ), SubResource( 18 ), SubResource( 19 ) ],
"loop": true, "loop": true,
"name": "speak_down", "name": "speak_right",
"speed": 5.0
}, {
"frames": [ SubResource( 20 ), SubResource( 21 ), SubResource( 22 ), SubResource( 21 ) ],
"loop": true,
"name": "walk_down",
"speed": 6.0 "speed": 6.0
}, { }, {
"frames": [ SubResource( 4 ), SubResource( 5 ), SubResource( 6 ), SubResource( 7 ), SubResource( 8 ) ], "frames": [ SubResource( 4 ), SubResource( 5 ), SubResource( 6 ), SubResource( 7 ), SubResource( 8 ) ],
@@ -140,6 +314,21 @@ animations = [ {
"name": "walk_right", "name": "walk_right",
"speed": 6.0 "speed": 6.0
}, { }, {
"frames": [ SubResource( 29 ) ],
"loop": true,
"name": "idle_down_right",
"speed": 5.0
}, {
"frames": [ SubResource( 1 ), SubResource( 2 ), SubResource( 3 ), SubResource( 2 ), SubResource( 3 ) ],
"loop": true,
"name": "speak_down",
"speed": 6.0
}, {
"frames": [ SubResource( 23 ) ],
"loop": true,
"name": "idle_right",
"speed": 5.0
}, {
"frames": [ SubResource( 9 ) ], "frames": [ SubResource( 9 ) ],
"loop": true, "loop": true,
"name": "idle_up", "name": "idle_up",
@@ -150,24 +339,9 @@ animations = [ {
"name": "walk_up", "name": "walk_up",
"speed": 6.0 "speed": 6.0
}, { }, {
"frames": [ SubResource( 13 ), SubResource( 14 ), SubResource( 13 ), SubResource( 14 ), SubResource( 14 ) ], "frames": [ SubResource( 25 ) ],
"loop": true, "loop": true,
"name": "speak_up", "name": "idle_left",
"speed": 3.0
}, {
"frames": [ SubResource( 15 ), SubResource( 16 ), SubResource( 17 ), SubResource( 18 ), SubResource( 19 ) ],
"loop": true,
"name": "speak_right",
"speed": 5.0
}, {
"frames": [ SubResource( 20 ), SubResource( 21 ), SubResource( 22 ), SubResource( 21 ) ],
"loop": true,
"name": "walk_down",
"speed": 6.0
}, {
"frames": [ SubResource( 23 ) ],
"loop": true,
"name": "idle_right",
"speed": 5.0 "speed": 5.0
}, { }, {
"frames": [ SubResource( 24 ) ], "frames": [ SubResource( 24 ) ],
@@ -175,25 +349,20 @@ animations = [ {
"name": "idle_down_left", "name": "idle_down_left",
"speed": 5.0 "speed": 5.0
}, { }, {
"frames": [ SubResource( 25 ) ],
"loop": true,
"name": "idle_left",
"speed": 5.0
}, {
"frames": [ SubResource( 26 ), SubResource( 27 ), SubResource( 28 ) ], "frames": [ SubResource( 26 ), SubResource( 27 ), SubResource( 28 ) ],
"loop": true, "loop": true,
"name": "speak_down_right", "name": "speak_down_right",
"speed": 6.0 "speed": 6.0
}, { }, {
"frames": [ SubResource( 29 ) ],
"loop": true,
"name": "idle_down_right",
"speed": 5.0
}, {
"frames": [ SubResource( 30 ) ], "frames": [ SubResource( 30 ) ],
"loop": true, "loop": true,
"name": "idle_down", "name": "idle_down",
"speed": 5.0 "speed": 5.0
}, {
"frames": [ SubResource( 13 ), SubResource( 14 ), SubResource( 13 ), SubResource( 14 ), SubResource( 14 ) ],
"loop": true,
"name": "speak_up",
"speed": 3.0
} ] } ]
[sub_resource type="CapsuleShape2D" id=32] [sub_resource type="CapsuleShape2D" id=32]
@@ -204,7 +373,7 @@ script = ExtResource( 1 )
global_id = "player" global_id = "player"
is_movable = true is_movable = true
dialog_color = Color( 1, 1, 1, 1 ) dialog_color = Color( 1, 1, 1, 1 )
animations = ExtResource( 3 ) animations = SubResource( 49 )
[node name="sprite" type="AnimatedSprite" parent="."] [node name="sprite" type="AnimatedSprite" parent="."]
position = Vector2( 0, -140.938 ) position = Vector2( 0, -140.938 )

View File

@@ -0,0 +1,51 @@
[gd_resource type="Resource" load_steps=11 format=2]
[ext_resource path="res://addons/escoria-core/game/core-scripts/resources/esc_animationresource.gd" type="Script" id=1]
[ext_resource path="res://addons/escoria-core/game/core-scripts/resources/esc_directionangle.gd" type="Script" id=2]
[sub_resource type="Resource" id=1]
script = ExtResource( 2 )
angle_start = 340
angle_size = 40
[sub_resource type="Resource" id=2]
script = ExtResource( 2 )
angle_start = 20
angle_size = 50
[sub_resource type="Resource" id=3]
script = ExtResource( 2 )
angle_start = 70
angle_size = 40
[sub_resource type="Resource" id=4]
script = ExtResource( 2 )
angle_start = 110
angle_size = 50
[sub_resource type="Resource" id=5]
script = ExtResource( 2 )
angle_start = 160
angle_size = 40
[sub_resource type="Resource" id=6]
script = ExtResource( 2 )
angle_start = 200
angle_size = 50
[sub_resource type="Resource" id=7]
script = ExtResource( 2 )
angle_start = 250
angle_size = 40
[sub_resource type="Resource" id=8]
script = ExtResource( 2 )
angle_start = 290
angle_size = 50
[resource]
script = ExtResource( 1 )
dir_angles = [ SubResource( 1 ), SubResource( 2 ), SubResource( 3 ), SubResource( 4 ), SubResource( 5 ), SubResource( 6 ), SubResource( 7 ), SubResource( 8 ) ]
directions = [ ]
idles = [ ]
speaks = [ ]

View File

@@ -1,90 +0,0 @@
#const dir_angles = [
# 0, # 0 NORTH FACE CAMERA
# 45, # 1 NORTHEAST
# 90, # 2 EAST
# 135, # 3 SOUTHEAST
# 180, # 4 SOUTH BACK TO CAMERA
# 225, # 5 SOUTHWEST
# 270, # 6 WEST
# 315, # 7 NORTHWEST
#]
# Angle is [from_angle, area_angle]
# example : on a clock, [180, 45] starts exactly from 6 o'clock (180°)
# and stops between 7 o'clock and 8 o'clock (45° from 6 o'clock)
const dir_angles = [
[340, 40], # 0 UP
[20, 50], # 1 RIGHT UP
[70, 40], # 2 RIGHT
[110, 50], # 3 RIGHT DOWN
[160, 40], # 4 DOWN
[200, 50], # 5 LEFT DOWN
[250, 40], # 6 LEFT
[290, 50] # 7 LEFT UP
]
# Array of animations for each direction, from UP to RIGHT_UP clockwise
# [animation_name, scale]: scale parameter can be set to -1 to mirror the animation
const directions = [
["walk_up", 1], # 0 UP
["walk_up", 1], # 1 RIGHT UP
["walk_right", 1], # 2 RIGHT
["walk_down", 1], # 3 RIGHT DOWN
["walk_down", 1], # 4 DOWN
["walk_down", 1], # 5 LEFT DOWN
["walk_right", -1], # 6 LEFT
["walk_up", 1] # 7 LEFT UP
]
const idles = [
["idle_up", 1], # 0 UP
["idle_up", 1], # 1 RIGHT UP
["idle_right", 1], # 2 RIGHT
["idle_down_right", 1], # 3 RIGHT DOWN
["idle_down", 1], # 4 DOWN
["idle_down_left", 1], # 5 LEFT DOWN
["idle_left", 1], # 6 LEFT
["idle_up", 1] # 7 LEFT UP
]
const speaks = [
["speak_up", 1], # 0 UP
["speak_up", 1], # 1 RIGHT UP
["speak_right", 1], # 2 RIGHT
["speak_down", 1], # 3 RIGHT DOWN
["speak_down", 1], # 4 DOWN
["speak_down", 1], # 5 LEFT DOWN
["speak_right", -1], # 6 LEFT
["speak_up", 1] # 7 LEFT UP
]
#const directions = ["walk_left", -1, # 0
# "walk_left", -1, # 1
# "walk_back", 1, # 2
# "walk_back", 1, # 3
# "walk_left", 1, # 4
# "walk_left", 1, # 5
# "walk_front", 1, # 6
# "walk_front", 1 # 7
# ]
#
#const idles = [ "idle_front_right", 1, # 0
# "idle_front_right", 1, # 1
# "idle_back", 1, # 2
# "idle_back", 1, # 3
# "idle_front_left", 1, # 4
# "idle_front_left", 1, # 5
# "idle_front", 1, # 6
# "idle_front", 1 # 7
# ]
#
#const speaks = ["idle_front_left", 1, # 0
# "idle_front_left", 1, # 1
# "idle_back", 1, # 2
# "idle_back", 1, # 3
# "idle_front_right", 1, # 4
# "idle_front_right", 1, # 5
# "idle_front", 1, # 6
# "idle_front", 1 # 7
# ]

View File

@@ -84,6 +84,16 @@ _global_script_classes=[ {
"language": "GDScript", "language": "GDScript",
"path": "res://addons/escoria-core/game/core-scripts/esc/esc_action_manager.gd" "path": "res://addons/escoria-core/game/core-scripts/esc/esc_action_manager.gd"
}, { }, {
"base": "Resource",
"class": "ESCAnimationName",
"language": "GDScript",
"path": "res://addons/escoria-core/game/core-scripts/resources/esc_animationname.gd"
}, {
"base": "Resource",
"class": "ESCAnimationResource",
"language": "GDScript",
"path": "res://addons/escoria-core/game/core-scripts/resources/esc_animationresource.gd"
}, {
"base": "TextureRect", "base": "TextureRect",
"class": "ESCBackground", "class": "ESCBackground",
"language": "GDScript", "language": "GDScript",
@@ -154,6 +164,11 @@ _global_script_classes=[ {
"language": "GDScript", "language": "GDScript",
"path": "res://addons/escoria-core/game/scenes/dialogs/dialog_player.gd" "path": "res://addons/escoria-core/game/scenes/dialogs/dialog_player.gd"
}, { }, {
"base": "Resource",
"class": "ESCDirectionAngle",
"language": "GDScript",
"path": "res://addons/escoria-core/game/core-scripts/resources/esc_directionangle.gd"
}, {
"base": "ESCStatement", "base": "ESCStatement",
"class": "ESCEvent", "class": "ESCEvent",
"language": "GDScript", "language": "GDScript",
@@ -470,6 +485,8 @@ _global_script_class_icons={
"DebugCommand": "", "DebugCommand": "",
"DecGlobalCommand": "", "DecGlobalCommand": "",
"ESCActionManager": "", "ESCActionManager": "",
"ESCAnimationName": "",
"ESCAnimationResource": "",
"ESCBackground": "", "ESCBackground": "",
"ESCBackgroundMusic": "", "ESCBackgroundMusic": "",
"ESCBackgroundSound": "", "ESCBackgroundSound": "",
@@ -484,6 +501,7 @@ _global_script_class_icons={
"ESCDialog": "", "ESCDialog": "",
"ESCDialogOption": "", "ESCDialogOption": "",
"ESCDialogsPlayer": "", "ESCDialogsPlayer": "",
"ESCDirectionAngle": "",
"ESCEvent": "", "ESCEvent": "",
"ESCEventManager": "", "ESCEventManager": "",
"ESCExecution": "", "ESCExecution": "",
@@ -548,7 +566,7 @@ _global_script_class_icons={
[application] [application]
config/name="Escoria" config/name="Escoria-reloaded"
run/main_scene="res://addons/escoria-core/game/main_scene.tscn" run/main_scene="res://addons/escoria-core/game/main_scene.tscn"
boot_splash/image="res://addons/escoria-core/logo/escoria-logo-small.png" boot_splash/image="res://addons/escoria-core/logo/escoria-logo-small.png"
boot_splash/fullsize=false boot_splash/fullsize=false
@@ -610,7 +628,7 @@ ui/game_scene="res://addons/escoria-ui-9verbs/game.tscn"
esc_show_debug_prompt={ esc_show_debug_prompt={
"deadzone": 0.5, "deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777245,"unicode":0,"echo":false,"script":null) "events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777245,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
] ]
} }
switch_action_verb={ switch_action_verb={