From 1383997ebfd4b84b04851c26739d39a0edb1314d6c5afbc483a9e3599897a9e1 Mon Sep 17 00:00:00 2001 From: aslan Date: Fri, 12 Sep 2025 08:34:06 -0400 Subject: [PATCH] Add initial game code --- .editorconfig | 4 + .gitattributes | 2 + Idle Starship.csproj | 7 + Idle Starship.sln | 19 ++ icon.svg | 1 + icon.svg.import | 43 ++++ project.godot | 25 +++ scenes/game.tscn | 75 +++++++ scenes/main_menu.tscn | 31 +++ scripts/AI.cs | 62 ++++++ scripts/AI.cs.uid | 1 + scripts/Constants.cs | 6 + scripts/Constants.cs.uid | 1 + scripts/Controller.cs | 77 +++++++ scripts/Controller.cs.uid | 1 + scripts/DestinationOrder.cs | 11 + scripts/DestinationOrder.cs.uid | 1 + scripts/GameManager.cs | 69 ++++++ scripts/GameManager.cs.uid | 1 + scripts/GameObject.cs | 37 ++++ scripts/GameObject.cs.uid | 1 + scripts/GameObjects/Galaxy.cs | 22 ++ scripts/GameObjects/Galaxy.cs.uid | 1 + scripts/GameObjects/Item.cs | 13 ++ scripts/GameObjects/Item.cs.uid | 1 + scripts/GameObjects/Items/Component.cs | 13 ++ scripts/GameObjects/Items/Component.cs.uid | 1 + scripts/GameObjects/Life.cs | 13 ++ scripts/GameObjects/Life.cs.uid | 1 + scripts/GameObjects/Nebula.cs | 22 ++ scripts/GameObjects/Nebula.cs.uid | 1 + scripts/GameObjects/Planet.cs | 35 +++ scripts/GameObjects/Planet.cs.uid | 1 + scripts/GameObjects/Ship.cs | 23 ++ scripts/GameObjects/Ship.cs.uid | 1 + scripts/GameObjects/Star.cs | 33 +++ scripts/GameObjects/Star.cs.uid | 1 + scripts/GameObjects/Structure.cs | 136 ++++++++++++ scripts/GameObjects/Structure.cs.uid | 1 + scripts/GameObjects/Universe.cs | 39 ++++ scripts/GameObjects/Universe.cs.uid | 1 + scripts/GameState.cs | 21 ++ scripts/GameState.cs.uid | 1 + scripts/Generator.cs | 188 +++++++++++++++++ scripts/Generator.cs.uid | 1 + scripts/Helpers.cs | 234 +++++++++++++++++++++ scripts/Helpers.cs.uid | 1 + scripts/MainMenu/MainMenuController.cs | 28 +++ scripts/MainMenu/MainMenuController.cs.uid | 1 + scripts/Order.cs | 21 ++ scripts/Order.cs.uid | 1 + scripts/Structures/CoordinateVector.cs | 11 + scripts/Structures/CoordinateVector.cs.uid | 1 + scripts/TickOrder.cs | 11 + scripts/TickOrder.cs.uid | 1 + 55 files changed, 1355 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 Idle Starship.csproj create mode 100644 Idle Starship.sln create mode 100644 icon.svg create mode 100644 icon.svg.import create mode 100644 project.godot create mode 100644 scenes/game.tscn create mode 100644 scenes/main_menu.tscn create mode 100644 scripts/AI.cs create mode 100644 scripts/AI.cs.uid create mode 100644 scripts/Constants.cs create mode 100644 scripts/Constants.cs.uid create mode 100644 scripts/Controller.cs create mode 100644 scripts/Controller.cs.uid create mode 100644 scripts/DestinationOrder.cs create mode 100644 scripts/DestinationOrder.cs.uid create mode 100644 scripts/GameManager.cs create mode 100644 scripts/GameManager.cs.uid create mode 100644 scripts/GameObject.cs create mode 100644 scripts/GameObject.cs.uid create mode 100644 scripts/GameObjects/Galaxy.cs create mode 100644 scripts/GameObjects/Galaxy.cs.uid create mode 100644 scripts/GameObjects/Item.cs create mode 100644 scripts/GameObjects/Item.cs.uid create mode 100644 scripts/GameObjects/Items/Component.cs create mode 100644 scripts/GameObjects/Items/Component.cs.uid create mode 100644 scripts/GameObjects/Life.cs create mode 100644 scripts/GameObjects/Life.cs.uid create mode 100644 scripts/GameObjects/Nebula.cs create mode 100644 scripts/GameObjects/Nebula.cs.uid create mode 100644 scripts/GameObjects/Planet.cs create mode 100644 scripts/GameObjects/Planet.cs.uid create mode 100644 scripts/GameObjects/Ship.cs create mode 100644 scripts/GameObjects/Ship.cs.uid create mode 100644 scripts/GameObjects/Star.cs create mode 100644 scripts/GameObjects/Star.cs.uid create mode 100644 scripts/GameObjects/Structure.cs create mode 100644 scripts/GameObjects/Structure.cs.uid create mode 100644 scripts/GameObjects/Universe.cs create mode 100644 scripts/GameObjects/Universe.cs.uid create mode 100644 scripts/GameState.cs create mode 100644 scripts/GameState.cs.uid create mode 100644 scripts/Generator.cs create mode 100644 scripts/Generator.cs.uid create mode 100644 scripts/Helpers.cs create mode 100644 scripts/Helpers.cs.uid create mode 100644 scripts/MainMenu/MainMenuController.cs create mode 100644 scripts/MainMenu/MainMenuController.cs.uid create mode 100644 scripts/Order.cs create mode 100644 scripts/Order.cs.uid create mode 100644 scripts/Structures/CoordinateVector.cs create mode 100644 scripts/Structures/CoordinateVector.cs.uid create mode 100644 scripts/TickOrder.cs create mode 100644 scripts/TickOrder.cs.uid diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..1617678 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,4 @@ +root = true + +[*] +charset = utf-8 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..83264fb --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Normalize EOL for all files that Git considers text files. +* text=auto eol=lf diff --git a/Idle Starship.csproj b/Idle Starship.csproj new file mode 100644 index 0000000..b6e08cd --- /dev/null +++ b/Idle Starship.csproj @@ -0,0 +1,7 @@ + + + net8.0 + true + IdleStarship + + \ No newline at end of file diff --git a/Idle Starship.sln b/Idle Starship.sln new file mode 100644 index 0000000..1d00cbf --- /dev/null +++ b/Idle Starship.sln @@ -0,0 +1,19 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Idle Starship", "Idle Starship.csproj", "{3CFAAC77-A968-438F-8CDD-E4152B8DB981}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + ExportDebug|Any CPU = ExportDebug|Any CPU + ExportRelease|Any CPU = ExportRelease|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3CFAAC77-A968-438F-8CDD-E4152B8DB981}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3CFAAC77-A968-438F-8CDD-E4152B8DB981}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3CFAAC77-A968-438F-8CDD-E4152B8DB981}.ExportDebug|Any CPU.ActiveCfg = ExportDebug|Any CPU + {3CFAAC77-A968-438F-8CDD-E4152B8DB981}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU + {3CFAAC77-A968-438F-8CDD-E4152B8DB981}.ExportRelease|Any CPU.ActiveCfg = ExportRelease|Any CPU + {3CFAAC77-A968-438F-8CDD-E4152B8DB981}.ExportRelease|Any CPU.Build.0 = ExportRelease|Any CPU + EndGlobalSection +EndGlobal diff --git a/icon.svg b/icon.svg new file mode 100644 index 0000000..1345199 --- /dev/null +++ b/icon.svg @@ -0,0 +1 @@ + diff --git a/icon.svg.import b/icon.svg.import new file mode 100644 index 0000000..22fa8a9 --- /dev/null +++ b/icon.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b1rrvmekhjw68" +path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.svg" +dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/project.godot b/project.godot new file mode 100644 index 0000000..da2c807 --- /dev/null +++ b/project.godot @@ -0,0 +1,25 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="Idle Starship" +run/main_scene="uid://h3dgo6me76t7" +config/features=PackedStringArray("4.5", "C#", "Mobile") +config/icon="res://icon.svg" + +[dotnet] + +project/assembly_name="Idle Starship" + +[rendering] + +renderer/rendering_method="mobile" +textures/vram_compression/import_etc2_astc=true diff --git a/scenes/game.tscn b/scenes/game.tscn new file mode 100644 index 0000000..312a07a --- /dev/null +++ b/scenes/game.tscn @@ -0,0 +1,75 @@ +[gd_scene load_steps=4 format=3 uid="uid://u1kttqp08vjc"] + +[ext_resource type="Script" uid="uid://bladckxyu6xmy" path="res://scripts/Controller.cs" id="1_lnu2h"] +[ext_resource type="Script" uid="uid://c0d47hdgdfsa6" path="res://scripts/GameManager.cs" id="1_yqjtg"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_yqjtg"] + +[node name="Control" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_lnu2h") + +[node name="Game" type="Node2D" parent="."] + +[node name="GameManager" type="Node" parent="."] +script = ExtResource("1_yqjtg") + +[node name="Container" type="VBoxContainer" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Top" type="HBoxContainer" parent="Container"] +layout_mode = 2 + +[node name="ExitToMenuButton" type="Button" parent="Container/Top"] +layout_mode = 2 +text = "Exit to Menu" + +[node name="Separator" type="Control" parent="Container/Top"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="TabContainer" type="TabContainer" parent="Container"] +layout_mode = 2 +size_flags_vertical = 3 +theme_override_styles/panel = SubResource("StyleBoxEmpty_yqjtg") +tab_alignment = 1 +current_tab = 0 +tabs_position = 1 + +[node name="Ship" type="Control" parent="Container/TabContainer"] +layout_mode = 2 +metadata/_tab_index = 0 + +[node name="ShipInfo" type="VBoxContainer" parent="Container/TabContainer/Ship"] +layout_mode = 1 +offset_right = 41.0 +offset_bottom = 31.0 + +[node name="ShipInfoLabel" type="Label" parent="Container/TabContainer/Ship/ShipInfo"] +layout_mode = 2 +text = "Ship Info" + +[node name="Cargo" type="Control" parent="Container/TabContainer"] +visible = false +layout_mode = 2 +metadata/_tab_index = 1 + +[node name="Sensors" type="Control" parent="Container/TabContainer"] +visible = false +layout_mode = 2 +metadata/_tab_index = 2 + +[node name="Actions" type="Control" parent="Container/TabContainer"] +visible = false +layout_mode = 2 +metadata/_tab_index = 3 diff --git a/scenes/main_menu.tscn b/scenes/main_menu.tscn new file mode 100644 index 0000000..2ef037e --- /dev/null +++ b/scenes/main_menu.tscn @@ -0,0 +1,31 @@ +[gd_scene load_steps=2 format=3 uid="uid://h3dgo6me76t7"] + +[ext_resource type="Script" uid="uid://722ol864mjx4" path="res://scripts/MainMenu/MainMenuController.cs" id="1_l6cm7"] + +[node name="Control" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_l6cm7") + +[node name="CenterContainer" type="CenterContainer" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="CenterContainer"] +layout_mode = 2 + +[node name="StartGameButton" type="Button" parent="CenterContainer/VBoxContainer"] +layout_mode = 2 +text = "Start Game" + +[node name="ExitGameButton" type="Button" parent="CenterContainer/VBoxContainer"] +layout_mode = 2 +text = "Exit Game" diff --git a/scripts/AI.cs b/scripts/AI.cs new file mode 100644 index 0000000..70ee858 --- /dev/null +++ b/scripts/AI.cs @@ -0,0 +1,62 @@ +using System; + +public partial class AI +{ + public Structure Parent { get; private set; } + + private Random RandomGenerator; + + public AI(Structure parent) + { + this.Parent = parent; + + this.RandomGenerator = new Random(); + } + + public Order Think() + { + // Change of MOVE order, if mobile and in space + if (this.Parent.IsMobile && !this.Parent.IsLanded && Helpers.GetChance(30)) + { + // Chance of local movement + if (Helpers.GetChance(95)) + { + // Chance of aimless movement + if (Helpers.GetChance(100)) + { + CoordinateVector deltaCoordinates = Helpers.GetRandomCoordinatesFromAU( + -0.5M, 0.5M, + -0.5M, 0.5M + ); + CoordinateVector newCoordinates = Helpers.CalculateNewCoordinates(this.Parent, deltaCoordinates); + + return new DestinationOrder(Order.OrderType.MOVE_THRUSTERS, newCoordinates); + } + else + { + + } + } + else + { + // Chance of aimless movement + if (Helpers.GetChance(100)) + { + CoordinateVector deltaCoordinates = Helpers.GetRandomCoordinatesFromLY( + -500M, 500M, + -500M, 500M + ); + CoordinateVector newCoordinates = Helpers.CalculateNewCoordinates(this.Parent, deltaCoordinates); + + return new DestinationOrder(Order.OrderType.MOVE_WARP, newCoordinates); + } + else + { + + } + } + } + + return new TickOrder(Order.OrderType.IDLE, 10); + } +} diff --git a/scripts/AI.cs.uid b/scripts/AI.cs.uid new file mode 100644 index 0000000..34ed773 --- /dev/null +++ b/scripts/AI.cs.uid @@ -0,0 +1 @@ +uid://bug3poo3pmoya diff --git a/scripts/Constants.cs b/scripts/Constants.cs new file mode 100644 index 0000000..6d59771 --- /dev/null +++ b/scripts/Constants.cs @@ -0,0 +1,6 @@ +public static class Constants +{ + public static decimal KM_M = 1000M; + public static decimal AU_M = 149597870700M; + public static decimal LY_M = 9460737937559000M; +} diff --git a/scripts/Constants.cs.uid b/scripts/Constants.cs.uid new file mode 100644 index 0000000..dfbc30c --- /dev/null +++ b/scripts/Constants.cs.uid @@ -0,0 +1 @@ +uid://docln1h1c6m41 diff --git a/scripts/Controller.cs b/scripts/Controller.cs new file mode 100644 index 0000000..4dd8d90 --- /dev/null +++ b/scripts/Controller.cs @@ -0,0 +1,77 @@ +using System; +using Godot; + +public partial class Controller : Node +{ + private decimal LastTick = 0; + private bool TicksThrottled = false; + + public Ship PlayerShip { get; private set; } + + public Button ExitToMenuButton { get; private set; } + + public Label ShipInfoLabel { get; private set; } + + public override void _Ready() + { + base._Ready(); + + this.ExitToMenuButton = GetNode