Advertisement
chris33556

comco attack system

Feb 27th, 2024
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.33 KB | None | 0 0
  1. extends KinematicBody
  2.  
  3.  
  4. var can_reversal_grab = true
  5. var canBackfistActive = false
  6. var canBackfist = true
  7. var player_combating
  8. var canCombo = false
  9. var player_stunned = true
  10. var kneeSmashCount = 0
  11. var canKneeSmash
  12. var canReleaseEnemy = true
  13. var canSinglePunch = false
  14. var velocity = Vector3()
  15. var speed = 0.7
  16. var isAttacking
  17. var input_vector = Vector3.ZERO
  18. var AttackPoints = 3
  19. var target_enemy
  20. var player_timer
  21. var enemy_hitbox
  22. var can_press_right = false
  23. var can_press_left = false
  24. var isGrabbing
  25. var facing_direction = Vector3.RIGHT
  26. var enemy_entered = false
  27. var isUppercut = true
  28. var isCombo = false
  29. var isWalking = false
  30. var can_move = true
  31. var press_up = Input.is_action_just_pressed("ui_up")
  32. var canThrowEnemy = false
  33. var has_thrown_enemy = false
  34. var can_jump = true
  35. var can_flying_attack = false
  36. var can_hammer_fist = false
  37.  
  38.  
  39.  
  40. onready var attackDelay = $AttackDelayTimer
  41. onready var ComboDelay = $ComboPauseTimer
  42. onready var RightButtonRelease = $right_button_release
  43. onready var LeftButtonRelease = $left_button_release
  44. onready var GrabHoldTimer = $GrabTimer
  45. onready var uppercutPause = $uppercutPauseTimer
  46. onready var AnimSprite = $AnimatedSprite3D
  47. onready var enemy_attack_collisiion = get_node("../enemy/AnimatedSprite3D/playerAttackArea/CollisionShape")
  48. onready var player_backfist_collision = $AnimatedSprite3D/backFist/CollisionShape
  49. onready var enemy_upper_rotation_collision = get_node("../enemy/AnimatedSprite3D/enemy_upper_rotation/CollisionShape")
  50. onready var enemy_lower_rotation_collision = get_node("../enemy/AnimatedSprite3D/enemy_lower_rotation/CollisionShape")
  51. onready var enemy_rear_grab_collision = get_node("../enemy/AnimatedSprite3D/RearGrabArea/CollisionShape")
  52.  
  53.  
  54. export var jump_height = 1.5
  55. export var jump_time_to_peak = 0.4 #decreasing this number makes player reach peak faster
  56. export var jump_time_to_descent = 0.4 #increasing this number slows down descent
  57.  
  58. onready var jump_velocity = ((2.0 * jump_height) / jump_time_to_peak)
  59. onready var jump_gravity = ((-2.0 * jump_height) / (jump_time_to_peak * jump_time_to_peak))
  60. onready var fall_gravity = ((-2.0 * jump_height) / (jump_time_to_descent * jump_time_to_descent))
  61.  
  62. enum states {
  63. IDLE
  64. WALK
  65. ATTACK1
  66. ATTACK2
  67. ATTACK3
  68. GRABBING
  69. SINGLEPUNCH
  70. UPPERCUT
  71. KNEESMASH
  72. PLAYER_STUNNED
  73. BACKFIST
  74. BACKFIST_NEUTRAL
  75. REVERSAL_GRAB
  76. GRAB_LEFT
  77. RELEASE_ENEMY
  78. SHOULDER_THROW
  79. JUMP
  80. FLYING_KICK
  81. HAMMER_FIST
  82. }
  83.  
  84. var state = states.IDLE
  85.  
  86. func _ready():
  87. target_enemy = get_tree().current_scene.get_node("enemy")
  88. can_press_right = true
  89. can_press_left = true
  90.  
  91.  
  92. #set_render_priority(1)
  93. #enemy_attack_collisiion.disabled = true
  94.  
  95. func _physics_process(delta):
  96. update_animation()
  97. get_input(delta)
  98.  
  99. combo()
  100. flip_dir()
  101. singlePunch()
  102. player_stunned()
  103.  
  104.  
  105. func singlePunch():
  106. if not isAttacking and state != states.JUMP and state != states.FLYING_KICK:
  107. if not isGrabbing:
  108. $AnimatedSprite3D/objectArea/CollisionShape.disabled = true
  109. if Input.is_action_just_pressed("attack") and state != states.UPPERCUT:
  110. if not canSinglePunch:
  111. velocity.x = 0
  112. velocity.z = 0
  113. speed = 0
  114. state = states.SINGLEPUNCH
  115. canSinglePunch = true
  116. can_move = false
  117. ComboDelay.start(0.22)
  118.  
  119.  
  120. func combo():
  121. #if not isAttacking and state != states.REVERSAL_GRAB:
  122. if Input.is_action_just_pressed("attack") and AttackPoints > 0 and enemy_entered \
  123. and canCombo:
  124. enemy_attack_collisiion.disabled = true
  125. $invincibleTimer.start()
  126. $AttackRestTimer.start()
  127. $AnimatedSprite3D/enemyArea/CollisionShape.disabled = false
  128. isAttacking = true
  129. isGrabbing = false
  130. can_move = false
  131. ComboDelay.start(0.7)
  132.  
  133.  
  134. if AttackPoints == 3:
  135. AttackPoints -= 1
  136. velocity = Vector3.ZERO
  137. state = states.ATTACK1
  138. target_enemy.state = target_enemy.states.STUNNED
  139. target_enemy.isStunned = true
  140.  
  141.  
  142.  
  143.  
  144. elif AttackPoints == 2:
  145. velocity.x = 0
  146. velocity.z = 0
  147. AttackPoints -= 1
  148. state = states.ATTACK2
  149. target_enemy.state = target_enemy.states.STUNNED
  150. target_enemy.isStunned = true
  151.  
  152.  
  153.  
  154.  
  155. elif AttackPoints == 1:
  156. velocity.x = 0
  157. velocity.z = 0
  158. AttackPoints -= 1
  159. velocity = Vector3.ZERO
  160. state = states.ATTACK3
  161. ComboDelay.start(1)
  162. target_enemy.state = target_enemy.states.STUNNED
  163. yield(get_tree().create_timer(0.3), "timeout")
  164. target_enemy.state = target_enemy.states.KNOCKBACK
  165.  
  166.  
  167. func _on_AttackRestTimer_timeout():
  168. AttackPoints = 3
  169.  
  170. func _on_AttackDelayTimer_timeout():
  171. can_move = true
  172.  
  173. func _on_ComboPauseTimer_timeout():
  174. resumeFromCombo()
  175.  
  176. func resumeFromCombo():
  177. #isCombo = false
  178. can_move = true
  179.  
  180.  
  181. func _on_enemyArea_area_entered(area):
  182. if area.get_groups().has("enemyStunned"):
  183. enemy_entered = true
  184. canCombo = true
  185.  
  186.  
  187. func _on_enemyArea_area_exited(area):
  188. if area.get_groups().has("enemyStunned"):
  189. enemy_entered = false
  190.  
  191.  
  192.  
  193.  
  194. func get_input(delta):
  195. if not isAttacking:
  196. if target_enemy && target_enemy.state == target_enemy.states.GRABBED:
  197. isGrabbing = false
  198. isWalking = false
  199. can_move = false
  200.  
  201. if can_move and is_on_floor():
  202. velocity = Vector3.ZERO
  203. if Input.is_action_pressed("ui_left") and can_press_left and not isGrabbing:
  204. velocity.x -= 2
  205. state = states.WALK
  206. can_press_left = true
  207.  
  208.  
  209. if Input.is_action_pressed("ui_right") and can_press_right and not isGrabbing:
  210. velocity.x += 2
  211. state = states.WALK
  212. can_press_right = true
  213.  
  214.  
  215. if Input.is_action_pressed("ui_down"):
  216. velocity.z += 3
  217. state = states.WALK
  218. if Input.is_action_pressed("ui_up"):
  219. velocity.z -= 3
  220. state = states.WALK
  221.  
  222. if velocity.x == 0 and velocity.z == 0:
  223. state = states.IDLE
  224.  
  225.  
  226. #gravity(delta)
  227. #velocity = move_and_slide(velocity, Vector3.UP)
  228. #var _motion = velocity.normalized() * speed
  229.  
  230.  
  231.  
  232. func _on_punchDelay_timeout():
  233. isAttacking = true
  234.  
  235.  
  236.  
  237.  
  238. func player_stunned():
  239. if player_stunned:
  240. if target_enemy.enemy_attacking:
  241. target_enemy.state = target_enemy.states.ATTACK_1
  242. state = states.PLAYER_STUNNED
  243. can_move = false
  244. canCombo = false
  245. canBackfist = false
  246. $stunTimer.start()
  247. isAttacking = false
  248. velocity = Vector3.ZERO
  249. can_press_right = false
  250. $right_button_release.start()
  251. else:
  252. canBackfist = true
  253.  
  254. func _on_playerStunned_area_entered(area):
  255. if area.get_groups().has ("enemy_attack"):
  256. player_stunned = true
  257.  
  258.  
  259. func _on_playerStunned_area_exited(area):
  260. if area.get_groups().has ("enemy_attack"):
  261. player_stunned = false
  262. canCombo = true
  263. canSinglePunch = false
  264. #can_move = true
  265.  
  266.  
  267. func _on_stunTimer_timeout():
  268. canCombo = true
  269. can_move = true
  270.  
  271. func _on_enemy_delay_attack_timeout():
  272. target_enemy.enemy_attacking = true
  273.  
  274.  
  275. func startComboAttack():
  276. player_combating = true
  277.  
  278. func finishComboAttack():
  279. player_combating = false
  280.  
  281.  
  282.  
  283. func flip_dir():
  284. if velocity.x > 0.001:
  285. facing_direction = Vector3.RIGHT
  286. AnimSprite.scale.x = 1
  287. elif velocity.x < -0.001:
  288. facing_direction = Vector3.LEFT
  289. AnimSprite.scale.x = -1
  290.  
  291.  
  292. func update_animation():
  293. match state:
  294. states.IDLE:
  295. $AnimatedSprite3D.play("idle")
  296. states.WALK:
  297. $AnimatedSprite3D.play("walking")
  298. states.ATTACK1:
  299. $AnimatedSprite3D.play("attack_1")
  300. states.ATTACK2:
  301. $AnimatedSprite3D.play("attack_2")
  302. states.ATTACK3:
  303. $AnimatedSprite3D.play("attack_3")
  304.  
  305. states.SINGLEPUNCH:
  306. $AnimatedSprite3D.play("singlepunch")
  307.  
  308. states.PLAYER_STUNNED:
  309. $AnimatedSprite3D.play("stunned")
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  
  316. func _on_AnimatedSprite3D_animation_finished():
  317. if $AnimatedSprite3D.animation == "attack_1":
  318. state = states.IDLE
  319. isAttacking = false
  320. isGrabbing = false
  321. elif $AnimatedSprite3D.animation == "attack_2":
  322. state = states.IDLE
  323. isAttacking = false
  324. isGrabbing = false
  325. elif $AnimatedSprite3D.animation == "attack_3":
  326. state = states.IDLE
  327. isAttacking = false
  328. isGrabbing = false
  329. elif $AnimatedSprite3D.animation == "singlepunch":
  330. $AnimatedSprite3D.play("idle")
  331. isAttacking = false
  332. canSinglePunch = false
  333. isGrabbing = false
  334.  
  335.  
  336.  
  337. func _on_right_button_release_timeout():
  338. can_press_right = true
  339.  
  340.  
  341. func _on_left_button_release_timeout():
  342. can_press_left = true
  343.  
  344.  
  345.  
  346. func _on_canMove_timeout():
  347. can_move = true
Tags: beat_em_up
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement