Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extends KinematicBody
- var can_reversal_grab = true
- var canBackfistActive = false
- var canBackfist = true
- var player_combating
- var canCombo = false
- var player_stunned = true
- var kneeSmashCount = 0
- var canKneeSmash
- var canReleaseEnemy = true
- var canSinglePunch = false
- var velocity = Vector3()
- var speed = 0.7
- var isAttacking
- var input_vector = Vector3.ZERO
- var AttackPoints = 3
- var target_enemy
- var player_timer
- var enemy_hitbox
- var can_press_right = false
- var can_press_left = false
- var isGrabbing
- var facing_direction = Vector3.RIGHT
- var enemy_entered = false
- var isUppercut = true
- var isCombo = false
- var isWalking = false
- var can_move = true
- var press_up = Input.is_action_just_pressed("ui_up")
- var canThrowEnemy = false
- var has_thrown_enemy = false
- var can_jump = true
- var can_flying_attack = false
- var can_hammer_fist = false
- onready var attackDelay = $AttackDelayTimer
- onready var ComboDelay = $ComboPauseTimer
- onready var RightButtonRelease = $right_button_release
- onready var LeftButtonRelease = $left_button_release
- onready var GrabHoldTimer = $GrabTimer
- onready var uppercutPause = $uppercutPauseTimer
- onready var AnimSprite = $AnimatedSprite3D
- onready var enemy_attack_collisiion = get_node("../enemy/AnimatedSprite3D/playerAttackArea/CollisionShape")
- onready var player_backfist_collision = $AnimatedSprite3D/backFist/CollisionShape
- onready var enemy_upper_rotation_collision = get_node("../enemy/AnimatedSprite3D/enemy_upper_rotation/CollisionShape")
- onready var enemy_lower_rotation_collision = get_node("../enemy/AnimatedSprite3D/enemy_lower_rotation/CollisionShape")
- onready var enemy_rear_grab_collision = get_node("../enemy/AnimatedSprite3D/RearGrabArea/CollisionShape")
- export var jump_height = 1.5
- export var jump_time_to_peak = 0.4 #decreasing this number makes player reach peak faster
- export var jump_time_to_descent = 0.4 #increasing this number slows down descent
- onready var jump_velocity = ((2.0 * jump_height) / jump_time_to_peak)
- onready var jump_gravity = ((-2.0 * jump_height) / (jump_time_to_peak * jump_time_to_peak))
- onready var fall_gravity = ((-2.0 * jump_height) / (jump_time_to_descent * jump_time_to_descent))
- enum states {
- IDLE
- WALK
- ATTACK1
- ATTACK2
- ATTACK3
- GRABBING
- SINGLEPUNCH
- UPPERCUT
- KNEESMASH
- PLAYER_STUNNED
- BACKFIST
- BACKFIST_NEUTRAL
- REVERSAL_GRAB
- GRAB_LEFT
- RELEASE_ENEMY
- SHOULDER_THROW
- JUMP
- FLYING_KICK
- HAMMER_FIST
- }
- var state = states.IDLE
- func _ready():
- target_enemy = get_tree().current_scene.get_node("enemy")
- can_press_right = true
- can_press_left = true
- #set_render_priority(1)
- #enemy_attack_collisiion.disabled = true
- func _physics_process(delta):
- update_animation()
- get_input(delta)
- combo()
- flip_dir()
- singlePunch()
- player_stunned()
- func singlePunch():
- if not isAttacking and state != states.JUMP and state != states.FLYING_KICK:
- if not isGrabbing:
- $AnimatedSprite3D/objectArea/CollisionShape.disabled = true
- if Input.is_action_just_pressed("attack") and state != states.UPPERCUT:
- if not canSinglePunch:
- velocity.x = 0
- velocity.z = 0
- speed = 0
- state = states.SINGLEPUNCH
- canSinglePunch = true
- can_move = false
- ComboDelay.start(0.22)
- func combo():
- #if not isAttacking and state != states.REVERSAL_GRAB:
- if Input.is_action_just_pressed("attack") and AttackPoints > 0 and enemy_entered \
- and canCombo:
- enemy_attack_collisiion.disabled = true
- $invincibleTimer.start()
- $AttackRestTimer.start()
- $AnimatedSprite3D/enemyArea/CollisionShape.disabled = false
- isAttacking = true
- isGrabbing = false
- can_move = false
- ComboDelay.start(0.7)
- if AttackPoints == 3:
- AttackPoints -= 1
- velocity = Vector3.ZERO
- state = states.ATTACK1
- target_enemy.state = target_enemy.states.STUNNED
- target_enemy.isStunned = true
- elif AttackPoints == 2:
- velocity.x = 0
- velocity.z = 0
- AttackPoints -= 1
- state = states.ATTACK2
- target_enemy.state = target_enemy.states.STUNNED
- target_enemy.isStunned = true
- elif AttackPoints == 1:
- velocity.x = 0
- velocity.z = 0
- AttackPoints -= 1
- velocity = Vector3.ZERO
- state = states.ATTACK3
- ComboDelay.start(1)
- target_enemy.state = target_enemy.states.STUNNED
- yield(get_tree().create_timer(0.3), "timeout")
- target_enemy.state = target_enemy.states.KNOCKBACK
- func _on_AttackRestTimer_timeout():
- AttackPoints = 3
- func _on_AttackDelayTimer_timeout():
- can_move = true
- func _on_ComboPauseTimer_timeout():
- resumeFromCombo()
- func resumeFromCombo():
- #isCombo = false
- can_move = true
- func _on_enemyArea_area_entered(area):
- if area.get_groups().has("enemyStunned"):
- enemy_entered = true
- canCombo = true
- func _on_enemyArea_area_exited(area):
- if area.get_groups().has("enemyStunned"):
- enemy_entered = false
- func get_input(delta):
- if not isAttacking:
- if target_enemy && target_enemy.state == target_enemy.states.GRABBED:
- isGrabbing = false
- isWalking = false
- can_move = false
- if can_move and is_on_floor():
- velocity = Vector3.ZERO
- if Input.is_action_pressed("ui_left") and can_press_left and not isGrabbing:
- velocity.x -= 2
- state = states.WALK
- can_press_left = true
- if Input.is_action_pressed("ui_right") and can_press_right and not isGrabbing:
- velocity.x += 2
- state = states.WALK
- can_press_right = true
- if Input.is_action_pressed("ui_down"):
- velocity.z += 3
- state = states.WALK
- if Input.is_action_pressed("ui_up"):
- velocity.z -= 3
- state = states.WALK
- if velocity.x == 0 and velocity.z == 0:
- state = states.IDLE
- #gravity(delta)
- #velocity = move_and_slide(velocity, Vector3.UP)
- #var _motion = velocity.normalized() * speed
- func _on_punchDelay_timeout():
- isAttacking = true
- func player_stunned():
- if player_stunned:
- if target_enemy.enemy_attacking:
- target_enemy.state = target_enemy.states.ATTACK_1
- state = states.PLAYER_STUNNED
- can_move = false
- canCombo = false
- canBackfist = false
- $stunTimer.start()
- isAttacking = false
- velocity = Vector3.ZERO
- can_press_right = false
- $right_button_release.start()
- else:
- canBackfist = true
- func _on_playerStunned_area_entered(area):
- if area.get_groups().has ("enemy_attack"):
- player_stunned = true
- func _on_playerStunned_area_exited(area):
- if area.get_groups().has ("enemy_attack"):
- player_stunned = false
- canCombo = true
- canSinglePunch = false
- #can_move = true
- func _on_stunTimer_timeout():
- canCombo = true
- can_move = true
- func _on_enemy_delay_attack_timeout():
- target_enemy.enemy_attacking = true
- func startComboAttack():
- player_combating = true
- func finishComboAttack():
- player_combating = false
- func flip_dir():
- if velocity.x > 0.001:
- facing_direction = Vector3.RIGHT
- AnimSprite.scale.x = 1
- elif velocity.x < -0.001:
- facing_direction = Vector3.LEFT
- AnimSprite.scale.x = -1
- func update_animation():
- match state:
- states.IDLE:
- $AnimatedSprite3D.play("idle")
- states.WALK:
- $AnimatedSprite3D.play("walking")
- states.ATTACK1:
- $AnimatedSprite3D.play("attack_1")
- states.ATTACK2:
- $AnimatedSprite3D.play("attack_2")
- states.ATTACK3:
- $AnimatedSprite3D.play("attack_3")
- states.SINGLEPUNCH:
- $AnimatedSprite3D.play("singlepunch")
- states.PLAYER_STUNNED:
- $AnimatedSprite3D.play("stunned")
- func _on_AnimatedSprite3D_animation_finished():
- if $AnimatedSprite3D.animation == "attack_1":
- state = states.IDLE
- isAttacking = false
- isGrabbing = false
- elif $AnimatedSprite3D.animation == "attack_2":
- state = states.IDLE
- isAttacking = false
- isGrabbing = false
- elif $AnimatedSprite3D.animation == "attack_3":
- state = states.IDLE
- isAttacking = false
- isGrabbing = false
- elif $AnimatedSprite3D.animation == "singlepunch":
- $AnimatedSprite3D.play("idle")
- isAttacking = false
- canSinglePunch = false
- isGrabbing = false
- func _on_right_button_release_timeout():
- can_press_right = true
- func _on_left_button_release_timeout():
- can_press_left = true
- func _on_canMove_timeout():
- can_move = true
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement