Equipment menu
This commit is contained in:
parent
c6bf51f1b0
commit
bef15301cb
28 changed files with 809 additions and 48 deletions
12
items/doublelasermk1.tres
Normal file
12
items/doublelasermk1.tres
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
[gd_resource type="Resource" script_class="Item" load_steps=2 format=3 uid="uid://cxbsw78sqdqyg"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/item.gd" id="1_7fodh"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_7fodh")
|
||||
name = "Double Laser Mk.I"
|
||||
description = "It gets twice as better than a crappy one."
|
||||
min_price = 200.0
|
||||
max_price = 250.0
|
||||
weight = 0.0
|
||||
type = 1
|
||||
14
items/hullmk2.tres
Normal file
14
items/hullmk2.tres
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
[gd_resource type="Resource" script_class="Item" load_steps=3 format=3 uid="uid://dcu7danm4lucy"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://dbwvej0c5bl52" path="res://sprites/ship mk1.png" id="1_eqmv1"]
|
||||
[ext_resource type="Script" path="res://scripts/item.gd" id="1_xq0fp"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_xq0fp")
|
||||
name = "HullMk2"
|
||||
description = "Upgraded version of standart hull."
|
||||
min_price = 200.0
|
||||
max_price = 300.0
|
||||
weight = 0.0
|
||||
icon = ExtResource("1_eqmv1")
|
||||
type = 2
|
||||
12
items/singlelasermk1.tres
Normal file
12
items/singlelasermk1.tres
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
[gd_resource type="Resource" script_class="Item" load_steps=2 format=3 uid="uid://bh1thpb5padtm"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/item.gd" id="1_abxbi"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_abxbi")
|
||||
name = "Single Laser Mk.I"
|
||||
description = "This one looks nice. Definitely not that deadly as it was advertised."
|
||||
min_price = 50.0
|
||||
max_price = 100.0
|
||||
weight = 0.0
|
||||
type = 1
|
||||
12
items/singlerocketmk1.tres
Normal file
12
items/singlerocketmk1.tres
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
[gd_resource type="Resource" script_class="Item" load_steps=2 format=3 uid="uid://gg7ju73wve6w"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/item.gd" id="1_r753s"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_r753s")
|
||||
name = "Single Rocket Mk.I"
|
||||
description = "Erm...Still better than laser..."
|
||||
min_price = 150.0
|
||||
max_price = 200.0
|
||||
weight = 0.0
|
||||
type = 1
|
||||
12
items/starterengine.tres
Normal file
12
items/starterengine.tres
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
[gd_resource type="Resource" script_class="Item" load_steps=2 format=3 uid="uid://d365u87r3hvb5"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/item.gd" id="1_q5jvx"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_q5jvx")
|
||||
name = "Starter Engine"
|
||||
description = "The first one to be made."
|
||||
min_price = 50.0
|
||||
max_price = 100.0
|
||||
weight = 0.0
|
||||
type = 0
|
||||
14
items/starterhull.tres
Normal file
14
items/starterhull.tres
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
[gd_resource type="Resource" script_class="Item" load_steps=3 format=3 uid="uid://14rkvp6cksg5"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://dbwvej0c5bl52" path="res://sprites/ship mk1.png" id="1_5dwb0"]
|
||||
[ext_resource type="Script" path="res://scripts/item.gd" id="1_e4j4a"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_e4j4a")
|
||||
name = "StarterHull"
|
||||
description = "The very basic hull, even YOU could afford that."
|
||||
min_price = 200.0
|
||||
max_price = 250.0
|
||||
weight = 0.0
|
||||
icon = ExtResource("1_5dwb0")
|
||||
type = 2
|
||||
12
items/startershield.tres
Normal file
12
items/startershield.tres
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
[gd_resource type="Resource" script_class="Item" load_steps=2 format=3 uid="uid://ceygt2ddj80sf"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/item.gd" id="1_k57go"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_k57go")
|
||||
name = "Starter Shield"
|
||||
description = "You needed that so desperately so you didn't think of getting a better one later."
|
||||
min_price = 100.0
|
||||
max_price = 150.0
|
||||
weight = 0.0
|
||||
type = 3
|
||||
|
|
@ -13,7 +13,7 @@ config_version=5
|
|||
config/name="GammaCosmicRays"
|
||||
config/tags=PackedStringArray("main_project")
|
||||
run/main_scene="res://scenes/MainMenu.tscn"
|
||||
config/features=PackedStringArray("4.1", "Forward Plus")
|
||||
config/features=PackedStringArray("4.2", "Forward Plus")
|
||||
config/icon="res://icon.svg"
|
||||
|
||||
[display]
|
||||
|
|
@ -78,6 +78,11 @@ pause={
|
|||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
hide_menu={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194306,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[layer_names]
|
||||
|
||||
|
|
|
|||
|
|
@ -31,6 +31,8 @@ metadata/_edit_horizontal_guides_ = []
|
|||
|
||||
[node name="SecondaryWeapon" type="Node2D" parent="."]
|
||||
|
||||
[node name="SingleLaser" parent="SecondaryWeapon" instance=ExtResource("4_s724s")]
|
||||
|
||||
[node name="Shield" parent="." instance=ExtResource("6_nihas")]
|
||||
|
||||
[node name="Camera" type="Camera2D" parent="."]
|
||||
|
|
|
|||
9
scenes/hulls/HullMk2.tscn
Normal file
9
scenes/hulls/HullMk2.tscn
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://c02jesitrkrm5"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://bbho4h6tg4jca" path="res://scenes/hulls/starterhull.tscn" id="1_miiwm"]
|
||||
|
||||
[node name="Hull" instance=ExtResource("1_miiwm")]
|
||||
max_hp = 40.0
|
||||
max_fuel = 9000.0
|
||||
max_weight = 150.0
|
||||
id = "HullMk2"
|
||||
|
|
@ -8,5 +8,6 @@ script = ExtResource("1_em4j0")
|
|||
max_fuel = 6000
|
||||
|
||||
[node name="HullSprite" type="Sprite2D" parent="."]
|
||||
z_index = -1
|
||||
position = Vector2(16, 0)
|
||||
texture = ExtResource("2_tvpkh")
|
||||
|
|
|
|||
|
|
@ -77,7 +77,8 @@ layout_mode = 0
|
|||
offset_top = 576.0
|
||||
offset_right = 640.0
|
||||
offset_bottom = 640.0
|
||||
text = "Fly off base to exit this menu."
|
||||
text = "Press [TAB] to show / hide menu
|
||||
Fly off the base to exit menu"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
|
|
@ -114,49 +115,50 @@ script = ExtResource("2_ld3o5")
|
|||
|
||||
[node name="SellList" type="ItemList" parent="TradingMenu"]
|
||||
layout_mode = 0
|
||||
offset_left = 1.0
|
||||
offset_top = 64.0
|
||||
offset_right = 320.0
|
||||
offset_bottom = 512.0
|
||||
offset_bottom = 576.0
|
||||
|
||||
[node name="BuyList" type="ItemList" parent="TradingMenu"]
|
||||
layout_mode = 0
|
||||
offset_left = 320.0
|
||||
offset_top = 64.0
|
||||
offset_right = 640.0
|
||||
offset_bottom = 512.0
|
||||
offset_right = 639.0
|
||||
offset_bottom = 576.0
|
||||
|
||||
[node name="SellInput" type="LineEdit" parent="TradingMenu"]
|
||||
layout_mode = 0
|
||||
offset_left = 1.0
|
||||
offset_top = 512.0
|
||||
offset_top = 576.0
|
||||
offset_right = 160.0
|
||||
offset_bottom = 576.0
|
||||
offset_bottom = 639.0
|
||||
placeholder_text = "Amount to buy"
|
||||
alignment = 1
|
||||
|
||||
[node name="BuyInput" type="LineEdit" parent="TradingMenu"]
|
||||
layout_mode = 0
|
||||
offset_left = 320.0
|
||||
offset_top = 512.0
|
||||
offset_top = 576.0
|
||||
offset_right = 480.0
|
||||
offset_bottom = 576.0
|
||||
offset_bottom = 639.0
|
||||
placeholder_text = "Amount to sell"
|
||||
alignment = 1
|
||||
|
||||
[node name="BuyButton" type="Button" parent="TradingMenu"]
|
||||
layout_mode = 0
|
||||
offset_left = 160.0
|
||||
offset_top = 512.0
|
||||
offset_top = 576.0
|
||||
offset_right = 320.0
|
||||
offset_bottom = 576.0
|
||||
offset_bottom = 639.0
|
||||
text = "Buy selected item"
|
||||
|
||||
[node name="SellButton" type="Button" parent="TradingMenu"]
|
||||
layout_mode = 0
|
||||
offset_left = 480.0
|
||||
offset_top = 512.0
|
||||
offset_top = 576.0
|
||||
offset_right = 639.0
|
||||
offset_bottom = 576.0
|
||||
offset_bottom = 639.0
|
||||
text = "Sell selected item"
|
||||
|
||||
[node name="QuestMenu" type="NinePatchRect" parent="."]
|
||||
|
|
@ -294,7 +296,6 @@ offset_bottom = 511.0
|
|||
text = "Accept quest"
|
||||
|
||||
[node name="EquipmentMenu" type="NinePatchRect" parent="."]
|
||||
visible = false
|
||||
layout_mode = 0
|
||||
offset_left = 320.0
|
||||
offset_top = 40.0
|
||||
|
|
@ -324,6 +325,138 @@ offset_bottom = 40.0
|
|||
text = "X"
|
||||
script = ExtResource("2_ld3o5")
|
||||
|
||||
[node name="AvailableItems" type="ItemList" parent="EquipmentMenu"]
|
||||
layout_mode = 0
|
||||
offset_left = 1.0
|
||||
offset_top = 128.0
|
||||
offset_right = 320.0
|
||||
offset_bottom = 368.0
|
||||
|
||||
[node name="BuyableItems" type="ItemList" parent="EquipmentMenu"]
|
||||
layout_mode = 0
|
||||
offset_left = 1.0
|
||||
offset_top = 400.0
|
||||
offset_right = 320.0
|
||||
offset_bottom = 639.0
|
||||
|
||||
[node name="LabelAvailable" type="Label" parent="EquipmentMenu"]
|
||||
layout_mode = 0
|
||||
offset_top = 96.0
|
||||
offset_right = 320.0
|
||||
offset_bottom = 128.0
|
||||
text = "Available modules"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="LabelBuyable" type="Label" parent="EquipmentMenu"]
|
||||
layout_mode = 0
|
||||
offset_top = 368.0
|
||||
offset_right = 320.0
|
||||
offset_bottom = 400.0
|
||||
text = "Buyable modules"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="LabelSelectedItemInfo" type="Label" parent="EquipmentMenu"]
|
||||
layout_mode = 0
|
||||
offset_left = 320.0
|
||||
offset_top = 96.0
|
||||
offset_right = 640.0
|
||||
offset_bottom = 128.0
|
||||
text = "Selected module info:"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="HullSelect" type="Button" parent="EquipmentMenu"]
|
||||
layout_mode = 0
|
||||
offset_left = 1.0
|
||||
offset_top = 64.0
|
||||
offset_right = 160.0
|
||||
offset_bottom = 96.0
|
||||
disabled = true
|
||||
text = "Hull"
|
||||
|
||||
[node name="EngineSelect" type="Button" parent="EquipmentMenu"]
|
||||
layout_mode = 0
|
||||
offset_left = 160.0
|
||||
offset_top = 64.0
|
||||
offset_right = 320.0
|
||||
offset_bottom = 96.0
|
||||
text = "Engine"
|
||||
|
||||
[node name="ShieldSelect" type="Button" parent="EquipmentMenu"]
|
||||
layout_mode = 0
|
||||
offset_left = 320.0
|
||||
offset_top = 64.0
|
||||
offset_right = 480.0
|
||||
offset_bottom = 96.0
|
||||
text = "Shield"
|
||||
|
||||
[node name="WeaponSelect" type="Button" parent="EquipmentMenu"]
|
||||
layout_mode = 0
|
||||
offset_left = 480.0
|
||||
offset_top = 64.0
|
||||
offset_right = 639.0
|
||||
offset_bottom = 96.0
|
||||
text = "Weapon"
|
||||
|
||||
[node name="LabelInfoBlock" type="Label" parent="EquipmentMenu"]
|
||||
layout_mode = 0
|
||||
offset_left = 320.0
|
||||
offset_top = 128.0
|
||||
offset_right = 640.0
|
||||
offset_bottom = 368.0
|
||||
text = "Select a module to receive info about it."
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
autowrap_mode = 1
|
||||
|
||||
[node name="LabelSelectedItemInfo2" type="Label" parent="EquipmentMenu"]
|
||||
layout_mode = 0
|
||||
offset_left = 320.0
|
||||
offset_top = 368.0
|
||||
offset_right = 640.0
|
||||
offset_bottom = 400.0
|
||||
text = "Selected module actions:"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="BuySellButton" type="Button" parent="EquipmentMenu"]
|
||||
layout_mode = 0
|
||||
offset_left = 320.0
|
||||
offset_top = 400.0
|
||||
offset_right = 639.0
|
||||
offset_bottom = 464.0
|
||||
disabled = true
|
||||
text = "Buy / Sell selected"
|
||||
|
||||
[node name="EquipButton" type="Button" parent="EquipmentMenu"]
|
||||
layout_mode = 0
|
||||
offset_left = 320.0
|
||||
offset_top = 464.0
|
||||
offset_right = 639.0
|
||||
offset_bottom = 528.0
|
||||
disabled = true
|
||||
text = "Equip selected"
|
||||
|
||||
[node name="EquipPrimaryButton" type="Button" parent="EquipmentMenu"]
|
||||
layout_mode = 0
|
||||
offset_left = 320.0
|
||||
offset_top = 528.0
|
||||
offset_right = 639.0
|
||||
offset_bottom = 584.0
|
||||
disabled = true
|
||||
text = "Equip selected as primary weapon"
|
||||
|
||||
[node name="EquipSecondaryButton" type="Button" parent="EquipmentMenu"]
|
||||
layout_mode = 0
|
||||
offset_left = 320.0
|
||||
offset_top = 584.0
|
||||
offset_right = 639.0
|
||||
offset_bottom = 639.0
|
||||
disabled = true
|
||||
text = "Equip selected as secondary weapon"
|
||||
|
||||
[node name="InfoMenu" type="NinePatchRect" parent="."]
|
||||
visible = false
|
||||
layout_mode = 0
|
||||
|
|
@ -354,3 +487,13 @@ offset_right = 639.0
|
|||
offset_bottom = 40.0
|
||||
text = "X"
|
||||
script = ExtResource("2_ld3o5")
|
||||
|
||||
[node name="Label" type="Label" parent="InfoMenu"]
|
||||
layout_mode = 0
|
||||
offset_top = 64.0
|
||||
offset_right = 640.0
|
||||
offset_bottom = 640.0
|
||||
text = "Actually, this section is WIP.
|
||||
Part of the factions system."
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ ammo_type = "Laser Energy"
|
|||
ammo_consumption = 2.0
|
||||
shoot_timer = NodePath("ShootingTimer")
|
||||
spawner_points = [NodePath("SpawnerSprite1/Spawner1"), NodePath("SpawnerSprite2/Spawner2")]
|
||||
id = "DoubleLaserMk1"
|
||||
|
||||
[node name="SpawnerSprite1" type="Sprite2D" parent="."]
|
||||
position = Vector2(4, -12)
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ ammo_type = "Rockets"
|
|||
ammo_consumption = 1.0
|
||||
shoot_timer = NodePath("ShootingTimer")
|
||||
spawner_points = [NodePath("Spawner")]
|
||||
id = "SingleRocketMk1"
|
||||
|
||||
[node name="ShootingTimer" type="Timer" parent="."]
|
||||
wait_time = 0.5
|
||||
|
|
|
|||
|
|
@ -38,18 +38,17 @@ func _ready():
|
|||
ship.hull.fuel = save['fuel']
|
||||
ship.hull.ammunition = save['ammo']
|
||||
ship.hull.cargo = save['cargo']
|
||||
if save.has('primaryweapon'):
|
||||
for node in ship.primary_slot.get_children():
|
||||
node.queue_free()
|
||||
var weapon_inst = Game.get_weapon(save['primaryweapon']).instantiate()
|
||||
weapon_inst.id = save['primaryweapon']
|
||||
ship.primary_slot.add_child(weapon_inst)
|
||||
if save.has('secondaryweapon'):
|
||||
for node in ship.secondary_slot.get_children():
|
||||
node.queue_free()
|
||||
var weapon_inst = Game.get_weapon(save['secondaryweapon']).instantiate()
|
||||
weapon_inst.id = save['secondaryweapon']
|
||||
ship.secondary_slot.add_child(weapon_inst)
|
||||
if save.has('ship_equipment'):
|
||||
var hull = Game.get_module(save['ship_equipment']['hull'], 'hull').instantiate()
|
||||
var engine = Game.get_module(save['ship_equipment']['hull'], 'engine').instantiate()
|
||||
var shield = Game.get_module(save['ship_equipment']['hull'], 'shield').instantiate()
|
||||
var primary_weapon = Game.get_weapon(save['ship_equipment']['primary_weapon']).instantiate()
|
||||
var secondary_weapon = Game.get_weapon(save['ship_equipment']['secondary_weapon']).instantiate()
|
||||
ship.change_hull(hull)
|
||||
ship.change_engine(engine)
|
||||
ship.change_shield(shield)
|
||||
ship.change_primary_weapon(primary_weapon)
|
||||
ship.change_secondary_weapon(secondary_weapon)
|
||||
if save.has('quest'):
|
||||
var data = save['quest']
|
||||
var type = data['type'] as Quest.TYPE
|
||||
|
|
|
|||
|
|
@ -2,12 +2,15 @@ extends Node
|
|||
|
||||
class_name Game
|
||||
|
||||
enum ITEM_TYPE {VALUABLE, WEAPON, MODULE, AMMUNITION}
|
||||
enum ITEM_TYPE {VALUABLE, WEAPON, HULL, SHIELD, ENGINE, AMMUNITION}
|
||||
enum AMMO_TYPE {NULL, LASER_ENERGY, ROCKETS}
|
||||
enum BASE_TYPE {POWER, MINING, FOOD, TRADING, MODULE}
|
||||
|
||||
const DEFAULT_ITEM = preload("res://items/test_item.tres")
|
||||
const DEFAULT_WEAPON = preload("res://scenes/weapons/presets/SingleLaserMk1.tscn")
|
||||
const DEFAULT_HULL = preload("res://scenes/hulls/starterhull.tscn")
|
||||
const DEFAULT_ENGINE = preload("res://scenes/engines/starterengine.tscn")
|
||||
const DEFAULT_SHIELD = preload("res://scenes/shields/startershield.tscn")
|
||||
|
||||
const salt = "2ndbeam"
|
||||
const gameversion = "Ictar 1.1"
|
||||
|
|
@ -40,10 +43,13 @@ static func profile_save(scene : Node) -> void:
|
|||
'data' : scene.ship.quest.data,
|
||||
'got_reward' : scene.ship.quest_completed
|
||||
}
|
||||
if scene.ship.primary_slot.get_child_count() > 0:
|
||||
profile.profile_meta['game']['primaryweapon'] = scene.ship.primary_slot.get_child(0).id
|
||||
if scene.ship.secondary_slot.get_child_count() > 0:
|
||||
profile.profile_meta['game']['secondaryweapon'] = scene.ship.secondary_slot.get_child(0).id
|
||||
profile.profile_meta['game']['ship_equipment'] = {
|
||||
'hull' : scene.ship.hull.id,
|
||||
'engine' : scene.ship.engine.id,
|
||||
'shield' : scene.ship.shield.id,
|
||||
'primary_weapon' : scene.ship.primary_slot.get_child(0).id,
|
||||
'secondary_weapon' : scene.ship.secondary_slot.get_child(0).id
|
||||
}
|
||||
profile_save_from_meta(profile.profile_meta)
|
||||
|
||||
## Saves profile with provided profile meta
|
||||
|
|
@ -102,11 +108,10 @@ static func profile_legit_check(profile_meta : Dictionary) -> Dictionary:
|
|||
static func get_item(id : String) -> Item:
|
||||
var path_name = id.to_lower().replace(" ", "_")
|
||||
var path = "res://items/{name}.tres".format({"name": path_name})
|
||||
if FileAccess.file_exists(path):
|
||||
var res = load(path)
|
||||
if res != null:
|
||||
return res.duplicate()
|
||||
else:
|
||||
return DEFAULT_ITEM.duplicate()
|
||||
return DEFAULT_ITEM
|
||||
|
||||
## Returns weapon packed scene if it exists or DEFAULT_WEAPON instead
|
||||
static func get_weapon(id : String) -> PackedScene:
|
||||
|
|
@ -116,3 +121,17 @@ static func get_weapon(id : String) -> PackedScene:
|
|||
return res
|
||||
else:
|
||||
return DEFAULT_WEAPON
|
||||
|
||||
static func get_module(id : String, type : String) -> PackedScene:
|
||||
var path = "res://scenes/{type}s/{name}.tscn".format({"name": id, "type": type})
|
||||
var res = load(path)
|
||||
if res != null:
|
||||
return res
|
||||
match type:
|
||||
"hull":
|
||||
return DEFAULT_HULL
|
||||
"engine":
|
||||
return DEFAULT_ENGINE
|
||||
"shield":
|
||||
return DEFAULT_SHIELD
|
||||
return DEFAULT_HULL
|
||||
|
|
|
|||
|
|
@ -16,7 +16,31 @@ var base
|
|||
@onready var new_quest = $QuestMenu/NewQuest
|
||||
@onready var accept_quest = $QuestMenu/NewQuest/AcceptQuest
|
||||
@onready var new_quest_status = $QuestMenu/NewQuest/QuestStatus
|
||||
var base_types = ["Power Supply", "Mining", "Food Production", "Trading", "Modules"]
|
||||
@onready var available_modules = $EquipmentMenu/AvailableItems
|
||||
@onready var buyable_modules = $EquipmentMenu/BuyableItems
|
||||
@onready var select_hull = $EquipmentMenu/HullSelect
|
||||
@onready var select_engine = $EquipmentMenu/EngineSelect
|
||||
@onready var select_shield = $EquipmentMenu/ShieldSelect
|
||||
@onready var select_weapon = $EquipmentMenu/WeaponSelect
|
||||
@onready var buy_sell_mod = $EquipmentMenu/BuySellButton
|
||||
@onready var equip_mod = $EquipmentMenu/EquipButton
|
||||
@onready var equip_primary = $EquipmentMenu/EquipPrimaryButton
|
||||
@onready var equip_secondary = $EquipmentMenu/EquipSecondaryButton
|
||||
@onready var label_mod_info = $EquipmentMenu/LabelInfoBlock
|
||||
var base_types = ["Power Supply", "Mining", "Food Production", "Trading"]
|
||||
var equipment_category = "hull"
|
||||
var focused_mod_id = -1
|
||||
var focused_list = null
|
||||
var available_hulls : Array[String]
|
||||
var available_engines : Array[String]
|
||||
var available_shields : Array[String]
|
||||
var available_weapons : Array[String]
|
||||
var hulls_prices : Dictionary
|
||||
var engines_prices : Dictionary
|
||||
var shields_prices : Dictionary
|
||||
var weapons_prices : Dictionary
|
||||
var available_list : Array[String] = []
|
||||
var buyable_list : Array[String] = []
|
||||
|
||||
func _ready():
|
||||
update_lists()
|
||||
|
|
@ -28,8 +52,34 @@ func _ready():
|
|||
abandon_quest.button_up.connect(quest_abandon)
|
||||
complete_quest.button_up.connect(quest_complete)
|
||||
accept_quest.button_up.connect(quest_accept)
|
||||
select_hull.button_up.connect(select_hull_mod)
|
||||
select_engine.button_up.connect(select_engine_mod)
|
||||
select_shield.button_up.connect(select_shield_mod)
|
||||
select_weapon.button_up.connect(select_weapon_mod)
|
||||
buy_sell_mod.button_up.connect(buy_or_sell_mod)
|
||||
equip_mod.button_up.connect(equip_module)
|
||||
equip_primary.button_up.connect(equip_weapon_primary)
|
||||
equip_secondary.button_up.connect(equip_weapon_secondary)
|
||||
available_modules.item_clicked.connect(available_mod_focus)
|
||||
buyable_modules.item_clicked.connect(buyable_mod_focus)
|
||||
available_modules.empty_clicked.connect(modules_list_empty_click)
|
||||
buyable_modules.empty_clicked.connect(modules_list_empty_click)
|
||||
quest_status_update()
|
||||
buy_sell_mod.disabled = true
|
||||
equip_mod.disabled = true
|
||||
equip_primary.disabled = true
|
||||
equip_secondary.disabled = true
|
||||
available_hulls = base.available_hulls
|
||||
available_engines = base.available_engines
|
||||
available_shields = base.available_shields
|
||||
available_weapons = base.available_weapons
|
||||
hulls_prices = base.hulls_prices
|
||||
engines_prices = base.engines_prices
|
||||
shields_prices = base.shields_prices
|
||||
weapons_prices = base.weapons_prices
|
||||
select_hull_mod()
|
||||
|
||||
## Updates buy and sell list in trading menu with available items
|
||||
func update_lists():
|
||||
buy_list.clear()
|
||||
sell_list.clear()
|
||||
|
|
@ -49,6 +99,7 @@ func update_lists():
|
|||
var sell_text = "{name} <- {price} MU".format(format)
|
||||
sell_list.add_item(sell_text, base.want_to_sell[i].icon)
|
||||
|
||||
## Event handler for buy option in trading menu
|
||||
func buy_item():
|
||||
var amount = int(sell_input.text)
|
||||
amount = clamp(amount, 0, amount)
|
||||
|
|
@ -74,6 +125,7 @@ func buy_item():
|
|||
ship.money -= total_price
|
||||
print(ship.hull.cargo)
|
||||
|
||||
## Event handler for sell option in trading menu
|
||||
func sell_item():
|
||||
if len(buy_list.get_selected_items()) == 0:
|
||||
buy_input.text = ""
|
||||
|
|
@ -106,12 +158,14 @@ func buy_text_changed(_new_text):
|
|||
func sell_text_changed(_new_text):
|
||||
sell_input.placeholder_text = "Amount to buy"
|
||||
|
||||
## Event handler for abandoning in active quest menu
|
||||
func quest_abandon():
|
||||
ship.quest.fail()
|
||||
current_quest.visible = false
|
||||
new_quest.visible = true
|
||||
quest_status_update()
|
||||
|
||||
## Event handler for completion in active quest menu
|
||||
func quest_complete():
|
||||
if !ship.quest_completed:
|
||||
return
|
||||
|
|
@ -121,6 +175,7 @@ func quest_complete():
|
|||
new_quest.visible = true
|
||||
quest_status_update()
|
||||
|
||||
## Event handler for acception in new quest menu
|
||||
func quest_accept():
|
||||
ship.quest.create(base.quest.type, base.quest.progress_max, base.quest.reward_money, base.quest.restrictions, base.quest.data)
|
||||
ship.quest.progress = 0
|
||||
|
|
@ -128,6 +183,7 @@ func quest_accept():
|
|||
current_quest.visible = true
|
||||
quest_status_update()
|
||||
|
||||
## Updates text in quest menu, either new or active
|
||||
func quest_status_update():
|
||||
var ship_has_quest = !ship.quest.new or ship.quest_completed
|
||||
var upd_quest = ship.quest if ship_has_quest else base.quest
|
||||
|
|
@ -165,3 +221,288 @@ func quest_status_update():
|
|||
}
|
||||
upd_text.text = template.format(formatting)
|
||||
complete_quest.disabled = !ship.quest_completed
|
||||
|
||||
## Hull selection in equipment menu
|
||||
func select_hull_mod():
|
||||
equipment_category = "hull"
|
||||
select_hull.disabled = true
|
||||
select_engine.disabled = false
|
||||
select_shield.disabled = false
|
||||
select_weapon.disabled = false
|
||||
available_modules.clear()
|
||||
buyable_modules.clear()
|
||||
available_list = available_hulls.filter(func(index): return ship.hulls.has(index))
|
||||
buyable_list = available_hulls.filter(func(index): return !ship.hulls.has(index))
|
||||
add_available(available_list)
|
||||
add_buyable(buyable_list)
|
||||
|
||||
## Engine selection in equipment menu
|
||||
func select_engine_mod():
|
||||
equipment_category = "engine"
|
||||
select_hull.disabled = false
|
||||
select_engine.disabled = true
|
||||
select_shield.disabled = false
|
||||
select_weapon.disabled = false
|
||||
available_modules.clear()
|
||||
buyable_modules.clear()
|
||||
available_list = available_engines.filter(func(index): return ship.engines.has(index))
|
||||
buyable_list = available_engines.filter(func(index): return !ship.engines.has(index))
|
||||
add_available(available_list)
|
||||
add_buyable(buyable_list)
|
||||
|
||||
## Shield selection in equipment menu
|
||||
func select_shield_mod():
|
||||
equipment_category = "shield"
|
||||
select_hull.disabled = false
|
||||
select_engine.disabled = false
|
||||
select_shield.disabled = true
|
||||
select_weapon.disabled = false
|
||||
available_modules.clear()
|
||||
buyable_modules.clear()
|
||||
available_list = available_shields.filter(func(index): return ship.shields.has(index))
|
||||
buyable_list = available_shields.filter(func(index): return !ship.shields.has(index))
|
||||
add_available(available_list)
|
||||
add_buyable(buyable_list)
|
||||
|
||||
## Weapon selection in equipment menu
|
||||
func select_weapon_mod():
|
||||
equipment_category = "weapon"
|
||||
select_hull.disabled = false
|
||||
select_engine.disabled = false
|
||||
select_shield.disabled = false
|
||||
select_weapon.disabled = true
|
||||
available_modules.clear()
|
||||
buyable_modules.clear()
|
||||
available_list = available_weapons.filter(func(index): return ship.weapons.has(index))
|
||||
buyable_list = available_weapons.filter(func(index): return !ship.weapons.has(index))
|
||||
add_available(available_list)
|
||||
add_buyable(buyable_list)
|
||||
|
||||
func add_available(avail_list):
|
||||
if len(avail_list) < 1:
|
||||
return
|
||||
for i in range(len(avail_list)):
|
||||
var meta = {
|
||||
'type' : equipment_category,
|
||||
'item' : avail_list[i],
|
||||
'equipped' : false,
|
||||
'primary' : false,
|
||||
'secondary' : false
|
||||
}
|
||||
match equipment_category:
|
||||
'hull':
|
||||
meta['price'] = hulls_prices[avail_list[i]]
|
||||
meta['equipped'] = ship.hull.id == avail_list[i]
|
||||
print(ship.hull.id, avail_list[i])
|
||||
'engine':
|
||||
meta['price'] = engines_prices[avail_list[i]]
|
||||
meta['equipped'] = ship.engine.id == avail_list[i]
|
||||
'shield':
|
||||
meta['price'] = shields_prices[avail_list[i]]
|
||||
meta['equipped'] = ship.shield.id == avail_list[i]
|
||||
'weapon':
|
||||
meta['price'] = weapons_prices[avail_list[i]]
|
||||
meta['primary'] = ship.primary_slot.get_child(0).id == avail_list[i]
|
||||
meta['secondary'] = ship.secondary_slot.get_child(0).id == avail_list[i]
|
||||
var embed = {
|
||||
'prefix' : '',
|
||||
'name' : Game.get_item(avail_list[i]).name,
|
||||
'price' : meta['price']
|
||||
}
|
||||
if meta['equipped']:
|
||||
embed['prefix'] = '(Equipped) '
|
||||
elif meta['primary'] and !meta['secondary']:
|
||||
embed['prefix'] = '(Primary) '
|
||||
elif meta['secondary'] and !meta['primary']:
|
||||
embed['prefix'] = '(Secondary) '
|
||||
elif meta['primary'] and meta['secondary']:
|
||||
embed['prefix'] = '(Both) '
|
||||
var text = "{prefix}{name} -> {price} MU".format(embed)
|
||||
available_modules.add_item(text)
|
||||
available_modules.set_item_metadata(i, meta)
|
||||
|
||||
func add_buyable(buy_list):
|
||||
if len(buy_list) < 1:
|
||||
return
|
||||
for i in range(len(buy_list)):
|
||||
var meta = {
|
||||
'type' : equipment_category,
|
||||
'item' : buy_list[i],
|
||||
'equipped' : false,
|
||||
'primary' : false,
|
||||
'secondary' : false
|
||||
}
|
||||
match equipment_category:
|
||||
'hull':
|
||||
meta['price'] = hulls_prices[buy_list[i]]
|
||||
'engine':
|
||||
meta['price'] = engines_prices[buy_list[i]]
|
||||
'shield':
|
||||
meta['price'] = shields_prices[buy_list[i]]
|
||||
'weapon':
|
||||
meta['price'] = weapons_prices[buy_list[i]]
|
||||
var embed = {
|
||||
'name' : Game.get_item(buy_list[i]).name,
|
||||
'price' : meta['price']
|
||||
}
|
||||
var text = "{name} -> {price} MU".format(embed)
|
||||
buyable_modules.add_item(text)
|
||||
buyable_modules.set_item_metadata(i, meta)
|
||||
|
||||
## Available modules focused in equipment menu
|
||||
func available_mod_focus(index : int, _at, _mouse):
|
||||
var meta = available_modules.get_item_metadata(index)
|
||||
if equipment_category == "weapon":
|
||||
buy_sell_mod.disabled = meta['primary'] or meta['secondary']
|
||||
equip_mod.disabled = true
|
||||
equip_primary.disabled = meta['primary']
|
||||
equip_secondary.disabled = meta['secondary']
|
||||
else:
|
||||
buy_sell_mod.disabled = meta['equipped']
|
||||
equip_mod.disabled = meta['equipped']
|
||||
equip_primary.disabled = true
|
||||
equip_secondary.disabled = true
|
||||
focused_mod_id = index
|
||||
focused_list = available_modules
|
||||
set_module_info_text(meta['item'])
|
||||
|
||||
## Buyable modules focused in equipment menu
|
||||
func buyable_mod_focus(index : int, _at, _mouse):
|
||||
var meta = buyable_modules.get_item_metadata(index)
|
||||
buy_sell_mod.disabled = ship.money < meta['price']
|
||||
equip_mod.disabled = true
|
||||
equip_primary.disabled = true
|
||||
equip_secondary.disabled = true
|
||||
focused_mod_id = index
|
||||
focused_list = buyable_modules
|
||||
set_module_info_text(meta['item'])
|
||||
|
||||
## Disable all actions with modules cuz it's not focused in equipment menu
|
||||
func mod_unfocus():
|
||||
buy_sell_mod.disabled = true
|
||||
equip_mod.disabled = true
|
||||
equip_primary.disabled = true
|
||||
equip_secondary.disabled = true
|
||||
label_mod_info.text = "Select a module to receive info about it."
|
||||
|
||||
func modules_list_empty_click(_at, _mouse):
|
||||
mod_unfocus()
|
||||
|
||||
func buy_module():
|
||||
var meta = buyable_modules.get_item_metadata(buyable_modules.get_selected_items()[0])
|
||||
var price = meta['price']
|
||||
var item = meta['item']
|
||||
if ship.money < price:
|
||||
return
|
||||
ship.money -= price
|
||||
match equipment_category:
|
||||
'hull':
|
||||
ship.hulls.append(item)
|
||||
select_hull_mod()
|
||||
'engine':
|
||||
ship.engines.append(item)
|
||||
select_engine_mod()
|
||||
'shield':
|
||||
ship.shields.append(item)
|
||||
select_shield_mod()
|
||||
'weapon':
|
||||
ship.weapons.append(item)
|
||||
select_weapon_mod()
|
||||
|
||||
func sell_module():
|
||||
var meta = available_modules.get_item_metadata(available_modules.get_selected_items()[0])
|
||||
if meta['equipped'] or meta['primary'] or meta['secondary']:
|
||||
return
|
||||
var price = meta['price']
|
||||
var item = meta['item']
|
||||
ship.money += price
|
||||
match equipment_category:
|
||||
'hull':
|
||||
ship.hulls.erase(item)
|
||||
select_hull_mod()
|
||||
'engine':
|
||||
ship.engines.erase(item)
|
||||
select_engine_mod()
|
||||
'shield':
|
||||
ship.shields.erase(item)
|
||||
select_shield_mod()
|
||||
'weapon':
|
||||
ship.weapons.erase(item)
|
||||
select_weapon_mod()
|
||||
|
||||
func buy_or_sell_mod():
|
||||
if equip_mod.disabled and equip_primary.disabled:
|
||||
buy_module()
|
||||
return
|
||||
sell_module()
|
||||
mod_unfocus()
|
||||
|
||||
func equip_module():
|
||||
var meta = available_modules.get_item_metadata(available_modules.get_selected_items()[0])
|
||||
match equipment_category:
|
||||
'hull':
|
||||
ship.change_hull(meta['item'])
|
||||
select_hull_mod()
|
||||
'engine':
|
||||
ship.change_engine(meta['item'])
|
||||
select_engine_mod()
|
||||
'shield':
|
||||
ship.change_shield(meta['item'])
|
||||
select_shield_mod()
|
||||
mod_unfocus()
|
||||
|
||||
func equip_weapon_primary():
|
||||
var meta = available_modules.get_item_metadata(available_modules.get_selected_items()[0])
|
||||
ship.change_primary_weapon(meta['item'])
|
||||
get_tree().create_timer(0.05).timeout.connect(select_weapon_mod)
|
||||
mod_unfocus()
|
||||
|
||||
func equip_weapon_secondary():
|
||||
var meta = available_modules.get_item_metadata(available_modules.get_selected_items()[0])
|
||||
ship.change_secondary_weapon(meta['item'])
|
||||
get_tree().create_timer(0.05).timeout.connect(select_weapon_mod)
|
||||
mod_unfocus()
|
||||
|
||||
func set_module_info_text(item):
|
||||
var itm = Game.get_item(item)
|
||||
var module
|
||||
var format
|
||||
if equipment_category == "weapon":
|
||||
module = Game.get_weapon(item).instantiate()
|
||||
else:
|
||||
module = Game.get_module(item, equipment_category).instantiate()
|
||||
var text = "{description}\nStats:\n".format({'description':itm.description})
|
||||
match equipment_category:
|
||||
'hull':
|
||||
format = {
|
||||
'maxhp' : module.max_hp,
|
||||
'maxfuel' : module.max_fuel,
|
||||
'maxcargo' : module.max_weight
|
||||
}
|
||||
text += "Max strength: {maxhp} HS\nFuel capacity: {maxfuel} FU\nCargo weight: {maxcargo} WU".format(format)
|
||||
'engine':
|
||||
format = {
|
||||
'maxspeed' : module.max_speed,
|
||||
'maxturbo' : module.max_turbo_speed,
|
||||
'acceleration' : module.acceleration,
|
||||
'fuelcons' : module.fuel_consumption,
|
||||
'rotation' : module.rotation_speed
|
||||
}
|
||||
text += "Max speed (normal): {maxspeed} MU/sec\nMax speed (turbo): {maxturbo} MU/sec\nAcceleration: {acceleration} MU/sec\nFuel consumption: {fuelcons} FU/sec\nRotation speed: {rotation} deg/sec".format(format)
|
||||
'shield':
|
||||
format = {
|
||||
'maxcap' : module.max_capacity,
|
||||
'recharge' : module.shield_charge_rate,
|
||||
'delay' : module.recharge_timer.wait_time,
|
||||
'laser' : module.laser_charge_rate
|
||||
}
|
||||
text += "Max capacity: {maxcap} SU\nСharge rate: {recharge} SU/sec\nRecharge delay: {delay} seconds\nLaser Сharge rate: {las} LE/sec".format(format)
|
||||
'weapon':
|
||||
format = {
|
||||
'spread' : module.spread,
|
||||
'ammotype' : module.ammo_type,
|
||||
'ammocons' : module.ammo_consumption,
|
||||
'firerate' : 1.0 / module.shoot_timer.wait_time
|
||||
}
|
||||
text += "Ammo type: {ammotype}\nAmmo consumption: {ammocons} units/usage\nFirerate: {firerate} usages/second\nSpread: {spread} degrees".format(format)
|
||||
label_mod_info.text = text
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ func change_menu(id):
|
|||
5: # First-timer Create Profile
|
||||
b1.id = "Null"
|
||||
b2.id = "FirstCreateProfileConfirm"
|
||||
b3.id = "Null"
|
||||
b3.id = "ExitGame"
|
||||
b4.id = "Null"
|
||||
b5.id = "Null"
|
||||
input.visible = true
|
||||
|
|
|
|||
|
|
@ -3,14 +3,20 @@ extends Area2D
|
|||
@export var menu : PackedScene
|
||||
@onready var base_collider = $"../BaseCollider/BaseColliderDetector"
|
||||
var menu_inst
|
||||
var ship_in_menu = false
|
||||
|
||||
func onbcbodyentered(body):
|
||||
if body is MainShip:
|
||||
body.engine.speed = 0
|
||||
|
||||
func _input(event):
|
||||
if event is InputEventKey and ship_in_menu:
|
||||
if Input.is_action_just_released("hide_menu"):
|
||||
menu_inst.visible = !menu_inst.visible
|
||||
|
||||
func _on_body_entered(body):
|
||||
if body is MainShip:
|
||||
ship_in_menu = true
|
||||
body.allow_shooting = false
|
||||
menu_inst = menu.instantiate()
|
||||
menu_inst.modulate = get_parent().modulate
|
||||
|
|
@ -26,3 +32,4 @@ func _on_body_exited(body):
|
|||
body.allow_shooting = true
|
||||
body.minimap.visible = true
|
||||
menu_inst.queue_free()
|
||||
ship_in_menu = false
|
||||
|
|
|
|||
|
|
@ -1,11 +1,23 @@
|
|||
extends Camera2D
|
||||
|
||||
@onready var engine = $"../Engine"
|
||||
@onready var ship = get_parent()
|
||||
var engine
|
||||
@onready var cur_scale = zoom.x
|
||||
@onready var min_scale = cur_scale / 1.5
|
||||
@onready var max_scale = cur_scale * 2
|
||||
var rdy = false
|
||||
|
||||
func _ready():
|
||||
get_tree().create_timer(0.05).timeout.connect(is_rdy)
|
||||
|
||||
func is_rdy():
|
||||
rdy = true
|
||||
engine = ship.engine
|
||||
|
||||
func _process(_delta):
|
||||
if !rdy:
|
||||
return
|
||||
engine = ship.engine
|
||||
var speed_percentage = engine.max_speed / engine.speed
|
||||
var factor : float
|
||||
if get_parent().allow_shooting:
|
||||
|
|
|
|||
|
|
@ -2,10 +2,23 @@ extends Label
|
|||
|
||||
@export var counter_id : String
|
||||
@onready var ship = $"../../.."
|
||||
@onready var hull = $"../../../Hull"
|
||||
@onready var shield = $"../../../Shield"
|
||||
var hull
|
||||
var shield
|
||||
var rdy = false
|
||||
|
||||
func _ready():
|
||||
get_tree().create_timer(0.05).timeout.connect(is_rdy)
|
||||
|
||||
func is_rdy():
|
||||
rdy = true
|
||||
hull = ship.hull
|
||||
shield = ship.shield
|
||||
|
||||
func _process(_delta) -> void:
|
||||
if !rdy:
|
||||
return
|
||||
hull = ship.hull
|
||||
shield = ship.shield
|
||||
match counter_id:
|
||||
"ammo":
|
||||
text = str(hull.ammunition)
|
||||
|
|
|
|||
|
|
@ -1,8 +1,20 @@
|
|||
extends Line2D
|
||||
|
||||
@onready var engine = $"../../../Engine"
|
||||
@onready var ship = $"../../.."
|
||||
var engine
|
||||
var rdy = false
|
||||
|
||||
func _ready():
|
||||
get_tree().create_timer(0.05).timeout.connect(is_rdy)
|
||||
|
||||
func is_rdy():
|
||||
rdy = true
|
||||
engine = ship.engine
|
||||
|
||||
func _process(_delta):
|
||||
if !rdy:
|
||||
return
|
||||
engine = ship.engine
|
||||
var speed_percentage : float = engine.speed / engine.max_speed * 100
|
||||
var new_points = [Vector2.ZERO, Vector2(speed_percentage, 0)]
|
||||
points = PackedVector2Array(new_points)
|
||||
|
|
|
|||
|
|
@ -10,6 +10,15 @@ var want_to_buy : Array[Item] = []
|
|||
var sell_prices : Array[float] = []
|
||||
var buy_prices : Array[float] = []
|
||||
|
||||
var available_hulls : Array[String] = []
|
||||
var available_engines : Array[String] = []
|
||||
var available_shields : Array[String] = []
|
||||
var available_weapons : Array[String] = []
|
||||
var hulls_prices : Dictionary
|
||||
var engines_prices : Dictionary
|
||||
var shields_prices : Dictionary
|
||||
var weapons_prices : Dictionary
|
||||
|
||||
var quest : Quest = Quest.new()
|
||||
const available_quests : Array[Quest.TYPE]= [Quest.TYPE.ELIMINATION, Quest.TYPE.DELIVERY]
|
||||
const restrictions_foreach_type : Dictionary = {
|
||||
|
|
@ -18,6 +27,7 @@ const restrictions_foreach_type : Dictionary = {
|
|||
}
|
||||
|
||||
func _ready():
|
||||
fetch_modules()
|
||||
randomize()
|
||||
ship.minimap.add_marker(self, "base")
|
||||
match type:
|
||||
|
|
@ -57,16 +67,32 @@ func update_prices():
|
|||
var price : float
|
||||
for item in want_to_sell:
|
||||
if type != Game.BASE_TYPE.TRADING:
|
||||
price = randi_range(item.min_price, item.max_price * 100) / 100.0
|
||||
price = randi_range(item.min_price * 100, item.max_price * 100) / 100.0
|
||||
else:
|
||||
price = randi_range((item.max_price + item.min_price) / 2 * 100, item.max_price * 100) / 100.0
|
||||
sell_prices.append(price)
|
||||
for item in want_to_buy:
|
||||
if type != Game.BASE_TYPE.TRADING:
|
||||
price = randi_range(item.min_price, item.max_price * 100) / 100.0
|
||||
price = randi_range(item.min_price * 100, item.max_price * 100) / 100.0
|
||||
else:
|
||||
price = randi_range(item.min_price * 100, (item.max_price + item.min_price) / 2 * 100) / 100.0
|
||||
buy_prices.append(price)
|
||||
for hull in available_hulls:
|
||||
var item = Game.get_item(hull)
|
||||
price = randi_range(item.min_price * 100, item.max_price * 100) / 100.0
|
||||
hulls_prices[hull] = price
|
||||
for engine in available_engines:
|
||||
var item = Game.get_item(engine)
|
||||
price = randi_range(item.min_price * 100, item.max_price * 100) / 100.0
|
||||
engines_prices[engine] = price
|
||||
for shield in available_shields:
|
||||
var item = Game.get_item(shield)
|
||||
price = randi_range(item.min_price * 100, item.max_price * 100) / 100.0
|
||||
shields_prices[shield] = price
|
||||
for weapon in available_weapons:
|
||||
var item = Game.get_item(weapon)
|
||||
price = randi_range(item.min_price * 100, item.max_price * 100) / 100.0
|
||||
weapons_prices[weapon] = price
|
||||
|
||||
func generate_quest():
|
||||
var difficulty : float = randi_range(100, 300) / 100.0
|
||||
|
|
@ -98,3 +124,33 @@ func generate_quest():
|
|||
reward_multiplier += 0.5
|
||||
reward_money *= reward_multiplier
|
||||
quest.create(quest_type, progress_max, reward_money, restrictions, data)
|
||||
|
||||
## Loads all available modules in memory
|
||||
func fetch_modules():
|
||||
available_hulls.clear()
|
||||
var dir = DirAccess.open("res://scenes/hulls")
|
||||
var modules = dir.get_files()
|
||||
available_hulls = check_for_item(modules)
|
||||
|
||||
available_engines.clear()
|
||||
dir = DirAccess.open("res://scenes/engines")
|
||||
modules = dir.get_files()
|
||||
available_engines = check_for_item(modules)
|
||||
|
||||
available_shields.clear()
|
||||
dir = DirAccess.open("res://scenes/shields")
|
||||
modules = dir.get_files()
|
||||
available_shields = check_for_item(modules)
|
||||
|
||||
available_weapons.clear()
|
||||
dir = DirAccess.open("res://scenes/weapons/presets")
|
||||
modules = dir.get_files()
|
||||
available_weapons = check_for_item(modules)
|
||||
|
||||
func check_for_item(modules : Array[String]) -> Array[String]:
|
||||
var returnable : Array[String] = []
|
||||
for module in modules:
|
||||
var itm = module.trim_suffix(".tscn")
|
||||
if Game.get_item(itm).name != Game.DEFAULT_ITEM.name:
|
||||
returnable.append(itm)
|
||||
return returnable
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ class_name Hull
|
|||
@export var max_hp : float = 30
|
||||
@export var max_fuel : float = 1000
|
||||
@export var max_weight : float = 100
|
||||
@export var id : String = "starterhull"
|
||||
@onready var hp : float = max_hp
|
||||
@onready var fuel : float = max_fuel
|
||||
|
||||
|
|
|
|||
|
|
@ -17,6 +17,11 @@ var money : float = 1000
|
|||
var quest : Quest = Quest.new()
|
||||
var quest_completed : bool = false
|
||||
|
||||
var hulls : Array[String] = ["starterhull"]
|
||||
var engines : Array[String] = ["starterengine"]
|
||||
var shields : Array[String] = ["startershield"]
|
||||
var weapons : Array[String] = ["SingleLaserMk1"]
|
||||
|
||||
signal destroyed
|
||||
|
||||
func _ready():
|
||||
|
|
@ -24,9 +29,6 @@ func _ready():
|
|||
quest.quest_ended.connect(kill_quest)
|
||||
quest.quest_failed.connect(kill_quest)
|
||||
destroyed.connect(quest._restriction_no_deaths)
|
||||
|
||||
secondary_slot.add_child(Game.get_weapon("SingleRocketMk1").instantiate())
|
||||
|
||||
#quest.create(Quest.TYPE.ELIMINATION, 2, 200)
|
||||
|
||||
func _process(_delta):
|
||||
|
|
@ -64,3 +66,40 @@ func enemy_destroyed(_enemy):
|
|||
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(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)
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ class_name Shield
|
|||
@export var recharge_timer : Timer
|
||||
@export var laser_timer : Timer
|
||||
@export var laser_charge_rate : float = 20
|
||||
@export var id : String = "startershield"
|
||||
@onready var ship = get_parent()
|
||||
@onready var capacity : float = max_capacity
|
||||
var can_recharge : bool = false
|
||||
|
|
|
|||
|
|
@ -7,17 +7,28 @@ class_name ShipEngine
|
|||
@export var acceleration : float = 50
|
||||
@export var fuel_consumption : float = 100
|
||||
@export var rotation_speed : int = 90
|
||||
@export var id : String = "starterengine"
|
||||
@onready var ship = get_parent()
|
||||
@onready var hull = $"../Hull"
|
||||
var hull
|
||||
var speed = 0
|
||||
var min_speed = max_speed / -4
|
||||
var turbo_enabled = false
|
||||
var alternative_movement = false
|
||||
var destination_angle : float
|
||||
var destination_difference : float
|
||||
var rdy = false
|
||||
|
||||
func _ready():
|
||||
get_tree().create_timer(0.05).timeout.connect(is_rdy)
|
||||
|
||||
func is_rdy():
|
||||
rdy = true
|
||||
hull = ship.hull
|
||||
|
||||
func _physics_process(delta):
|
||||
if !rdy:
|
||||
return
|
||||
hull = ship.hull
|
||||
var turbo_input = Input.get_action_raw_strength("turbo")
|
||||
var acceleration_input = Input.get_axis("deccelerate", "accelerate") if ship is MainShip else 1.0
|
||||
var rotation_input = Input.get_axis("rotateleft","rotateright")
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ class_name Weapon
|
|||
@export var shoot_timer : Timer
|
||||
@export var shoot_action : String = ""
|
||||
@export var spawner_points : Array[Node2D]
|
||||
var id : String = "SingleLaserMk1"
|
||||
@export var id : String = "SingleLaserMk1"
|
||||
@onready var ship = $"../.."
|
||||
@onready var slot = $".."
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue