Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extends Node
- var input_states = preload('res://scr/input_states.gd')
- onready var body = get_node('body')
- #Variables
- var speed_x = 700
- var speed_y = 0
- var move_direction = 0
- const JUMP_FORCE = 700
- const GRAVITY = 2500
- const MAX_FALL_SPEED = 700
- var jump_count = 0
- onready var starting_scale = body.get_scale()
- #States
- var ORIENTATION_PREV = ''
- var ORIENTATION = 'right'
- var GROUNDSTATE_PREV = ''
- var GROUNDSTATE = 'air'
- #Inputs
- onready var btn_right = input_states.new('ui_right')
- onready var btn_left = input_states.new('ui_left')
- onready var btn_jump = input_states.new('ui_up')
- #States
- var FROZEN = false
- func _ready():
- set_fixed_process(true)
- #Debug
- while true:
- yield(utils.create_timer(.1), 'timeout')
- print(jump_count)
- func _fixed_process(delta):
- if !FROZEN:
- #States
- ORIENTATION_PREV = ORIENTATION
- GROUNDSTATE_PREV = GROUNDSTATE
- #Gravity
- calculate_gravity(delta)
- #Jump reset
- if GROUNDSTATE == 'ground':
- jump_count = 0
- #Controls
- if btn_right.check() == 2:
- move_direction = 1
- ORIENTATION = 'right'
- elif btn_left.check() == 2:
- move_direction = -1
- ORIENTATION = 'left'
- else:
- move_direction = 0
- if btn_jump.check() == 1 and jump_count < 2:
- speed_y = -JUMP_FORCE
- jump_count += 1
- if GROUNDSTATE == 'air':
- jump_count += 1
- #Animations
- if ORIENTATION != ORIENTATION_PREV:
- flip()
- #Moving the body
- var movement = body.move(calculate_velocity(delta))
- #Sliding
- check_slide_and_groundstate(movement)
- func calculate_gravity(delta):
- speed_y += GRAVITY*delta
- if speed_y > MAX_FALL_SPEED:
- speed_y = MAX_FALL_SPEED
- func check_slide_and_groundstate(movement):
- if body.is_colliding():
- var normal = body.get_collision_normal()
- speed_y = normal.slide(Vector2(0, speed_y)).y
- body.move(normal.slide(movement))
- if normal == Vector2(0, -1):
- GROUNDSTATE = 'ground'
- else:
- GROUNDSTATE = 'air'
- else:
- GROUNDSTATE = 'air'
- func calculate_velocity(delta):
- return Vector2(speed_x*delta*move_direction, speed_y*delta)
- func flip():
- if ORIENTATION == 'right':
- body.set_scale(starting_scale)
- else:
- body.set_scale(Vector2(-starting_scale.x, starting_scale.y))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement