diff --git a/Assets/Images/Research/BasicsSymbol.png b/Assets/Images/Research/BasicsSymbol.png new file mode 100644 index 0000000..f851a78 Binary files /dev/null and b/Assets/Images/Research/BasicsSymbol.png differ diff --git a/Assets/Images/Research/BasicsSymbol.png.import b/Assets/Images/Research/BasicsSymbol.png.import new file mode 100644 index 0000000..fbebc4c --- /dev/null +++ b/Assets/Images/Research/BasicsSymbol.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cv76v3845c3ff" +path="res://.godot/imported/BasicsSymbol.png-a01daba6cb03ee9cf8ccd4490920bec0.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Images/Research/BasicsSymbol.png" +dest_files=["res://.godot/imported/BasicsSymbol.png-a01daba6cb03ee9cf8ccd4490920bec0.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 diff --git a/Assets/Images/Research/BronzeageSymbol.png b/Assets/Images/Research/BronzeageSymbol.png new file mode 100644 index 0000000..825c320 Binary files /dev/null and b/Assets/Images/Research/BronzeageSymbol.png differ diff --git a/Assets/Images/Research/BronzeageSymbol.png.import b/Assets/Images/Research/BronzeageSymbol.png.import new file mode 100644 index 0000000..8c557e9 --- /dev/null +++ b/Assets/Images/Research/BronzeageSymbol.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://chr4p5ns0n3n5" +path="res://.godot/imported/BronzeageSymbol.png-1285905aa4eae49f9c832663e55b2f43.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Images/Research/BronzeageSymbol.png" +dest_files=["res://.godot/imported/BronzeageSymbol.png-1285905aa4eae49f9c832663e55b2f43.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 diff --git a/Assets/Images/Research/CopperageSymbol.png b/Assets/Images/Research/CopperageSymbol.png new file mode 100644 index 0000000..523d909 Binary files /dev/null and b/Assets/Images/Research/CopperageSymbol.png differ diff --git a/Assets/Images/Research/CopperageSymbol.png.import b/Assets/Images/Research/CopperageSymbol.png.import new file mode 100644 index 0000000..7ac5f13 --- /dev/null +++ b/Assets/Images/Research/CopperageSymbol.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://jrv5xnbfcn2o" +path="res://.godot/imported/CopperageSymbol.png-8c4ce73b4c0fc81e445b053ca318cde1.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Images/Research/CopperageSymbol.png" +dest_files=["res://.godot/imported/CopperageSymbol.png-8c4ce73b4c0fc81e445b053ca318cde1.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 diff --git a/Assets/Images/Research/IronageSymbol.png b/Assets/Images/Research/IronageSymbol.png new file mode 100644 index 0000000..3d1616a Binary files /dev/null and b/Assets/Images/Research/IronageSymbol.png differ diff --git a/Assets/Images/Research/IronageSymbol.png.import b/Assets/Images/Research/IronageSymbol.png.import new file mode 100644 index 0000000..933a046 --- /dev/null +++ b/Assets/Images/Research/IronageSymbol.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cy7c16352g6pq" +path="res://.godot/imported/IronageSymbol.png-39224787c5463ca99d1883f6a5875248.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Images/Research/IronageSymbol.png" +dest_files=["res://.godot/imported/IronageSymbol.png-39224787c5463ca99d1883f6a5875248.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 diff --git a/Assets/Images/Research/StoneageSymbol.png b/Assets/Images/Research/StoneageSymbol.png new file mode 100644 index 0000000..c922c77 Binary files /dev/null and b/Assets/Images/Research/StoneageSymbol.png differ diff --git a/Assets/Images/Research/StoneageSymbol.png.import b/Assets/Images/Research/StoneageSymbol.png.import new file mode 100644 index 0000000..254c787 --- /dev/null +++ b/Assets/Images/Research/StoneageSymbol.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://67pb1ajfs85y" +path="res://.godot/imported/StoneageSymbol.png-e2c2604dc51c02e3cc86b76cc1baf943.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Images/Research/StoneageSymbol.png" +dest_files=["res://.godot/imported/StoneageSymbol.png-e2c2604dc51c02e3cc86b76cc1baf943.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 diff --git a/Assets/Images/Sources/BasicsSymbol.aseprite b/Assets/Images/Sources/BasicsSymbol.aseprite new file mode 100644 index 0000000..b47e5b3 Binary files /dev/null and b/Assets/Images/Sources/BasicsSymbol.aseprite differ diff --git a/Assets/Images/Sources/BronzeageSymbol.aseprite b/Assets/Images/Sources/BronzeageSymbol.aseprite new file mode 100644 index 0000000..0a69f27 Binary files /dev/null and b/Assets/Images/Sources/BronzeageSymbol.aseprite differ diff --git a/Assets/Images/Sources/CopperageSymbol.aseprite b/Assets/Images/Sources/CopperageSymbol.aseprite new file mode 100644 index 0000000..9e96476 Binary files /dev/null and b/Assets/Images/Sources/CopperageSymbol.aseprite differ diff --git a/Assets/Images/Sources/IronageSymbol.aseprite b/Assets/Images/Sources/IronageSymbol.aseprite new file mode 100644 index 0000000..0b249c4 Binary files /dev/null and b/Assets/Images/Sources/IronageSymbol.aseprite differ diff --git a/Assets/Images/Sources/StoneageSymbol.aseprite b/Assets/Images/Sources/StoneageSymbol.aseprite new file mode 100644 index 0000000..717ead0 Binary files /dev/null and b/Assets/Images/Sources/StoneageSymbol.aseprite differ diff --git a/Assets/Research.json b/Assets/Research.json index fc66925..81e8dae 100644 --- a/Assets/Research.json +++ b/Assets/Research.json @@ -3,7 +3,8 @@ "id": "basics", "inputs": [], "research": "", - "crafttime": 1.0 + "crafttime": 1.0, + "texture": "res://Assets/Images/Research/BasicsSymbol.png" }, { "id": "stoneage", @@ -18,7 +19,8 @@ } ], "research": "basics", - "crafttime": 1.0 + "crafttime": 1.0, + "texture": "res://Assets/Images/Research/StoneageSymbol.png" }, { "id": "copperage", @@ -33,7 +35,8 @@ } ], "research": "stoneage", - "crafttime": 1.0 + "crafttime": 1.0, + "texture": "res://Assets/Images/Research/CopperageSymbol.png" }, { "id": "bronzeage", @@ -48,7 +51,8 @@ } ], "research": "copperage", - "crafttime": 1.0 + "crafttime": 1.0, + "texture": "res://Assets/Images/Research/BronzeageSymbol.png" }, { "id": "ironage", @@ -67,6 +71,7 @@ } ], "research": "bronzeage", - "crafttime": 1.0 + "crafttime": 1.0, + "texture": "res://Assets/Images/Research/IronageSymbol.png" } ] \ No newline at end of file diff --git a/Scenes/Game.tscn b/Scenes/Game.tscn index e845bad..69dde5c 100644 --- a/Scenes/Game.tscn +++ b/Scenes/Game.tscn @@ -15,6 +15,7 @@ [ext_resource type="Texture2D" uid="uid://ban872p4eh4gi" path="res://Assets/Images/RobotSymbol.png" id="11_dahhg"] [ext_resource type="Texture2D" uid="uid://ciehcg34et0q3" path="res://Assets/Images/InventorySymbol.png" id="11_wxwew"] [ext_resource type="Texture2D" uid="uid://b77mo4fhklnja" path="res://Assets/Images/OptionsSymbol.png" id="12_3so38"] +[ext_resource type="Script" uid="uid://drscsrkfphpy7" path="res://Scripts/Research/ResearchList.cs" id="12_4q8tf"] [ext_resource type="Texture2D" uid="uid://dt84awx33mulb" path="res://Assets/Images/ResearchSymbol.png" id="13_alh3a"] [sub_resource type="CompressedTexture2D" id="CompressedTexture2D_u44n3"] @@ -395,6 +396,19 @@ size_flags_horizontal = 3 size_flags_vertical = 3 theme_override_constants/separation = 10 +[node name="Research" type="PanelContainer" parent="CanvasLayer/UIHandler/MainUI/Content" unique_id=1416471893 node_paths=PackedStringArray("researchGraph")] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("12_4q8tf") +researchGraph = NodePath("ResearchGraph") + +[node name="ResearchGraph" type="GraphEdit" parent="CanvasLayer/UIHandler/MainUI/Content/Research" unique_id=414756119] +layout_mode = 2 + [node name="FooterContainer" type="PanelContainer" parent="CanvasLayer/UIHandler/MainUI" unique_id=1495029884] layout_mode = 2 diff --git a/Scenes/MainMenu.tscn b/Scenes/MainMenu.tscn index fb11d9e..29b1392 100644 --- a/Scenes/MainMenu.tscn +++ b/Scenes/MainMenu.tscn @@ -35,6 +35,50 @@ grow_horizontal = 2 grow_vertical = 2 script = ExtResource("1_tt5f1") +[node name="Decoration" type="Control" parent="." unique_id=252748481] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="TextureRect" type="TextureRect" parent="Decoration" unique_id=175718935] +layout_mode = 0 +offset_left = 19.0 +offset_top = 960.0 +offset_right = 51.0 +offset_bottom = 992.0 +scale = Vector2(3, 3) +texture = ExtResource("2_853f1") + +[node name="TextureRect2" type="TextureRect" parent="Decoration" unique_id=1274351412] +layout_mode = 0 +offset_left = 1730.0001 +offset_top = 51.0 +offset_right = 1770.0001 +offset_bottom = 91.0 +scale = Vector2(3, 3) +texture = ExtResource("3_df05h") + +[node name="TextureRect3" type="TextureRect" parent="Decoration" unique_id=1496393482] +layout_mode = 0 +offset_left = 517.0 +offset_top = 264.0 +offset_right = 557.0 +offset_bottom = 304.0 +scale = Vector2(3, 3) +texture = ExtResource("4_8um5k") + +[node name="TextureRect4" type="TextureRect" parent="Decoration" unique_id=606748204] +layout_mode = 0 +offset_left = 1443.0 +offset_top = 538.0 +offset_right = 1483.0 +offset_bottom = 578.0 +scale = Vector2(3, 3) +texture = ExtResource("5_xim88") + [node name="Panel" type="Panel" parent="." unique_id=167014122] layout_mode = 1 anchors_preset = 15 @@ -91,49 +135,5 @@ theme_override_styles/normal = SubResource("StyleBoxFlat_bnhvo") theme_override_styles/hover = SubResource("StyleBoxFlat_tt5f1") text = "Exit Game" -[node name="Decoration" type="Control" parent="." unique_id=252748481] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 - -[node name="TextureRect" type="TextureRect" parent="Decoration" unique_id=175718935] -layout_mode = 0 -offset_left = 19.0 -offset_top = 960.0 -offset_right = 51.0 -offset_bottom = 992.0 -scale = Vector2(3, 3) -texture = ExtResource("2_853f1") - -[node name="TextureRect2" type="TextureRect" parent="Decoration" unique_id=1274351412] -layout_mode = 0 -offset_left = 1730.0001 -offset_top = 51.0 -offset_right = 1770.0001 -offset_bottom = 91.0 -scale = Vector2(3, 3) -texture = ExtResource("3_df05h") - -[node name="TextureRect3" type="TextureRect" parent="Decoration" unique_id=1496393482] -layout_mode = 0 -offset_left = 517.0 -offset_top = 264.0 -offset_right = 557.0 -offset_bottom = 304.0 -scale = Vector2(3, 3) -texture = ExtResource("4_8um5k") - -[node name="TextureRect4" type="TextureRect" parent="Decoration" unique_id=606748204] -layout_mode = 0 -offset_left = 1443.0 -offset_top = 538.0 -offset_right = 1483.0 -offset_bottom = 578.0 -scale = Vector2(3, 3) -texture = ExtResource("5_xim88") - [connection signal="button_up" from="CenterContainer/VBoxContainer/btnPlay" to="." method="OnPlayPressed"] [connection signal="button_up" from="CenterContainer/VBoxContainer/btnExit" to="." method="OnQuitPressed"] diff --git a/Scripts/Crafting/Item.cs b/Scripts/Crafting/Item.cs index d85cbdf..7051864 100644 --- a/Scripts/Crafting/Item.cs +++ b/Scripts/Crafting/Item.cs @@ -12,10 +12,8 @@ public class Item public CraftingResult Craft(int amount, double delta) { elapsedCraftTime += delta; - GD.Print(elapsedCraftTime); if (elapsedCraftTime >= data.CraftTime) { - GD.Print("Crafted!"); elapsedCraftTime -= data.CraftTime; if(!GameData.inventory.AddItem(this, 1)) { @@ -28,7 +26,6 @@ public class Item amountCrafted++; if (amountCrafted >= amount) { - GD.Print("Finished!"); amountCrafted = 0; elapsedCraftTime = 0; return CraftingResult.FINISHED; diff --git a/Scripts/Helpers/GameData.cs b/Scripts/Helpers/GameData.cs index dccc216..3a36efc 100644 --- a/Scripts/Helpers/GameData.cs +++ b/Scripts/Helpers/GameData.cs @@ -19,6 +19,7 @@ public partial class GameData public static float tileWidth = 6; public static float tileHeight = 4; public static SortedDictionary availableItems = ResourceLoader.LoadItems(); + public static Dictionary availableResearch = ResourceLoader.LoadResearch(); //--- PLAYER ADJUSTABLE VALUES --- //Color used in primary objects (e.g. Robots) diff --git a/Scripts/Helpers/ResourceLoader.cs b/Scripts/Helpers/ResourceLoader.cs index 2bed49c..3b51029 100644 --- a/Scripts/Helpers/ResourceLoader.cs +++ b/Scripts/Helpers/ResourceLoader.cs @@ -101,4 +101,21 @@ public partial class ResourceLoader return result; } + + public static Dictionary LoadResearch() + { + + FileAccess file = FileAccess.Open("res://Assets/Research.json", FileAccess.ModeFlags.Read); + string json = file.GetAsText(); + + Dictionary result = new(); + + List researches = JsonSerializer.Deserialize>(json); + foreach (ResearchData research in researches) + { + result.Add(research.Id, research); + } + + return result; + } } diff --git a/Scripts/Research/Research.cs b/Scripts/Research/Research.cs new file mode 100644 index 0000000..0a4c33c --- /dev/null +++ b/Scripts/Research/Research.cs @@ -0,0 +1,28 @@ +using Godot; + +public class Research +{ + public ResearchData data; + public bool isResearched = false; + public double elapsedResearchTime = 0; + public bool paidResources = false; + + public ResearchResult Execute(double delta) + { + if (!paidResources) + { + foreach (Ingredient ingredient in data.Inputs) + { + GameData.inventory.RemoveItem(ingredient.Item, ingredient.Amount); + } + paidResources = true; + } + elapsedResearchTime += delta; + if (elapsedResearchTime >= data.CraftTime) + { + isResearched = true; + return ResearchResult.FINISHED; + } + return ResearchResult.RESEARCHING; + } +} \ No newline at end of file diff --git a/Scripts/Research/Research.cs.uid b/Scripts/Research/Research.cs.uid new file mode 100644 index 0000000..372f160 --- /dev/null +++ b/Scripts/Research/Research.cs.uid @@ -0,0 +1 @@ +uid://dj2epbu26v1nv diff --git a/Scripts/Research/ResearchData.cs b/Scripts/Research/ResearchData.cs new file mode 100644 index 0000000..5d6e4e4 --- /dev/null +++ b/Scripts/Research/ResearchData.cs @@ -0,0 +1,32 @@ +using System.Collections.Generic; +using System.Text.Json.Serialization; +using Godot; + +public class ResearchData +{ + [JsonPropertyName("id")] + public string Id { get; set; } + + [JsonPropertyName("inputs")] + public List Inputs { get; set; } + + [JsonPropertyName("research")] + public string Research { get; set; } + + [JsonPropertyName("crafttime")] + public double CraftTime { get; set; } + + [JsonPropertyName("texture")] + public string Texture { get; set; } + + public string GetReadableName() + { + string noUnderscore = Id.Replace("_", " ").ToLower(); + return char.ToUpper(noUnderscore[0]) + noUnderscore.Substring(1); + } + + public static string GetIndex(string readable) + { + return readable.ToLower().Replace(" ", "_"); + } +} \ No newline at end of file diff --git a/Scripts/Research/ResearchData.cs.uid b/Scripts/Research/ResearchData.cs.uid new file mode 100644 index 0000000..0f086c7 --- /dev/null +++ b/Scripts/Research/ResearchData.cs.uid @@ -0,0 +1 @@ +uid://duwl6bhiry6uh diff --git a/Scripts/Research/ResearchDisplay.cs b/Scripts/Research/ResearchDisplay.cs new file mode 100644 index 0000000..e69de29 diff --git a/Scripts/Research/ResearchDisplay.cs.uid b/Scripts/Research/ResearchDisplay.cs.uid new file mode 100644 index 0000000..6c1076f --- /dev/null +++ b/Scripts/Research/ResearchDisplay.cs.uid @@ -0,0 +1 @@ +uid://pxegmc5nenad diff --git a/Scripts/Research/ResearchList.cs b/Scripts/Research/ResearchList.cs new file mode 100644 index 0000000..77908f1 --- /dev/null +++ b/Scripts/Research/ResearchList.cs @@ -0,0 +1,57 @@ +using Godot; + +public partial class ResearchList : PanelContainer +{ + [Export] GraphEdit researchGraph; + + public override void _Ready() + { + foreach (ResearchData research in GameData.availableResearch.Values) + { + researchGraph.AddChild(CreateItemNode(research.Id, research.Texture)); + } + foreach (ResearchData research in GameData.availableResearch.Values) + { + researchGraph.ConnectNode( + research.Research, + 0, + research.Id, + 0 + ); + } + } + + public override void _Process(double delta) + { + + } + + private GraphNode CreateItemNode(string id, string texturePath) + { + TextureRect icon = new TextureRect + { + Texture = GD.Load(texturePath), + StretchMode = TextureRect.StretchModeEnum.KeepAspectCentered + }; + GraphNode node = new GraphNode + { + Name = id, + Title = id, + PositionOffset = new Vector2(GameData.availableResearch.Count * -icon.Texture.GetWidth() + researchGraph.GetChildCount() * icon.Texture.GetWidth() * 10, 0) + }; + + node.SetSlot( + 0, + true, + 0, + Colors.White, + true, + 0, + Colors.White + ); + + node.AddChild(icon); + + return node; + } +} diff --git a/Scripts/Research/ResearchList.cs.uid b/Scripts/Research/ResearchList.cs.uid new file mode 100644 index 0000000..a7c8d99 --- /dev/null +++ b/Scripts/Research/ResearchList.cs.uid @@ -0,0 +1 @@ +uid://drscsrkfphpy7 diff --git a/Scripts/Research/ResearchResult.cs b/Scripts/Research/ResearchResult.cs new file mode 100644 index 0000000..cfaab1b --- /dev/null +++ b/Scripts/Research/ResearchResult.cs @@ -0,0 +1,6 @@ +public enum ResearchResult +{ + FAILED, + RESEARCHING, + FINISHED +} \ No newline at end of file diff --git a/Scripts/Research/ResearchResult.cs.uid b/Scripts/Research/ResearchResult.cs.uid new file mode 100644 index 0000000..7c4d11f --- /dev/null +++ b/Scripts/Research/ResearchResult.cs.uid @@ -0,0 +1 @@ +uid://cuav7j7m1td2h