Skip to content

Commit

Permalink
Finished menus; game over works; terrain now places enemies, exit, an…
Browse files Browse the repository at this point in the history
…d player
  • Loading branch information
svntax committed Jun 27, 2016
1 parent 6e6850d commit 8cad253
Show file tree
Hide file tree
Showing 15 changed files with 148 additions and 8 deletions.
Binary file added Scenes/cave_exit.scn
Binary file not shown.
Binary file added Scenes/gameover_ui.scn
Binary file not shown.
Binary file modified Scenes/player_lives.scn
Binary file not shown.
Binary file modified Scenes/terrain.scn
Binary file not shown.
11 changes: 7 additions & 4 deletions Scripts/cavebat_controls.gd
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ extends KinematicBody2D

var SPEED = 1
var THRESHOLD = 8
var AGGRO_RANGE = 600

var anim
var frames
Expand All @@ -15,7 +16,7 @@ var animTimer = 0
func _ready():
anim = get_node("AnimationPlayer")
frames = get_node("AnimatedSprite")
player = get_parent().get_node("Player")
player = get_tree().get_nodes_in_group("players")[0]
set_fixed_process(true)

func _fixed_process(delta):
Expand All @@ -42,8 +43,10 @@ func _fixed_process(delta):
velY = SPEED
if(abs(py - by) <= THRESHOLD):
velY = 0
move(Vector2(velX, 0))
move(Vector2(0, velY))

if(get_pos().distance_to(player.get_pos()) <= AGGRO_RANGE):
move(Vector2(velX, 0))
move(Vector2(0, velY))

checkCollision()
else:
Expand All @@ -63,7 +66,7 @@ func checkCollision():
if(other.get_instance_ID() == player.get_instance_ID()):
if(!dead):
kill()
get_parent().find_node("Lives").damage()
get_tree().get_nodes_in_group("lives_ui")[0].damage()
player.knockback(Vector2(velX, velY))

func kill():
Expand Down
2 changes: 1 addition & 1 deletion Scripts/debris_system.gd
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
extends Node2D

var dirt
var SPAWN_RANGE = 8
var SPAWN_RANGE = 6
var SPAWN_CHANCE = 0.7
var MIN_DIST_AWAY = 64
var size = 16
Expand Down
13 changes: 13 additions & 0 deletions Scripts/exit_controls.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@

extends Area2D

var player

func _ready():
player = get_tree().get_nodes_in_group("players")[0]
set_fixed_process(true)

func _fixed_process(delta):
if(overlaps_body(player)):
print("Exit found!")

26 changes: 26 additions & 0 deletions Scripts/gameover_controls.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@

extends VBoxContainer

func _ready():
pass

func _draw():
draw_rect(Rect2(-2, -2, get_size().x+4, get_size().y+4), Color(255, 255, 255))
draw_rect(Rect2(-1, -1, get_size().x+2, get_size().y+2), Color(0, 0, 0))

func toggle():
if(get_index() != get_parent().get_child_count() - 1):
get_parent().move_child(self, get_parent().get_child_count() - 1)
show()
var w = get_viewport().get_rect().size.x
var h = get_viewport().get_rect().size.y
var player = get_tree().get_nodes_in_group("players")[0]
var playerCam = player.find_node("Camera2D")
var x = playerCam.get_camera_pos().x - (w / 4)
var y = playerCam.get_camera_pos().y - (h / 4)
set_pos(Vector2(x, y + 40))

func _on_Button_pressed():
get_tree().set_pause(false)
get_tree().change_scene("res://Scenes/main_menu.scn")
hide()
4 changes: 3 additions & 1 deletion Scripts/lives_system.gd
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,6 @@ func damage():
get_children()[LIVES].queue_free()
LIVES -= 1
if(LIVES <= 0):
print("You died!")
var gameOverMenu = get_parent().find_node("GameOverMenu")
gameOverMenu.toggle()
get_tree().set_pause(true)
39 changes: 39 additions & 0 deletions Scripts/player_controls.gd
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ var frictionX = 0.6
var knockbackX = 8
var knockbackY = 3
var onGround = false
var teleportCoolingDown = false
var teleportTimer = 0
var maxTeleportTimer = 0.1 #teleport cooldown

var rockProjectileScene = load("res://Scenes/rock_projectile.scn")

Expand All @@ -23,6 +26,9 @@ func _input(event):
if(event.type == InputEvent.MOUSE_BUTTON):
if(event.button_index == BUTTON_LEFT && event.pressed):
shootProjectile(event.pos)
elif(event.button_index == BUTTON_RIGHT && event.pressed):
if(!teleportCoolingDown):
teleport(event.pos)

func _fixed_process(delta):
if(Input.is_action_pressed("UI_PAUSE")):
Expand All @@ -31,6 +37,13 @@ func _fixed_process(delta):
pauseMenu.toggle()
get_tree().set_pause(true)

#teleport cooldown check
if(teleportCoolingDown):
teleportTimer += delta
if(teleportTimer >= maxTeleportTimer):
teleportCoolingDown = false
teleportTimer = 0

if(test_move(Vector2(0, 1))):
onGround = true
else:
Expand Down Expand Up @@ -73,6 +86,32 @@ func shootProjectile(mousePos):
rock.setVelocity(dir.x*5, -dir.y*5)
get_parent().add_child(rock)

