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/game/Gameplay/Crosshair.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

59 lines
2.3 KiB
GDScript

extends Sprite
var snapped = false #when snapped if true crosshair stops following mouse
const world_offset = Vector2(36,36)
# Called when the node enters the scene tree for the first time.
func _ready():
# Move the cursor to 0,0
position = board_to_world_space(Vector2(-2,-2))
pass # Replace with function body.
func _physics_process(_delta):
var mousePos = get_global_mouse_position()
# If the cursor is not snapped, and the mouse is over the board
if snapped == false and validate_position(mousePos):
# Snap the crosshair to the grid, but following the mouse
position = (mousePos - world_offset).snapped(Vector2(32,32)) + world_offset
func _input(event):
# Check if left click is being clicked and the sprite is visible (i.e only checks for inputs after ship positions are confirmed)
if event is InputEventMouseButton and event.button_index == BUTTON_LEFT and visible and not event.is_pressed():
# Make a noise
AudioBus.emit_signal("button_clicked")
# Locks the position of the crosshair with left click release
if validate_position(position) == true:
# rounds the board position to the nearest integer
snapped = true
position.x = int(round(world_to_board_space(position).x))
position.y = int(round(world_to_board_space(position).y))
position = board_to_world_space(position)
# Check if left click is being clicked and the sprite is visible (i.e only checks for inputs after ship positions are confirmed)
elif event is InputEventMouseButton and event.button_index == BUTTON_LEFT and visible == true:
# Unlocks the position of the crosshair with left click
snapped = false
func validate_position(vector):
# rounds the board position to the nearest integer
var board = world_to_board_space(vector)
# Checks if the board position is within bounds of the board
if board.x < 9.5 and board.x >= -0.5 and board.y < 9.5 and board.y >= -0.5:
# changes the position of the crosshair
return true
else:
# unlocks the crosshair if not within bounds
return false
# Convert the world-space coordinates to positions on the board
func world_to_board_space(vector):
# Do math
var res = (vector - world_offset) / 32 # Basically Fahrenheit/Celcius conversion, but in 2D
return res
# Inverse of the above function.
func board_to_world_space(vector):
# Do math
var res = (vector * 32) + world_offset #Invert the above function
return res #Truncate decimals