Skip to content
This repository was archived by the owner on Sep 22, 2020. It is now read-only.

Commit 205d5e3

Browse files
Added a spawning system for the player.
Now the player respawns when their health reaches zero. Added a debug menu. Finished writing the code for the title screen. Added a respawn point setter. Player now starts at a random respawn point. Small fixes.
1 parent e5b9725 commit 205d5e3

15 files changed

+2009
-1580
lines changed

Debug_Display.gd

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
extends Control
2+
3+
func _ready():
4+
# Set the OS label and the engine version label
5+
$OS_Label.text = "OS:" + OS.get_name()
6+
$Engine_Label.text = "Godot version:" + Engine.get_version_info()["string"]
7+
8+
func _process(delta):
9+
# Update the FPS label
10+
$FPS_Label.text = "FPS:" + str(Engine.get_frames_per_second())

Debug_Display.tscn

+102
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
[gd_scene load_steps=2 format=2]
2+
3+
[ext_resource path="res://Debug_Display.gd" type="Script" id=1]
4+
5+
[node name="Debug_Display" type="Control" index="0"]
6+
7+
modulate = Color( 1, 1, 1, 0.784314 )
8+
anchor_left = 1.0
9+
anchor_top = 0.0
10+
anchor_right = 1.0
11+
anchor_bottom = 0.0
12+
margin_left = -280.0
13+
margin_bottom = 70.0
14+
rect_pivot_offset = Vector2( 0, 0 )
15+
rect_clip_content = false
16+
mouse_filter = 0
17+
mouse_default_cursor_shape = 0
18+
size_flags_horizontal = 1
19+
size_flags_vertical = 1
20+
script = ExtResource( 1 )
21+
_sections_unfolded = [ "Visibility" ]
22+
23+
[node name="Panel" type="Panel" parent="." index="0"]
24+
25+
anchor_left = 0.0
26+
anchor_top = 0.0
27+
anchor_right = 1.0
28+
anchor_bottom = 1.0
29+
rect_pivot_offset = Vector2( 0, 0 )
30+
rect_clip_content = false
31+
mouse_filter = 0
32+
mouse_default_cursor_shape = 0
33+
size_flags_horizontal = 1
34+
size_flags_vertical = 1
35+
36+
[node name="FPS_Label" type="Label" parent="." index="1"]
37+
38+
anchor_left = 0.0
39+
anchor_top = 0.0
40+
anchor_right = 1.0
41+
anchor_bottom = 0.0
42+
margin_left = 10.0
43+
margin_top = 10.0
44+
margin_right = -5.0
45+
margin_bottom = 30.0
46+
rect_pivot_offset = Vector2( 0, 0 )
47+
rect_clip_content = false
48+
mouse_filter = 2
49+
mouse_default_cursor_shape = 0
50+
size_flags_horizontal = 1
51+
size_flags_vertical = 4
52+
text = "FPS: 60"
53+
percent_visible = 1.0
54+
lines_skipped = 0
55+
max_lines_visible = -1
56+
_sections_unfolded = [ "Margin" ]
57+
58+
[node name="OS_Label" type="Label" parent="." index="2"]
59+
60+
anchor_left = 0.0
61+
anchor_top = 0.0
62+
anchor_right = 1.0
63+
anchor_bottom = 0.0
64+
margin_left = 10.0
65+
margin_top = 30.0
66+
margin_right = -5.0
67+
margin_bottom = 50.0
68+
rect_pivot_offset = Vector2( 0, 0 )
69+
rect_clip_content = false
70+
mouse_filter = 2
71+
mouse_default_cursor_shape = 0
72+
size_flags_horizontal = 1
73+
size_flags_vertical = 4
74+
text = "OS:Windows"
75+
percent_visible = 1.0
76+
lines_skipped = 0
77+
max_lines_visible = -1
78+
_sections_unfolded = [ "Margin" ]
79+
80+
[node name="Engine_Label" type="Label" parent="." index="3"]
81+
82+
anchor_left = 0.0
83+
anchor_top = 0.0
84+
anchor_right = 1.0
85+
anchor_bottom = 0.0
86+
margin_left = 10.0
87+
margin_top = 50.0
88+
margin_right = -5.0
89+
margin_bottom = 70.0
90+
rect_pivot_offset = Vector2( 0, 0 )
91+
rect_clip_content = false
92+
mouse_filter = 2
93+
mouse_default_cursor_shape = 0
94+
size_flags_horizontal = 1
95+
size_flags_vertical = 4
96+
text = "Godot version:"
97+
percent_visible = 1.0
98+
lines_skipped = 0
99+
max_lines_visible = -1
100+
_sections_unfolded = [ "Margin" ]
101+
102+

Globals.gd

