106 lines
2.9 KiB
GDScript
106 lines
2.9 KiB
GDScript
extends CharacterBody2D
|
|
|
|
class_name MainShip
|
|
|
|
@onready var engine = $Engine
|
|
@onready var hull = $Hull
|
|
@onready var shield = $Shield
|
|
@onready var pause_controller = $GUI/Interface/PauseController
|
|
@onready var minimap = $CanvasLayer/Control/Minimap
|
|
@onready var camera = $Camera
|
|
@onready var primary_slot = $PrimaryWeapon
|
|
@onready var secondary_slot = $SecondaryWeapon
|
|
|
|
var allow_shooting = true
|
|
var faction = "player"
|
|
var money : float = 1000
|
|
var quest : Quest = Quest.new()
|
|
var quest_completed : bool = false
|
|
|
|
var hulls : Array = ["starterhull"]
|
|
var engines : Array = ["starterengine"]
|
|
var shields : Array = ["startershield"]
|
|
var weapons : Array = ["SingleLaserMk1"]
|
|
|
|
signal destroyed
|
|
|
|
func _ready():
|
|
quest.quest_added.connect(add_quest)
|
|
quest.quest_ended.connect(kill_quest)
|
|
quest.quest_failed.connect(kill_quest)
|
|
destroyed.connect(quest._restriction_no_deaths)
|
|
shield.material = material
|
|
#quest.create(Quest.TYPE.ELIMINATION, 2, 200)
|
|
|
|
func _process(_delta):
|
|
if hull.hp < 0: destroy()
|
|
|
|
func changeinterfacecolor():
|
|
$GUI/Interface.modulate = modulate
|
|
|
|
func destroy():
|
|
hull.hp = hull.max_hp
|
|
shield.capacity = shield.max_capacity
|
|
global_position = Vector2.ZERO
|
|
engine.speed = 0
|
|
engine.turbo_enabled = false
|
|
destroyed.emit()
|
|
|
|
func add_quest(quest : Quest):
|
|
if quest.restrictions.has(Quest.RESTRICTIONS.TIMER):
|
|
get_tree().create_timer(quest.data['timer']).timeout.connect(timer_failed)
|
|
if quest.type == Quest.TYPE.DELIVERY:
|
|
minimap.add_marker(quest.data['destination'], "quest")
|
|
|
|
func kill_quest(success : bool):
|
|
if success:
|
|
quest_completed = true
|
|
quest.new = true
|
|
|
|
func timer_failed():
|
|
if quest.new:
|
|
return
|
|
kill_quest(false)
|
|
|
|
func enemy_destroyed(_enemy):
|
|
if quest.new:
|
|
return
|
|
if quest.type == quest.TYPE.ELIMINATION:
|
|
quest.do_progress()
|
|
|
|
func change_hull(new):
|
|
var new_hull = Game.get_module(new, 'hull').instantiate()
|
|
var old_hull = hull
|
|
add_child(new_hull)
|
|
hull = new_hull
|
|
hull.hp = old_hull.hp
|
|
hull.fuel = old_hull.fuel
|
|
get_tree().create_timer(0.05).timeout.connect(old_hull.queue_free)
|
|
|
|
func change_engine(new):
|
|
var new_engine = Game.get_module(new, 'engine').instantiate()
|
|
var old_engine = engine
|
|
add_child(new_engine)
|
|
engine = new_engine
|
|
get_tree().create_timer(0.05).timeout.connect(old_engine.queue_free)
|
|
|
|
func change_shield(new):
|
|
var new_shield = Game.get_module(new, 'shield').instantiate()
|
|
var old_shield = shield
|
|
add_child(new_shield)
|
|
shield = new_shield
|
|
get_tree().create_timer(0.05).timeout.connect(old_shield.queue_free)
|
|
|
|
func change_primary_weapon(new):
|
|
var weapon = Game.get_weapon(new).instantiate()
|
|
if primary_slot.get_child_count() > 0:
|
|
for child in primary_slot.get_children():
|
|
child.queue_free()
|
|
primary_slot.add_child(weapon)
|
|
|
|
func change_secondary_weapon(new):
|
|
var weapon = Game.get_weapon(new).instantiate()
|
|
if secondary_slot.get_child_count() > 0:
|
|
for child in secondary_slot.get_children():
|
|
child.queue_free()
|
|
secondary_slot.add_child(weapon)
|