1
0
mirror of https://github.com/JohnBreaux/Boat-Battle.git synced 2024-11-15 05:25:57 +00:00
Boat-Battle/godot_ship/script/Main.gd
tommy-l-ngo 06b8711a08
Game logic (#14)
* Create game classes

* Pushing what I've done of the game logic.

* Commented my code

Deals with ship placement on board and ship rotation on board

* Comment game logic code, and edit for style.

* Added Clear board button and Confirm Placement button

* Fix up some stuff

* Pass

* I accidentally the buttons + Fix some hitbox mistakes.

* Improve hitbox leniency, and don't allow ships to rotate into each other.

* Fixed Dialog Box that pops up for Confirm Placement

* Update Gameplay.tscn

* Partial fire functionality added.

Currently hides all ship placement UI and makes visible all fire functionality. The crosshair currently does not snap to a grid. The ships are saved in an area of location objects holding the length, orientation, and coordinates of the ship.

* Crosshair now snaps into place

* Created Sprites for 2Ship and 3ShipA

* Created Sprite for Ship3B

* Created Sprite for Ship4

* Created Sprite for Ship5

* Created Sprite for "Hit"

* Created Sprites for Ship2 Destroyed and Ship3A Destroyed

* Created Sprite for Ship3B Destroyed

* Created Sprite for Ship4 Destroyed

* Created Sprite for Ship5 Destroyed

* Created Sprite for "Miss"

* Fixed blurry pixel art

Changed texture rendering

* Added temporary title screen text

* Major restructuring to better support object-oriented design of the main game logic and UI. This was necessary, I swear.

* Accidentally offset the Setup menu by a handful of pixels. Whoops.

* Setup: remove unused signal

* Comment on which parts of Game are only there for testing purposes.

* Fixed up the Title Screen text

imported font

* Fixed Crosshair pixel rendering

* Consolidate backgrounds

* Added more SFX sounds

* Created Sprite for Light Mode

* Fix null deref when entering singleplayer after exiting multiplayer

* Hien's work

* Revert "Hien's work"

This reverts commit f099ed6c80.

* Stuff

* Make git happy by pushing gdengine imports

* Put Background in main

* Removed option background

* Added Confirmation Dialog for Forfeit

* Revert "Merge branch 'game-logic' of https://github.com/StatewideInk/Group12 into game-logic"

This reverts commit 104ffaab0a, reversing
changes made to 63dec75688.

* Fix title screen never going (whoops

* Oops I made the background invisible

* removed option background again

* Added dark/light mode functionality

* Added signal for audio SFX

* Load the theme on startup

* Added Confirmation dialog for Forfeit

* Fixed Texture Rendering for Light Mode Background

* Sounds no longer scale linearly

* Remove unused resourse main.tres

* Added victory screen

Added a victory screen. Since there is no current way to win, there is a 'win' button added to the top left of the game screen. Once clicked, victory text will appear and the player will be given the option to return to the main menu.

* restart button is invisible

Co-authored-by: John Breaux <JohnBreaux@my.unt.edu>
Co-authored-by: JohnBreaux <89870642+JohnBreaux@users.noreply.github.com>
Co-authored-by: hpham474 <HienPham@my.unt.edu>
Co-authored-by: Chance Atkinson <chancewatkinson@gmail.com>
2021-11-14 00:43:05 -06:00

109 lines
3.4 KiB
GDScript

extends Control
# Scenes
onready var Title_Screen = preload("res://scenes/Title Screen.tscn")
onready var Game = preload("res://scenes/Game/Game.tscn" )
onready var Options = preload("res://scenes/Options.tscn" )
onready var Debug_Menu = preload("res://scenes/Debug Menu.tscn" )
# Themes
var lightmode = preload("res://assets/backgrounds/Background_Light.png");
var darkmode = preload("res://assets/backgrounds/Background_Dark.png");
#flags
var power_saving = true
var debug_enabled = true
var start_fullscreen = false
# Called when the node enters the scene tree for the first time.
func _ready():
# Connect to signals
var _errno = 0;
_errno += MessageBus.connect("start_tcsn" , self, "_on_scene_start_by_name")
_errno += MessageBus.connect("change_scene" , self, "_on_scene_start" )
_errno += MessageBus.connect("kill_scene" , self, "_on_scene_kill" )
_errno += MessageBus.connect("list_scenes" , self, "_on_scene_list" )
_errno += MessageBus.connect("quit" , self, "_on_quit_request" )
_errno += MessageBus.connect("return_to_title", self, "_on_title_request" )
_errno += OptionsController.connect("change_theme", self, "_on_change_theme" )
# Set the theme based on the config file
_on_change_theme(OptionsController.get_theme())
# go fullscreen
OS.low_processor_usage_mode = power_saving
OS.low_processor_usage_mode_sleep_usec = 6800
OS.window_fullscreen = start_fullscreen
if debug_enabled:
add_child(Debug_Menu.instance())
# Process global keybinds
func _input(event):
if event.is_action_pressed("ui_fullscreen"):
# toggle_fullscreen
OS.window_fullscreen = !OS.window_fullscreen
# Ensure the scene doesn't become empty
func _process(_delta):
# Make sure there's something running
# Background counts as one child
# Debug counts as one child
if get_child_count() < 2 + int(debug_enabled):
MessageBus.emit_signal("change_scene", "Title")
pass
# Creates a new instance of each menu scene
func _on_scene_start(scene):
var instance
#print ("_on_scene_start(",scene,")")
match scene:
"Singleplayer":
instance = Game.instance()
add_child (instance)
return true
"Multiplayer":
instance = Game.instance()
instance.is_multiplayer = true
add_child (instance)
return true
"Options":
instance = Options.instance()
add_child (instance)
return true
"Title":
instance = Title_Screen.instance()
add_child (instance)
return true
func _on_scene_start_by_name(scene):
var pack = load("res://scenes/" + scene + ".tscn");
add_child(pack.instance());
# Kills all child nodes with name matching `scene`
func _on_scene_kill(scene):
var node = find_node(scene, false, false)
if node :
node.queue_free()
MessageBus.emit_signal("print_console", String(node.name) + " killed.\n".c_unescape())
func _on_scene_list():
var children = get_children()
var names = []
for i in range (children.size()):
names.append(children[i].name)
MessageBus.emit_signal("print_console", String(names) + "\n".c_unescape())
# Quits
func _on_quit_request():
get_tree().quit()
# Kills the current tree and replaces it with a new one
func _on_title_request():
return get_tree().change_scene("res://scenes/Main.tscn")
func _on_change_theme(theme):
if theme == "light":
get_node("Background").set_texture(lightmode)
elif theme == "dark":
get_node("Background").set_texture(darkmode)