180 lines
4.6 KiB
GDScript3
180 lines
4.6 KiB
GDScript3
|
extends Area2D
|
||
|
|
||
|
|
||
|
signal update_display # tells parent to update points display
|
||
|
signal refund # will tell parent a refund is occuring, for display
|
||
|
signal shooting_speed_upgrade # signals that a shooting speed upgrade has occured
|
||
|
signal ship_speed_upgrade
|
||
|
signal shooting_speed_fully_upgraded
|
||
|
signal ship_speed_fully_upgraded
|
||
|
signal restart_game
|
||
|
signal multiplayer_movement
|
||
|
|
||
|
export (PackedScene) var Laser
|
||
|
|
||
|
################################
|
||
|
#THINGS THAT MAY NEED ADJUSTING
|
||
|
#################################
|
||
|
#Default ship strengths and costs
|
||
|
const BULLET_DELAY_TIER1 = 0.8
|
||
|
const BULLET_DELAY_TIER2 = 0.5
|
||
|
const BULLET_DELAY_TIER3 = 0.2
|
||
|
const BULLET_DELAY_TIER4 = 0.1
|
||
|
const BULLET_DELAY_TIER5 = 0.05
|
||
|
const SHOOTING_SPEED_UPGRADE_DEFAULT = 1500
|
||
|
const BULLET_DELAY_MINIMUM = 0.01
|
||
|
const BULLET_DELAY_TIER2_COST = 100
|
||
|
const BULLET_DELAY_TIER3_COST = 200
|
||
|
const BULLET_DELAY_TIER4_COST = 400
|
||
|
const BULLET_DELAY_TIER5_COST = 1000
|
||
|
|
||
|
const SHIP_SPEED_TIER1 = 150
|
||
|
const SHIP_SPEED_TIER2 = 200
|
||
|
const SHIP_SPEED_TIER3 = 300
|
||
|
const SHIP_SPEED_TIER4 = 500
|
||
|
const SHIP_SPEED_TIER5 = 800
|
||
|
const SHIP_SPEED_UPGRADE_DEFAULT = 1500
|
||
|
const SHIP_SPEED_MAXIMUM = 1200
|
||
|
const SHIP_SPEED_TIER2_COST = 200
|
||
|
const SHIP_SPEED_TIER3_COST = 400
|
||
|
const SHIP_SPEED_TIER4_COST = 600
|
||
|
const SHIP_SPEED_TIER5_COST = 800
|
||
|
|
||
|
const STARTING_MONEY = 100
|
||
|
|
||
|
#################################
|
||
|
|
||
|
var screensize
|
||
|
|
||
|
var ship_speed = SHIP_SPEED_TIER1
|
||
|
var ship_speed_tier = 0
|
||
|
|
||
|
var bullet_delay = BULLET_DELAY_TIER1
|
||
|
var bullet_delay_tier = 0
|
||
|
var laser_penetration = 0
|
||
|
var double_laser = false
|
||
|
|
||
|
var ship_value = 0
|
||
|
var refund_percentage = 1
|
||
|
var money = STARTING_MONEY
|
||
|
|
||
|
var shooting_speed_upgrade = SHOOTING_SPEED_UPGRADE_DEFAULT
|
||
|
var ship_speed_upgrade = SHIP_SPEED_UPGRADE_DEFAULT
|
||
|
|
||
|
func _ready():
|
||
|
timer = Timer.new()
|
||
|
timer.set_one_shot(true)
|
||
|
timer.set_wait_time(bullet_delay)
|
||
|
timer.connect("timeout", self, "on_timeout_complete")
|
||
|
add_child(timer)
|
||
|
timer.start()
|
||
|
|
||
|
position.x = 100
|
||
|
position.y = 250
|
||
|
|
||
|
screensize = get_viewport_rect().size
|
||
|
$AnimatedSprite.play()
|
||
|
|
||
|
var timer = null
|
||
|
|
||
|
var can_shoot = false
|
||
|
var shoot_down = false
|
||
|
|
||
|
func on_timeout_complete():
|
||
|
can_shoot = true
|
||
|
|
||
|
#func _unhandled_input(event):
|
||
|
# if (event is InputEventScreenTouch):
|
||
|
# gravity_point = true
|
||
|
# gravity_vec = Vector2(0.5, 0.5)
|
||
|
|
||
|
var x_up = false
|
||
|
var y_up = false
|
||
|
var x_down = false
|
||
|
var y_down = false
|
||
|
|
||
|
func moveto(finger_position):
|
||
|
if (finger_position.x > position.x && finger_position.x < 800):
|
||
|
velocity.x += 1
|
||
|
x_up = true
|
||
|
if position.x > finger_position.x:
|
||
|
velocity.x -= 1
|
||
|
x_down = true
|
||
|
if (finger_position.y - 100 > position.y && finger_position.x < 800):
|
||
|
velocity.y += 1
|
||
|
y_up = true
|
||
|
if (position.y > finger_position.y - 100 && finger_position.x < 800):
|
||
|
velocity.y -= 1
|
||
|
y_down = true
|
||
|
# if (finger_position.x >= 800 && can_shoot):
|
||
|
# shoot()
|
||
|
if get_tree().has_network_peer():
|
||
|
rpc("move_player", get_tree().get_network_unique_id(), position)
|
||
|
|
||
|
remote func move_player(id, position):
|
||
|
prints("PLAYER SAYS:", id, position)
|
||
|
emit_signal("multiplayer_movement", id, position)
|
||
|
|
||
|
var velocity = Vector2() # the player's movement vector
|
||
|
|
||
|
func _process(delta):
|
||
|
velocity = Vector2()
|
||
|
if (Input.is_action_pressed("ui_right") || x_up):
|
||
|
velocity.x += 1
|
||
|
x_up = false
|
||
|
if (Input.is_action_pressed("ui_left") || x_down):
|
||
|
velocity.x -= 1
|
||
|
x_down = false
|
||
|
if (Input.is_action_pressed("ui_down") || y_up):
|
||
|
velocity.y += 1
|
||
|
y_up = false
|
||
|
if (Input.is_action_pressed("ui_up") || y_down):
|
||
|
velocity.y -= 1
|
||
|
y_down = false
|
||
|
if (velocity.length() > 0):
|
||
|
velocity = velocity.normalized() * ship_speed
|
||
|
|
||
|
position += velocity * delta
|
||
|
position.x = clamp(position.x, 0, screensize.x)
|
||
|
position.y = clamp(position.y, 0, screensize.y)
|
||
|
if get_tree().has_network_peer():
|
||
|
rpc("move_player", get_tree().get_network_unique_id(), position)
|
||
|
|
||
|
if ((Input.is_action_pressed("ui_accept") || shoot_down == true) && can_shoot == true):
|
||
|
shoot()
|
||
|
|
||
|
if (Input.is_action_pressed("ui_reset") && can_shoot == true):
|
||
|
upgradeMenu()
|
||
|
|
||
|
var x_up = false
|
||
|
var y_up = false
|
||
|
var x_down = false
|
||
|
var y_down = false
|
||
|
|
||
|
func _on_Player_body_entered(body):
|
||
|
prints("hit")
|
||
|
|
||
|
func shootDown():
|
||
|
shoot_down = true
|
||
|
func shootUp():
|
||
|
shoot_down = false
|
||
|
|
||
|
func shoot():
|
||
|
var laser = Laser.instance()
|
||
|
get_node("../").add_child(laser)
|
||
|
laser.current_pen = laser_penetration
|
||
|
laser.position.y = position.y - 27
|
||
|
laser.position.x = position.x + 46
|
||
|
|
||
|
#MAYBE THE LASERS SHOULD BE THEIR OWN NODES
|
||
|
#Would allow for more simple additions in the future
|
||
|
if double_laser == true:
|
||
|
var laser2 = Laser.instance()
|
||
|
get_node("../").add_child(laser2)
|
||
|
laser2.position.y = position.y + 28
|
||
|
laser2.position.x = position.x + 46
|
||
|
laser2.current_pen = laser_penetration
|
||
|
|
||
|
|
||
|
can_shoot = false
|
||
|
timer.start()
|