func teleport(mousePos):
var cam = find_node("Camera2D")
var w = get_viewport().get_rect().size.x
var h = get_viewport().get_rect().size.y
var cx = cam.get_camera_pos().x - (w / 2)
var cy = cam.get_camera_pos().y - (h / 2)
var mx = cx + mousePos.x
var my = cy + mousePos.y

var terrain = get_tree().get_nodes_in_group("terrain_group")[0]
var terrainPos = terrain.get_pos()
var size = terrain.getTileSize()
if(mx < terrainPos.x || mx > terrainPos.x + terrain.getWidth()*size):
return
if(my < terrainPos.y || my > terrainPos.y + terrain.getHeight()*size):
return

var prevPos = get_pos()
set_pos(Vector2(mx, my))
#if teleport unsuccessful, no cooldown
if(is_colliding()):
set_pos(prevPos)
teleportCoolingDown = false
else:
teleportCoolingDown = true

func moveX():
var currentVel = Vector2(vel.x, 0)
move(currentVel)
Expand Down
5 changes: 4 additions & 1 deletion Scripts/terrain_debug.gd
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,17 @@ var terrainNode
func _ready():
terrainNode = scene.instance()
add_child(terrainNode)
set_process_input(true)
#set_process_input(true)
pass

func _input(event):
if(event.type == InputEvent.KEY):
if(event.scancode == KEY_R && !event.is_echo()):
if(!r_pressed):
terrainNode.queue_free()
remove_child(terrainNode)
for enemy in get_tree().get_nodes_in_group("enemies"):
enemy.queue_free()
terrainNode = scene.instance()
add_child(terrainNode)
r_pressed = !r_pressed
Expand Down
54 changes: 53 additions & 1 deletion Scripts/terrain_gen.gd
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ var TILE_SIZE = 32
var TERRAIN_WIDTH = 60
var TERRAIN_HEIGHT = 38
var INITIAL_CHANCE = 0.4
var ENEMY_SPAWN_CHANCE = 0.75

var MIN_FOR_ALIVE = 3
var MIN_FOR_DEAD = 4
Expand All @@ -15,6 +16,8 @@ var g_pressed = false

var scene = load("res://Scenes/terrain_wall.scn")
var outerWallScene = load("res://Scenes/outer_wall.scn")
var cavebatScene = load("res://Scenes/cavebat.scn")
var caveExitScene = load("res://Scenes/cave_exit.scn")

func _ready():
for i in range(TERRAIN_WIDTH):
Expand All @@ -27,6 +30,9 @@ func _ready():
cellularAutomata()
spawnOuterWalls()
spawnWalls()
var spawnPoints = spawnCaveExit()
spawnEnemies()
spawnPlayer(spawnPoints)

set_process(true)
#set_process_input(true)
Expand Down Expand Up @@ -138,6 +144,53 @@ func spawnWalls():
#elif(terrain[i][j] == 0):
#draw_rect(block, Color(1, 1, 1, 1))

func spawnEnemies():
for i in range(TERRAIN_WIDTH):
for j in range(TERRAIN_HEIGHT):
randomize()
if(randf() > ENEMY_SPAWN_CHANCE):
continue
if(terrain[i][j] == 0):
if(getNeighborsCount(terrain, i, j) == 5):
var cavebat = cavebatScene.instance()
cavebat.set_pos(Vector2(i*TILE_SIZE, j*TILE_SIZE))
get_parent().add_child(cavebat)

func spawnCaveExit():
var spawnedExit = false
var spawnPoints = []
for i in range(TERRAIN_WIDTH):
for j in range(TERRAIN_HEIGHT):
if(i > 5 && j > 5 && i < TERRAIN_WIDTH - 5 && j < TERRAIN_HEIGHT - 5):
var center = terrain[i][j]
var left = terrain[i-1][j]
var right = terrain[i+1][j]
var down = terrain[i][j+1]
var up = terrain[i][j-1]
var upLeft = terrain[i-1][j-1]
var upRight = terrain[i+1][j-1]
var empty = center + left + right + up + upLeft + upRight
if(empty == 0 && down == 1):
spawnPoints.append(Vector2(i*TILE_SIZE, j*TILE_SIZE-8))
#var caveExit = caveExitScene.instance()
#caveExit.set_pos(Vector2(i*TILE_SIZE, j*TILE_SIZE - 8))
#get_parent().add_child(caveExit)
#return
randomize()
var choice = randi() % spawnPoints.size()
var caveExit = caveExitScene.instance()
caveExit.set_pos(spawnPoints[choice])
get_parent().add_child(caveExit)
spawnPoints.remove(spawnPoints.find(spawnPoints[choice]))
return spawnPoints

func spawnPlayer(spawnPoints):
var player = get_tree().get_nodes_in_group("players")[0]
randomize()
var choice = randi() % spawnPoints.size()
var newPos = spawnPoints[choice]
player.set_pos(Vector2(newPos.x, newPos.y))

func spawnOuterWalls():
var wallTop = outerWallScene.instance()
var shapeTop = RectangleShape2D.new()
Expand Down Expand Up @@ -173,4 +226,3 @@ func spawnOuterWalls():
wallRight.set_pos(Vector2(TERRAIN_WIDTH*TILE_SIZE, TERRAIN_HEIGHT*TILE_SIZE/2))
wallRight.add_shape(shapeRight)
add_child(wallRight)

Binary file added Sprites/caveExit.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions Sprites/caveExit.png.flags
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
filter=false
gen_mipmaps=false
Binary file modified test_scene.scn
Binary file not shown.

0 comments on commit 8cad253

Please sign in to comment.