Co-authored-by: Dennis Ploeger <develop@dieploegers.de> Co-authored-by: dploeger <dploeger@users.noreply.github.com>
4.4 KiB
ESCMovable
Extends: Node
Description
Node that performs the moving (walk, teleport, terrain scaling...) actions on its parent node.
Enumerations
MovableTask
const MovableTask: Dictionary = {"NONE":0,"SLIDE":2,"WALK":1}
Tasks carried out by this walkable node NONE - The node is inactive WALK - The node walks the parent somewhere SLIDE - The node slides the parent somewhere
Property Descriptions
walk_path
var walk_path: Array
Character path through the scene as calculated by the Pathfinder
path_ofs
var path_ofs: int
Current active walk path entry
walk_destination
var walk_destination: Vector2
The destination where the character should be moving to
walk_context
var walk_context: ESCWalkContext
The walk context currently carried out by this movable node
moved
var moved: bool
Wether the character was moved at all
last_deg
var last_deg: int
Angle degrees to the last position (TODO is that correct?)
last_dir
var last_dir: int
Direction of the last position (TODO is that correct?)
last_scale
var last_scale: Vector2
Scale of the last position (TODO is that correct?)
pose_scale
var pose_scale: int
TODO Isn't this actually the flip state of the current animation?
parent
var parent
Shortcut variable that references the node's parent
bypass_missing_animation
var bypass_missing_animation
If character misses an animation, bypass it and proceed.
task
var task
Currenly running task
Method Descriptions
teleport
func teleport(target: Node, angle: Object = null) -> void
Teleports this item to the target position. TODO angle is only used for logging and has no further use, so it probably can be removed
Parameters
- target: Position2d or ESCItem to teleport to
teleport_to
func teleport_to(target: Vector2, angle: Object = null) -> void
Teleports this item to the target position. TODO angle is only used for logging and has no further use, so it probably can be removed
Parameters
- target: Vector2 target position to teleport to
walk_to
func walk_to(pos: Vector2, p_walk_context: ESCWalkContext = null) -> void
Walk to a given position
Parameters
- pos: Position to walk to
- p_walk_context: Walk context to use
walk
func walk(target_pos, p_speed, context = null) -> void
FIXME this function doesn't seem to be used anywhere
walk_stop
func walk_stop(pos: Vector2) -> var
We have finished walking. Set the idle pose and complete
Parameters
- pos: Final target position
update_terrain
func update_terrain(on_event_finished_name = null) -> void
Update the sprite scale and lighting
Parameters
- on_event_finished_name: Used if this function is called from an ESC event
is_angle_in_interval
func is_angle_in_interval(angle: float, interval: Array) -> bool
Returns true if given angle is inside the interval given by a starting_angle and the size. TODO Refactor to make this stuff understandable :D
Parameters
- angle: Angle to test
- interval: Array of size 2, containing the starting angle, and the size of interval eg: [90, 40] corresponds to angle between 90° and 130°
set_angle
func set_angle(deg: int, immediate = true) -> void
Sets character's angle and plays according animation.
TODO: depending on current angle and current angle, the character may directly turn around with no "progression". We may enhance this by calculating successive directions to turn the character to, so that he doesn't switch to opposite direction too fast. For example, if character looks WEST and set_angle(EAST) is called, we may want the character to first turn SOUTHWEST, then SOUTH, then SOUTHEAST and finally EAST, all more or less fast. Whatever the implementation, this should be activated using "parameter "immediate" set to false.
Parameters
- deg int angle to set the character
- immediate bool (currently unused, see TODO below) If true, direction is switched immediately. Else, successive animations are used so that the character turns to target angle.