+91
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
extends Node
2+
3+
const TITLE_SCREEN_PATH = "res://Main_Menu.tscn"
4+
5+
const POPUP_SCENE = preload("res://Pause_Popup.tscn")
6+
var popup = null
7+
var canvas_layer = null
8+
9+
const DEBUG_DISPLAY_SCENE = preload("res://Debug_Display.tscn")
10+
var debug_display = null
11+
12+
var respawn_points = null
13+
14+
func _ready():
15+
# Remove this if you want determinstic random functions
16+
randomize()
17+
# Make a new canvas layer.
18+
# This is so our popup always appears on top of everything else
19+
canvas_layer = CanvasLayer.new()
20+
add_child(canvas_layer)
21+
22+
23+
24+
func get_respawn_position():
25+
if respawn_points == null:
26+
return Vector3(0, 0, 0)
27+
else:
28+
var respawn_point = rand_range(0, respawn_points.size()-1);
29+
return respawn_points[respawn_point].global_transform.origin;
30+
31+
32+
func load_new_scene(new_scene_path):
33+
respawn_points = null
34+
get_tree().change_scene(new_scene_path)
35+
36+
37+
func _process(delta):
38+
if Input.is_action_just_pressed("ui_cancel"):
39+
if popup == null:
40+
# Make a new popup scene
41+
popup = POPUP_SCENE.instance()
42+
43+
# Connect the signals
44+
popup.get_node("Button_quit").connect("pressed", self, "popup_quit")
45+
popup.connect("popup_hide", self, "popup_closed")
46+
popup.get_node("Button_resume").connect("pressed", self, "popup_closed")
47+
48+
# Add it as a child, and make it pop up in the center of the screen
49+
canvas_layer.add_child(popup)
50+
popup.popup_centered()
51+
52+
# Make sure the mouse is visible
53+
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
54+
55+
# Pause the game
56+
get_tree().paused = true
57+
58+
59+
func popup_closed():
60+
# Unpause the game
61+
get_tree().paused = false
62+
63+
# If we have a popup, destoy it
64+
if popup != null:
65+
popup.queue_free()
66+
popup = null
67+
68+
func popup_quit():
69+
get_tree().paused = false
70+
71+
# Make sure the mouse is visible
72+
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
73+
74+
# If we have a popup, destoy it
75+
if popup != null:
76+
popup.queue_free()
77+
popup = null
78+
79+
# Go back to the title screen scene
80+
load_new_scene(TITLE_SCREEN_PATH)
81+
82+
83+
func set_debug_display(display_on):
84+
if display_on == false:
85+
if debug_display != null:
86+
debug_display.queue_free()
87+
debug_display = null
88+
else:
89+
if debug_display == null:
90+
debug_display = DEBUG_DISPLAY_SCENE.instance()
91+
canvas_layer.add_child(debug_display)

Main_Menu.gd

+77
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
extends Control
2+
3+
# NOTE: The code here is not explained in the tutorial!
4+
# This is because it does not really relate to making a FPS.
5+
6+
var start_menu
7+
var level_select_menu
8+
var options_menu
9+
10+
export (String, FILE) var testing_area_scene
11+
export (String, FILE) var test_level_scene
12+
export (String, FILE) var bonus_level_scene
13+
14+
15+
func _ready():
16+
start_menu = $Start_Menu
17+
level_select_menu = $Level_Select_Menu
18+
options_menu = $Options_Menu
19+
20+
# Connect all of the start menu buttons
21+
$Start_Menu/Button_Start.connect("pressed", self, "start_menu_button_pressed", ["start"])
22+
$Start_Menu/Button_Open_Godot.connect("pressed", self, "start_menu_button_pressed", ["open_godot"])
23+
$Start_Menu/Button_Options.connect("pressed", self, "start_menu_button_pressed", ["options"])
24+
$Start_Menu/Button_Quit.connect("pressed", self, "start_menu_button_pressed", ["quit"])
25+
26+
# Connect all of the level select menu buttons
27+
$Level_Select_Menu/Button_Back.connect("pressed", self, "level_select_menu_button_pressed", ["back"])
28+
$Level_Select_Menu/Button_Level_Testing_Area.connect("pressed", self, "level_select_menu_button_pressed", ["testing_scene"])
29+
$Level_Select_Menu/Button_Level_Test_Level.connect("pressed", self, "level_select_menu_button_pressed", ["test_level"])
30+
$Level_Select_Menu/Button_Level_Bonus_Level.connect("pressed", self, "level_select_menu_button_pressed", ["bonus_level"])
31+
32+
# Connect all of the options menu buttons
33+
$Options_Menu/Button_Back.connect("pressed", self, "options_menu_button_pressed", ["back"])
34+
$Options_Menu/Button_Fullscreen.connect("pressed", self, "options_menu_button_pressed", ["fullscreen"])
35+
$Options_Menu/Check_Button_VSync.connect("pressed", self, "options_menu_button_pressed", ["vsync"])
36+
$Options_Menu/Check_Button_Debug.connect("pressed", self, "options_menu_button_pressed", ["debug"])
37+
38+
# Some times when returning to the title screen the mouse is still captured even though it shouldn't be.
39+
# To prevent this from breaking the game, we just set it here too
40+
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
41+
42+
43+
func start_menu_button_pressed(button_name):
44+
if button_name == "start":
45+
level_select_menu.visible = true
46+
start_menu.visible = false
47+
elif button_name == "open_godot":
48+
OS.shell_open("https://godotengine.org/")
49+
elif button_name == "options":
50+
options_menu.visible = true
51+
start_menu.visible = false
52+
elif button_name == "quit":
53+
get_tree().quit()
54+
55+
56+
func level_select_menu_button_pressed(button_name):
57+
if button_name == "back":
58+
start_menu.visible = true
59+
level_select_menu.visible = false
60+
elif button_name == "testing_scene":
61+
get_node("/root/Globals").load_new_scene(testing_area_scene)
62+
elif button_name == "test_level":
63+
get_node("/root/Globals").load_new_scene(test_level_scene)
64+
elif button_name == "bonus_level":
65+
get_node("/root/Globals").load_new_scene(bonus_level_scene)
66+
67+
68+
func options_menu_button_pressed(button_name):
69+
if button_name == "back":
70+
start_menu.visible = true
71+
options_menu.visible = false
72+
elif button_name == "fullscreen":
73+
OS.window_fullscreen = !OS.window_fullscreen
74+
elif button_name == "vsync":
75+
OS.vsync_enabled = $Options_Menu/Check_Button_VSync.pressed
76+
elif button_name == "debug":
77+
get_node("/root/Globals").set_debug_display($Options_Menu/Check_Button_Debug.pressed)

0 commit comments

Comments
 (0)