Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Player Code:
- ```
- extends KinematicBody2D
- export (int) var speed = 200
- onready var InvincibilityTimer = $InvincibilityTimer
- var velocity = Vector2()
- var hurtAnimTime = false
- onready var HurtAnimTimer = $HurtAnimTimer
- func get_input():
- velocity = Vector2()
- if Input.is_action_pressed("right") and Global.paused == false:
- velocity.x += 1
- if Input.is_action_pressed("left") and Global.paused == false:
- velocity.x -= 1
- if Input.is_action_pressed("down") and Global.paused == false:
- velocity.y += 1
- if Input.is_action_pressed("up") and Global.paused == false:
- velocity.y -= 1
- elif hurtAnimTime == true:
- velocity.x = 0
- velocity.y = 0
- velocity = velocity.normalized() * speed
- if Input.is_action_just_pressed("pause"):
- get_tree().call_group("Gamestate", "PauseGame")
- Global.paused = true
- func _physics_process(_delta):
- get_input()
- if velocity == Vector2.ZERO and hurtAnimTime == false:
- $AnimationTree.get("parameters/playback").travel("idle")
- elif hurtAnimTime == true:
- $AnimationTree.get("parameters/playback").travel("hurt")
- $AnimationTree.set("parameters/idle/blend_position", velocity)
- $AnimationTree.set("parameters/hurt/blend_position", velocity)
- else:
- $AnimationTree.get("parameters/playback").travel("walk")
- $AnimationTree.set("parameters/idle/blend_position", velocity)
- $AnimationTree.set("parameters/walk/blend_position", velocity)
- velocity = move_and_slide(velocity)
- func hurt():
- print("I'm hurt!")
- $AnimationPlayer.play("red_flash")
- $AnimationPlayer.queue("visible_flash")
- if HurtAnimTimer.is_stopped():
- hurtAnimTime = true
- HurtAnimTimer.start()
- #This should make our hurt animation play for when we are hit.
- if InvincibilityTimer.is_stopped():
- InvincibilityTimer.start()
- Global.hurt = true
- func heal():
- print("I'm healed!")
- func gem_up():
- print("I got a gem!")
- func _on_InvincibilityTimer_timeout():
- Global.hurt = false
- $AnimationPlayer.stop()
- func _on_HurtAnimTimer_timeout():
- hurtAnimTime = false
- ```
- Knight Enemy Code:
- ```
- extends Node2D
- var motion = Vector2()
- var state = 0
- #0 for nothing, 1 = right, 2 = left 3 = up 4 = down
- var AttackAnimTime = false
- onready var AttackAnimTimer = $AttackAnimTimer
- func _ready():
- pass
- #print(state)
- add_to_group("Gamestate")
- func _physics_process(delta):
- if state == 0:
- pass
- elif state == 1:
- motion.x = 100
- #straigh right
- elif state == 2:
- motion.x = -100
- #straight left
- elif state == 3:
- motion.y = 100
- #straight down
- elif state == 4:
- motion.y = -100
- #straight up
- elif state == 5:
- motion.y = -100
- motion.x = -100
- #diagonal up left
- elif state == 6:
- motion.x = 100
- motion.y = 100
- #diagonal down right
- elif state == 7:
- motion.x = 100
- motion.y = -100
- #diagonal up right
- elif state == 8:
- motion.x = -100
- motion.y = 100
- #diagonal down left
- if motion == Vector2.ZERO:
- $AnimationTree.get("parameters/playback").travel("idle")
- elif AttackAnimTime == true:
- $AnimationTree.get("parameters/playback").travel("attack")
- $AnimationTree.set("parameters/idle/blend_position", motion)
- $AnimationTree.set("parameters/attack/blend_position", motion)
- else:
- $AnimationTree.get("parameters/playback").travel("walk")
- $AnimationTree.set("parameters/idle/blend_position", motion)
- $AnimationTree.set("parameters/walk/blend_position", motion)
- position += motion * delta
- func _on_Hitbox_body_entered(body):
- if body.is_in_group("Trees"):
- #This makes it so if the knights collide with the tree, they despawn.
- queue_free()
- #print("Hit trees")
- elif Global.hurt == false:
- emit_signal("tree_exited")
- get_tree().call_group("Gamestate", "hurt")
- func _on_SightBox_body_entered(_body):
- if AttackAnimTimer.is_stopped():
- AttackAnimTime = true
- AttackAnimTimer.start()
- func _on_AttackAnimTimer_timeout():
- AttackAnimTime = false
- ```
- Main Game Code:
- ```
- extends Node2D
- var rand_x
- var rand_y
- var lives = 3
- var gems = 0
- onready var pause_menu = $PauseMenu
- onready var ResumeButton = $PauseMenu/MarginContainer/VBoxContainer/ResumeButton
- onready var MainMenuButton = $PauseMenu/MarginContainer/VBoxContainer/MainMenuButton
- onready var QuitButton = $PauseMenu/MarginContainer/VBoxContainer/QuitButton
- var EasyTotal = 10
- var MediumTotal = 20
- var HardTotal = 50
- onready var Spawn1 = $Spawn1
- onready var Spawn2 = $Spawn2
- onready var Spawn3 = $Spawn3
- onready var Spawn4 = $Spawn4
- onready var Spawn5 = $Spawn5
- onready var Spawn6 = $Spawn6
- onready var Spawn7 = $Spawn7
- onready var Spawn8 = $Spawn8
- var SpawnArray = [1, 2, 3, 4, 5, 6, 7, 8]
- var SpawnArrayBasket = []
- var SpawnChoice = 0
- onready var GemTimer = $GemTimer
- onready var HeartTimer = $HeartTimer
- onready var KnightTimer = $KnightTimer
- onready var Music = $Music
- onready var GemSound = $GemSound
- onready var HealSound = $HealSound
- onready var HitSound = $HitSound
- func _ready():
- add_to_group("Gamestate")
- Global.game_playing = true
- if Global.NewGemTotal == 10:
- GemTimer.wait_time = 3
- HeartTimer.wait_time = 15
- KnightTimer.wait_time = 2
- elif Global.NewGemTotal == 20:
- GemTimer.wait_time = 4
- HeartTimer.wait_time = 20
- KnightTimer.wait_time = 1.5
- else:
- GemTimer.wait_time = 5
- HeartTimer.wait_time = 25
- KnightTimer.wait_time = 0.5
- GemTimer.start()
- HeartTimer.start()
- print(SpawnArray)
- randomize()
- SpawnArrayBasket = SpawnArray.duplicate()
- SpawnArray.shuffle()
- Music.play()
- func PauseGame():
- if Global.paused and Global.game_playing:
- pause_menu.show()
- Engine.time_scale = 0
- ResumeButton.grab_focus()
- else:
- pause_menu.hide()
- Engine.time_scale = 1
- Global.paused = false
- func StartGame():
- pass
- # Called every frame. 'delta' is the elapsed time since the previous frame.
- #func _process(delta):
- # pass
- func _on_HeartTimer_timeout():
- var NewHeart = preload("res://Player and Enemies/Heart.tscn").instance()
- rand_x = rand_range(70, 500)
- rand_y = rand_range(70, 550)
- NewHeart.global_position = Vector2(rand_x, rand_y)
- add_child(NewHeart)
- func _on_GemTimer_timeout():
- var NewGem = preload("res://Player and Enemies/Gem.tscn").instance()
- rand_x = rand_range(70, 500)
- rand_y = rand_range(70, 550)
- NewGem.global_position = Vector2(rand_x, rand_y)
- add_child(NewGem)
- func RollForNumber():
- if SpawnArray.empty():
- #Fill the SpawnArray again and shuffle it.
- #Makes it so it is way less likely to get the same random
- #variable twice in a row.
- SpawnArray = SpawnArrayBasket.duplicate()
- SpawnArray.shuffle()
- var FirstSpawn = SpawnArray.pop_front()
- return FirstSpawn
- else:
- SpawnChoice = int(SpawnArray[randi() % SpawnArray.size()])
- #print(SpawnChoice)
- func SpawnPlace():
- var NewKnight = preload("res://Player and Enemies/KnightEnemyAnimated.tscn").instance()
- if SpawnChoice == 1:
- NewKnight.global_position = Spawn1.position
- add_child(NewKnight)
- NewKnight.state = 6
- if SpawnChoice == 2:
- NewKnight.global_position = Spawn2.position
- add_child(NewKnight)
- var DirectionArray = [1, 6, 7]
- var DirectionChoice = int(DirectionArray[randi() % DirectionArray.size()])
- NewKnight.state = DirectionChoice
- if SpawnChoice == 3:
- NewKnight.global_position = Spawn3.position
- add_child(NewKnight)
- NewKnight.state = 7
- if SpawnChoice == 4:
- NewKnight.global_position = Spawn4.position
- add_child(NewKnight)
- var DirectionArray = [3, 6, 8]
- var DirectionChoice = int(DirectionArray[randi() % DirectionArray.size()])
- NewKnight.state = DirectionChoice
- if SpawnChoice == 5:
- NewKnight.global_position = Spawn5.position
- add_child(NewKnight)
- var DirectionArray = [4, 5, 7]
- var DirectionChoice = int(DirectionArray[randi() % DirectionArray.size()])
- NewKnight.state = DirectionChoice
- if SpawnChoice == 6:
- NewKnight.global_position = Spawn6.position
- add_child(NewKnight)
- NewKnight.state = 8
- if SpawnChoice == 7:
- NewKnight.global_position = Spawn7.position
- add_child(NewKnight)
- var DirectionArray = [2, 5, 8]
- var DirectionChoice = int(DirectionArray[randi() % DirectionArray.size()])
- NewKnight.state = DirectionChoice
- if SpawnChoice == 8:
- NewKnight.global_position = Spawn8.position
- add_child(NewKnight)
- NewKnight.state = 5
- else:
- pass
- var DirectionVariable = NewKnight.get("state")
- #print(DirectionVariable)
- if DirectionVariable == 1:
- pass
- func _on_KnightTimer_timeout():
- RollForNumber()
- SpawnPlace()
- func heal():
- lives += 1
- $Player.heal()
- HealSound.play()
- get_tree().call_group("Lives+Gems", "heal", lives)
- if lives == 0:
- end_game()
- func hurt():
- lives -= 1
- $Player.hurt()
- HitSound.play()
- get_tree().call_group("Lives+Gems", "hurt", lives)
- if lives == 0:
- end_game()
- func gem_up():
- #Make sure plus sign is first to properly change scenes
- gems += 1
- GemSound.play()
- if gems == Global.NewGemTotal:
- won_game()
- else:
- $Player.gem_up()
- get_tree().call_group("Lives+Gems", "gem_up", gems)
- func won_game():
- # warning-ignore:return_value_discarded
- get_tree().change_scene("res://Levels/WinScreen.tscn")
- func end_game():
- # warning-ignore:return_value_discarded
- get_tree().change_scene("res://Levels/LoseScreen.tscn")
- ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement