diff --git a/Mods/Tiers/Huts/hut_tier_1.png b/Mods/Tiers/Huts/hut_tier_1.png new file mode 100644 index 0000000..a557fbb Binary files /dev/null and b/Mods/Tiers/Huts/hut_tier_1.png differ diff --git a/Mods/Tiers/Huts/hut_tier_1.png.import b/Mods/Tiers/Huts/hut_tier_1.png.import new file mode 100644 index 0000000..c97580c --- /dev/null +++ b/Mods/Tiers/Huts/hut_tier_1.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c88ltenh4ghit" +path="res://.godot/imported/hut_tier_1.png-95c994b0565c43d199344569cb1a91ab.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Mods/Tiers/Huts/hut_tier_1.png" +dest_files=["res://.godot/imported/hut_tier_1.png-95c994b0565c43d199344569cb1a91ab.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/Mods/Tiers/Huts/hut_tier_2.png b/Mods/Tiers/Huts/hut_tier_2.png new file mode 100644 index 0000000..a557fbb Binary files /dev/null and b/Mods/Tiers/Huts/hut_tier_2.png differ diff --git a/Mods/Tiers/Huts/hut_tier_2.png.import b/Mods/Tiers/Huts/hut_tier_2.png.import new file mode 100644 index 0000000..3a4bffb --- /dev/null +++ b/Mods/Tiers/Huts/hut_tier_2.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cgoigfok3s0fc" +path="res://.godot/imported/hut_tier_2.png-7e373825ef1bbf63f359ae57d709b394.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Mods/Tiers/Huts/hut_tier_2.png" +dest_files=["res://.godot/imported/hut_tier_2.png-7e373825ef1bbf63f359ae57d709b394.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/Mods/Tiers/hut_tier_1.png.import b/Mods/Tiers/hut_tier_1.png.import new file mode 100644 index 0000000..4b544b3 --- /dev/null +++ b/Mods/Tiers/hut_tier_1.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bxlaf72h3pftt" +path="res://.godot/imported/hut_tier_1.png-4ce775c649cfe5f92a10187bc1930a9b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Mods/Tiers/hut_tier_1.png" +dest_files=["res://.godot/imported/hut_tier_1.png-4ce775c649cfe5f92a10187bc1930a9b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/Mods/Tiers/hut_tier_2.png.import b/Mods/Tiers/hut_tier_2.png.import new file mode 100644 index 0000000..645a95b --- /dev/null +++ b/Mods/Tiers/hut_tier_2.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cj7bgonxgavdf" +path="res://.godot/imported/hut_tier_2.png-70fb7df6fa976626a267fd1e203d6a0e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Mods/Tiers/hut_tier_2.png" +dest_files=["res://.godot/imported/hut_tier_2.png-70fb7df6fa976626a267fd1e203d6a0e.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/Mods/Tiers/hut_tiers.json b/Mods/Tiers/hut_tiers.json index e4b024c..cf44e07 100644 --- a/Mods/Tiers/hut_tiers.json +++ b/Mods/Tiers/hut_tiers.json @@ -3,17 +3,14 @@ { "tierEnum": "Tier1", "threshold": 150, - "scenePath": "res://Scenes/Huts/hut_tier_1.tscn" + "imagePath": "user://Mods/Tiers/Huts/hut_tier_1.png", + "scale": {"x": 0.01, "y": 0.01} }, { "tierEnum": "Tier2", "threshold": 750, - "scenePath": "res://Scenes/Huts/hut_tier_2.tscn" - }, - { - "tierEnum": "Tier3", - "threshold": 2000, - "scenePath": "res://Scenes/Huts/hut_tier_3.tscn" + "imagePath": "user://Mods/Tiers/Huts/hut_tier_2.png", + "scale": {"x": 0.01, "y": 0.01} } ] } diff --git a/Scenes/Main/Main.tscn b/Scenes/Main/Main.tscn index 6338772..053e6e1 100644 --- a/Scenes/Main/Main.tscn +++ b/Scenes/Main/Main.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=20 format=3 uid="uid://bfil8sd154327"] +[gd_scene load_steps=21 format=3 uid="uid://bfil8sd154327"] [ext_resource type="Script" uid="uid://t71ewkpa5uqs" path="res://Scenes/Main/Main.cs" id="1_p8rbg"] [ext_resource type="Script" uid="uid://b77vh831r1e3c" path="res://Scenes/Main/MiraclePanel.cs" id="2_hcu3t"] @@ -16,6 +16,7 @@ [ext_resource type="PackedScene" uid="uid://8w7tvsgkev1y" path="res://Scenes/tree.tscn" id="8_hcu3t"] [ext_resource type="Shader" uid="uid://bf8nk145fjkgh" path="res://Shaders/corruption_shader.gdshader" id="9_wgovn"] [ext_resource type="PackedScene" uid="uid://cqkye7yykakns" path="res://Scenes/Followers/FollowerMarker.tscn" id="11_5ci8a"] +[ext_resource type="PackedScene" uid="uid://xk2xirjd1sma" path="res://Scenes/moddable_visual.tscn" id="17_qdkat"] [ext_resource type="Script" uid="uid://furbvcmw31bx" path="res://Scripts/Components/ForestVisualizer.cs" id="18_qdkat"] [ext_resource type="Script" uid="uid://cw8gpeaq3yfjn" path="res://Scripts/Components/RoadManager.cs" id="19_qdkat"] @@ -5549,6 +5550,7 @@ position = Vector2(243.12, -124.88) script = ExtResource("8_cv8e0") _markersContainer = NodePath("../Followers Markers") _unitsPerMarker = 1 +_moddableVisualScene = ExtResource("17_qdkat") metadata/_custom_type_script = "uid://dj2wyrq07gfp2" [node name="HutPopulationVisualizer" type="Node" parent="." node_paths=PackedStringArray("_markersContainer")] @@ -5556,6 +5558,7 @@ script = ExtResource("8_cv8e0") _markersContainer = NodePath("../Hut Markers") _unitsPerMarker = 1 Category = 1 +_moddableVisualScene = ExtResource("17_qdkat") metadata/_custom_type_script = "uid://dj2wyrq07gfp2" [node name="ForestVisualizer" type="Node" parent="." node_paths=PackedStringArray("_treesContainer")] diff --git a/Scenes/moddable_visual.tscn b/Scenes/moddable_visual.tscn new file mode 100644 index 0000000..a74dcc8 --- /dev/null +++ b/Scenes/moddable_visual.tscn @@ -0,0 +1,9 @@ +[gd_scene load_steps=2 format=3 uid="uid://xk2xirjd1sma"] + +[ext_resource type="Script" uid="uid://dpfcbaqgq3l6d" path="res://Scripts/Components/ModdableVisual.cs" id="1_5b1dg"] + +[node name="ModdableVisual" type="Node2D" node_paths=PackedStringArray("_sprite")] +script = ExtResource("1_5b1dg") +_sprite = NodePath("Sprite") + +[node name="Sprite" type="Sprite2D" parent="."] diff --git a/Scripts/Components/ModdableVisual.cs b/Scripts/Components/ModdableVisual.cs new file mode 100644 index 0000000..55dce41 --- /dev/null +++ b/Scripts/Components/ModdableVisual.cs @@ -0,0 +1,28 @@ +using Godot; + +namespace ParasiticGod.Scripts.Components; + +[GlobalClass] +public partial class ModdableVisual : Node2D +{ + [Export] private Sprite2D _sprite; + public Follower.FollowerTier Tier { get; private set; } + + public override void _ExitTree() + { + if (_sprite != null) + { + _sprite.Texture = null; + } + } + + public void Initialize(Follower.FollowerTier tier, Texture2D texture, Vector2 scale) + { + Tier = tier; + if (_sprite != null && texture != null) + { + _sprite.Texture = texture; + _sprite.Scale = scale; + } + } +} \ No newline at end of file diff --git a/Scripts/Components/ModdableVisual.cs.uid b/Scripts/Components/ModdableVisual.cs.uid new file mode 100644 index 0000000..e517122 --- /dev/null +++ b/Scripts/Components/ModdableVisual.cs.uid @@ -0,0 +1 @@ +uid://dpfcbaqgq3l6d diff --git a/Scripts/Components/PopulationVisualizer.cs b/Scripts/Components/PopulationVisualizer.cs index 043789b..a3ef7af 100644 --- a/Scripts/Components/PopulationVisualizer.cs +++ b/Scripts/Components/PopulationVisualizer.cs @@ -14,6 +14,7 @@ public partial class PopulationVisualizer : Node [Export] private Node2D _markersContainer; [Export] private int _unitsPerMarker = 5; [Export] public VisualCategory Category { get; private set; } + [Export] private PackedScene _moddableVisualScene; private List _tiers; private readonly List _markers = []; @@ -105,11 +106,15 @@ public partial class PopulationVisualizer : Node if (i < followersToShow) { - if (!marker.IsOccupied || _lastKnownTierIndex != newTierIndex) + var currentVisual = marker.GetChildOrNull(0); + if (currentVisual == null || currentVisual.Tier != currentTier.TierEnum) { - if (marker.IsOccupied) marker.RemoveFollower(); - var followerInstance = currentTier.Scene.Instantiate(); - marker.PlaceFollower(followerInstance); + if (marker.GetChildCount() > 0) marker.GetChild(0).QueueFree(); + + var visualInstance = _moddableVisualScene.Instantiate(); + visualInstance.Initialize(currentTier.TierEnum, currentTier.Texture, currentTier.Scale); + + marker.AddChild(visualInstance); needsChange = true; } } diff --git a/Scripts/Core/TierDefinition.cs b/Scripts/Core/TierDefinition.cs index 3b92d47..9fae102 100644 --- a/Scripts/Core/TierDefinition.cs +++ b/Scripts/Core/TierDefinition.cs @@ -5,7 +5,8 @@ namespace ParasiticGod.Scripts.Core; [GlobalClass] public partial class TierDefinition : Resource { - [Export] public PackedScene Scene { get; set; } + [Export] public Texture2D Texture { get; set; } [Export] public long Threshold { get; set; } [Export] public Follower.FollowerTier TierEnum { get; set; } + [Export] public Vector2 Scale { get; set; } = Vector2.One; } \ No newline at end of file diff --git a/Scripts/Core/TierDto.cs b/Scripts/Core/TierDto.cs index f6c5202..603df96 100644 --- a/Scripts/Core/TierDto.cs +++ b/Scripts/Core/TierDto.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Numerics; namespace ParasiticGod.Scripts.Core; @@ -6,7 +7,8 @@ public class TierDto { public Follower.FollowerTier TierEnum { get; set; } public long Threshold { get; set; } - public string ScenePath { get; set; } + public string ImagePath { get; set; } + public Vector2 Scale { get; set; } = Vector2.One; } public class TierListDto diff --git a/Scripts/Core/TierLoader.cs b/Scripts/Core/TierLoader.cs index dff6bcc..4f3e89d 100644 --- a/Scripts/Core/TierLoader.cs +++ b/Scripts/Core/TierLoader.cs @@ -27,11 +27,18 @@ public static class TierLoader foreach (var dto in tierListDto.Tiers) { + var image = Image.LoadFromFile(dto.ImagePath); + if (image == null) + { + GD.PushError($"Failed to load image at path: {dto.ImagePath}"); + continue; + } var tierDef = new TierDefinition { Threshold = dto.Threshold, TierEnum = dto.TierEnum, - Scene = GD.Load(dto.ScenePath) + Texture = ImageTexture.CreateFromImage(image), + Scale = new Vector2(dto.Scale.X, dto.Scale.Y) }; loadedTiers.Add(tierDef); }