new space shooter demo

ortho camera sort fix, closes #2063
This commit is contained in:
Juan Linietsky
2015-06-11 09:55:38 -03:00
parent bc6d91c897
commit 9e479065f5
44 changed files with 468 additions and 44 deletions

View File

@ -0,0 +1,49 @@
extends Area2D
# member variables here, example:
# var a=2
# var b="textvar"
const SPEED=-200
const Y_RANDOM=10
var points=1
var speed_y=0.0
func _process(delta):
translate( Vector2(SPEED,speed_y) * delta )
func _ready():
# Initialization here
speed_y=rand_range(-Y_RANDOM,Y_RANDOM)
pass
var destroyed=false
func destroy():
if (destroyed):
return
destroyed=true
get_node("anim").play("explode")
set_process(false)
get_node("sfx").play("sound_explode")
#accum points
get_node("/root/game_state").points+=1
func is_enemy():
return not destroyed
func _on_visibility_enter_screen():
set_process(true)
#make it spin!
get_node("anim").play("spin")
func _on_visibility_exit_screen():
queue_free()
pass # replace with function body

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 B

View File

@ -0,0 +1,37 @@
extends Area2D
# member variables here, example:
# var a=2
# var b="textvar"
const SPEED=-200
func _process(delta):
get_parent().translate(Vector2(SPEED*delta,0))
var destroyed=false
func is_enemy():
return not destroyed
func destroy():
if (destroyed):
return
destroyed=true
get_node("anim").play("explode")
set_process(false)
get_node("sfx").play("sound_explode")
#accum points
get_node("/root/game_state").points+=5
func _on_visibility_enter_screen():
set_process(true)
get_node("anim").play("zigzag")
get_node("anim").seek(randf()*2.0) #make it start from any pos
func _on_visibility_exit_screen():
queue_free()

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

View File

@ -0,0 +1,56 @@
extends Area2D
# member variables here, example:
# var a=2
# var b="textvar"
const SPEED=-220
const SHOOT_INTERVAL=1
var shoot_timeout=0
func _process(delta):
translate( Vector2(SPEED*delta,0) )
shoot_timeout-=delta
if (shoot_timeout<0):
shoot_timeout=SHOOT_INTERVAL
#instance a shot
var shot = preload("res://enemy_shot.scn").instance()
#set pos as "shoot_from" Position2D node
shot.set_pos( get_node("shoot_from").get_global_pos() )
#add it to parent, so it has world coordinates
get_parent().add_child(shot)
var destroyed=false
func is_enemy():
return not destroyed
func destroy():
if (destroyed):
return
destroyed=true
get_node("anim").play("explode")
set_process(false)
get_node("sfx").play("sound_explode")
#accum points
get_node("/root/game_state").points+=10
func _ready():
set_fixed_process(true)
# Initialization here
pass
func _on_visibility_enter_screen():
set_process(true)
pass # replace with function body
func _on_visibility_exit_screen():
queue_free()
pass # replace with function body

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

View File

@ -0,0 +1,32 @@
extends Area2D
# member variables here, example:
# var a=2
# var b="textvar"
const SPEED = -800
func _process(delta):
translate(Vector2(delta*SPEED,0))
func _ready():
# Initialization here
set_process(true)
var hit=false
func is_enemy():
return true
func _hit_something():
if (hit):
return
hit=true
set_process(false)
get_node("anim").play("splash")
func _on_visibility_exit_screen():
queue_free()

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 B

Binary file not shown.

View File

@ -0,0 +1,21 @@
[application]
name="Simple Shooter"
main_scene="res://main_menu.scn"
[autoload]
game_state="res://game_state.gd"
[display]
width=1024
height=600
[input]
move_up=[key(Up)]
move_down=[key(Down)]
move_left=[key(Left)]
move_right=[key(Right)]
shoot=[key(Space)]

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 357 B

View File

@ -0,0 +1,24 @@
extends Node
var points = 0
var max_points = 0
func _ready():
var f = File.new()
#load high score
if (f.open("user://highscore",File.READ)==OK):
max_points=f.get_var()
func game_over():
if (points>max_points):
max_points=points
#save high score
var f = File.new()
f.open("user://highscore",File.WRITE)
f.store_var(max_points)

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,20 @@
extends Control
# member variables here, example:
# var a=2
# var b="textvar"
func _ready():
get_node("score").set_text( "HIGH SCORE: "+str( get_node("/root/game_state").max_points ) )
# Initialization here
pass
func _on_play_pressed():
get_node("/root/game_state").points=0
get_tree().change_scene("res://level.scn")
pass # replace with function body

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

View File

@ -0,0 +1,26 @@
extends Node2D
const SPEED=200
# member variables here, example:
# var a=2
# var b="textvar"
func stop():
set_process(false)
var offset=0
func _process(delta):
offset+=delta*SPEED
set_pos(Vector2(offset,0))
func _ready():
set_process(true)
# Initialization here

View File

@ -0,0 +1,88 @@
extends Area2D
# member variables here, example:
# var a=2
# var b="textvar"
const SPEED = 200
var screen_size
var prev_shooting=false
func _process(delta):
var motion = Vector2()
if Input.is_action_pressed("move_up"):
motion+=Vector2(0,-1)
if Input.is_action_pressed("move_down"):
motion+=Vector2(0,1)
if Input.is_action_pressed("move_left"):
motion+=Vector2(-1,0)
if Input.is_action_pressed("move_right"):
motion+=Vector2(1,0)
var shooting = Input.is_action_pressed("shoot")
var pos = get_pos()
pos+=motion*delta*SPEED
if (pos.x<0):
pos.x=0
if (pos.x>screen_size.x):
pos.x=screen_size.x
if (pos.y<0):
pos.y=0
if (pos.y>screen_size.y):
pos.y=screen_size.y
set_pos(pos)
if (shooting and not prev_shooting):
# just pressed
var shot = preload("res://shot.scn").instance()
#use the position3d as reference
shot.set_pos( get_node("shootfrom").get_global_pos() )
#put it two parents above, so it is not moved by us
get_node("../..").add_child(shot)
#play sound
get_node("sfx").play("shoot")
prev_shooting = shooting
#update points counter
get_node("../hud/score_points").set_text( str(get_node("/root/game_state").points) )
func _ready():
# Initialization here
screen_size = get_viewport().get_rect().size
set_process(true)
pass
var killed=false
func _hit_something():
if (killed):
return
killed=true
get_node("anim").play("explode")
get_node("sfx").play("sound_explode")
get_node("../hud/game_over").show()
get_node("/root/game_state").game_over()
get_parent().stop()
set_process(false)
func _on_ship_body_enter( body ):
_hit_something()
func _on_ship_area_enter( area ):
if (area.has_method("is_enemy") and area.is_enemy()):
_hit_something()
func _on_back_to_menu_pressed():
get_tree().change_scene("res://main_menu.scn")
pass # replace with function body

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 B

View File

@ -0,0 +1,47 @@
extends Area2D
# member variables here, example:
# var a=2
# var b="textvar"
const SPEED = 800
func _process(delta):
translate(Vector2(delta*SPEED,0))
func _ready():
# Initialization here
set_process(true)
pass
var hit=false
func _hit_something():
if (hit):
return
hit=true
set_process(false)
get_node("anim").play("splash")
func _on_visibility_exit_screen():
queue_free()
pass # replace with function body
func _on_shot_area_enter( area ):
#hit an enemy or asteroid
if (area.has_method("destroy")):
#duck typing at it's best
area.destroy()
_hit_something()
pass
func _on_shot_body_enter( body ):
#hit the tilemap
_hit_something()
pass # replace with function body

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 810 B