Advertisement
Guest User

Untitled

a guest
Nov 20th, 2017
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.23 KB | None | 0 0
  1. extends Node
  2.  
  3. var input_states = preload('res://scr/input_states.gd')
  4. onready var body = get_node('body')
  5.  
  6. #Variables
  7. var speed_x = 700
  8. var speed_y = 0
  9. var move_direction = 0
  10. const JUMP_FORCE = 700
  11. const GRAVITY = 2500
  12. const MAX_FALL_SPEED = 700
  13. var jump_count = 0
  14. onready var starting_scale = body.get_scale()
  15.  
  16. #States
  17. var ORIENTATION_PREV = ''
  18. var ORIENTATION = 'right'
  19. var GROUNDSTATE_PREV = ''
  20. var GROUNDSTATE = 'air'
  21.  
  22. #Inputs
  23. onready var btn_right = input_states.new('ui_right')
  24. onready var btn_left = input_states.new('ui_left')
  25. onready var btn_jump = input_states.new('ui_up')
  26.  
  27. #States
  28. var FROZEN = false
  29.  
  30. func _ready():
  31. set_fixed_process(true)
  32. #Debug
  33. while true:
  34. yield(utils.create_timer(.1), 'timeout')
  35. print(jump_count)
  36.  
  37. func _fixed_process(delta):
  38. if !FROZEN:
  39. #States
  40. ORIENTATION_PREV = ORIENTATION
  41. GROUNDSTATE_PREV = GROUNDSTATE
  42.  
  43.  
  44. #Gravity
  45. calculate_gravity(delta)
  46.  
  47. #Jump reset
  48. if GROUNDSTATE == 'ground':
  49. jump_count = 0
  50.  
  51.  
  52. #Controls
  53. if btn_right.check() == 2:
  54. move_direction = 1
  55. ORIENTATION = 'right'
  56. elif btn_left.check() == 2:
  57. move_direction = -1
  58. ORIENTATION = 'left'
  59. else:
  60. move_direction = 0
  61. if btn_jump.check() == 1 and jump_count < 2:
  62. speed_y = -JUMP_FORCE
  63. jump_count += 1
  64. if GROUNDSTATE == 'air':
  65. jump_count += 1
  66.  
  67.  
  68.  
  69.  
  70. #Animations
  71. if ORIENTATION != ORIENTATION_PREV:
  72. flip()
  73.  
  74.  
  75. #Moving the body
  76. var movement = body.move(calculate_velocity(delta))
  77. #Sliding
  78. check_slide_and_groundstate(movement)
  79.  
  80. func calculate_gravity(delta):
  81. speed_y += GRAVITY*delta
  82. if speed_y > MAX_FALL_SPEED:
  83. speed_y = MAX_FALL_SPEED
  84.  
  85. func check_slide_and_groundstate(movement):
  86. if body.is_colliding():
  87. var normal = body.get_collision_normal()
  88. speed_y = normal.slide(Vector2(0, speed_y)).y
  89. body.move(normal.slide(movement))
  90. if normal == Vector2(0, -1):
  91. GROUNDSTATE = 'ground'
  92. else:
  93. GROUNDSTATE = 'air'
  94. else:
  95. GROUNDSTATE = 'air'
  96.  
  97. func calculate_velocity(delta):
  98. return Vector2(speed_x*delta*move_direction, speed_y*delta)
  99.  
  100. func flip():
  101. if ORIENTATION == 'right':
  102. body.set_scale(starting_scale)
  103. else:
  104. body.set_scale(Vector2(-starting_scale.x, starting_scale.y))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement