Made selector 3D

This commit is contained in:
Marco 2025-08-07 15:09:02 +02:00
commit 0a7b1614a9
8 changed files with 113 additions and 45 deletions

View file

@ -0,0 +1,25 @@
[gd_resource type="SpriteFrames" load_steps=4 format=3 uid="uid://dhn6pld33ek0v"]
[ext_resource type="Texture2D" uid="uid://dde36pgb8fbwc" path="res://Sprites/selector_big.png" id="1_5rjgr"]
[sub_resource type="AtlasTexture" id="AtlasTexture_vxp1j"]
atlas = ExtResource("1_5rjgr")
region = Rect2(0, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_bnh43"]
atlas = ExtResource("1_5rjgr")
region = Rect2(16, 0, 16, 16)
[resource]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_vxp1j")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_bnh43")
}],
"loop": true,
"name": &"default",
"speed": 5.0
}]

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=69 format=3 uid="uid://rimplblbptcd"] [gd_scene load_steps=70 format=3 uid="uid://rimplblbptcd"]
[ext_resource type="Script" uid="uid://88smibkin17p" path="res://Scripts/Components/FSM/3DPlayer/IsoPlayerFSMProxy.cs" id="1_cc7e7"] [ext_resource type="Script" uid="uid://88smibkin17p" path="res://Scripts/Components/FSM/3DPlayer/IsoPlayerFSMProxy.cs" id="1_cc7e7"]
[ext_resource type="Texture2D" uid="uid://ddwhrlrgj6i00" path="res://Sprites/Actors/Cirno.png" id="1_vex34"] [ext_resource type="Texture2D" uid="uid://ddwhrlrgj6i00" path="res://Sprites/Actors/Cirno.png" id="1_vex34"]
@ -29,6 +29,7 @@
[ext_resource type="Script" uid="uid://by0x0qmbmkoak" path="res://Scripts/Components/FSM/3DPlayer/PlayerWeaponProvider3D.cs" id="16_olwak"] [ext_resource type="Script" uid="uid://by0x0qmbmkoak" path="res://Scripts/Components/FSM/3DPlayer/PlayerWeaponProvider3D.cs" id="16_olwak"]
[ext_resource type="PackedScene" uid="uid://cfgc6ik8vb08c" path="res://Scenes/Weapons/BaseWeapon_3D.tscn" id="17_olwak"] [ext_resource type="PackedScene" uid="uid://cfgc6ik8vb08c" path="res://Scenes/Weapons/BaseWeapon_3D.tscn" id="17_olwak"]
[ext_resource type="Script" uid="uid://cqyr8mko8oo5" path="res://Scripts/Components/FSM/3DPlayer/PlayerAcidDeathModule.cs" id="19_7selo"] [ext_resource type="Script" uid="uid://cqyr8mko8oo5" path="res://Scripts/Components/FSM/3DPlayer/PlayerAcidDeathModule.cs" id="19_7selo"]
[ext_resource type="PackedScene" uid="uid://cwnyegefc8o6q" path="res://Scenes/HUD/WorldSelector3D.tscn" id="24_j6bpw"]
[ext_resource type="Script" uid="uid://hdw15b6fi7de" path="res://Scripts/Components/Actors/3D/PlayerDamageReceiver3D.cs" id="26_ok6gd"] [ext_resource type="Script" uid="uid://hdw15b6fi7de" path="res://Scripts/Components/Actors/3D/PlayerDamageReceiver3D.cs" id="26_ok6gd"]
[ext_resource type="Script" uid="uid://ddsqqfx1usc3j" path="res://Scripts/Resources/DamageResistance.cs" id="27_5v3dv"] [ext_resource type="Script" uid="uid://ddsqqfx1usc3j" path="res://Scripts/Resources/DamageResistance.cs" id="27_5v3dv"]
[ext_resource type="Script" uid="uid://cqwvssstkrdmw" path="res://Scripts/Components/Actors/ActorResourceProvider.cs" id="28_b3jpo"] [ext_resource type="Script" uid="uid://cqwvssstkrdmw" path="res://Scripts/Components/Actors/ActorResourceProvider.cs" id="28_b3jpo"]
@ -325,6 +326,7 @@ script = ExtResource("11_4exx2")
_inputProvider = NodePath("../InputProvider") _inputProvider = NodePath("../InputProvider")
_selectorController = NodePath("SelectorController") _selectorController = NodePath("SelectorController")
_errorSound = NodePath("AudioStreamPlayer") _errorSound = NodePath("AudioStreamPlayer")
SelectorScene = ExtResource("24_j6bpw")
[node name="CollisionShape3D" type="CollisionShape3D" parent="ActivationProvider"] [node name="CollisionShape3D" type="CollisionShape3D" parent="ActivationProvider"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.294313, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.294313, 0)

View file

@ -1,30 +1,13 @@
[gd_scene load_steps=6 format=3 uid="uid://dsaj5dx82brsg"] [gd_scene load_steps=5 format=3 uid="uid://dsaj5dx82brsg"]
[ext_resource type="Texture2D" uid="uid://dde36pgb8fbwc" path="res://Sprites/selector_big.png" id="1_undfg"] [ext_resource type="Texture2D" uid="uid://dde36pgb8fbwc" path="res://Sprites/selector_big.png" id="1_undfg"]
[ext_resource type="Script" uid="uid://w85hem1ec8cq" path="res://Scripts/Tools/AnimatedTextureRect.gd" id="2_cjotf"] [ext_resource type="Script" uid="uid://w85hem1ec8cq" path="res://Scripts/Tools/AnimatedTextureRect.gd" id="2_cjotf"]
[ext_resource type="SpriteFrames" uid="uid://dhn6pld33ek0v" path="res://Resources/Sprites/Selector.tres" id="3_cjotf"]
[sub_resource type="AtlasTexture" id="AtlasTexture_vxp1j"]
atlas = ExtResource("1_undfg")
region = Rect2(0, 0, 16, 16)
[sub_resource type="AtlasTexture" id="AtlasTexture_bnh43"] [sub_resource type="AtlasTexture" id="AtlasTexture_bnh43"]
atlas = ExtResource("1_undfg") atlas = ExtResource("1_undfg")
region = Rect2(16, 0, 16, 16) region = Rect2(16, 0, 16, 16)
[sub_resource type="SpriteFrames" id="SpriteFrames_0vbph"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_vxp1j")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_bnh43")
}],
"loop": true,
"name": &"default",
"speed": 5.0
}]
[node name="UiSelector" type="Control"] [node name="UiSelector" type="Control"]
layout_mode = 3 layout_mode = 3
anchors_preset = 15 anchors_preset = 15
@ -39,7 +22,7 @@ offset_left = -8.0
offset_top = -8.0 offset_top = -8.0
offset_right = 8.0 offset_right = 8.0
offset_bottom = 8.0 offset_bottom = 8.0
texture = SubResource("AtlasTexture_vxp1j") texture = SubResource("AtlasTexture_bnh43")
stretch_mode = 2 stretch_mode = 2
script = ExtResource("2_cjotf") script = ExtResource("2_cjotf")
Frames = SubResource("SpriteFrames_0vbph") Frames = ExtResource("3_cjotf")

View file

@ -0,0 +1,16 @@
[gd_scene load_steps=2 format=3 uid="uid://cwnyegefc8o6q"]
[ext_resource type="SpriteFrames" uid="uid://dhn6pld33ek0v" path="res://Resources/Sprites/Selector.tres" id="1_vi7xt"]
[node name="UiSelector" type="Node3D"]
[node name="Sprite" type="AnimatedSprite3D" parent="."]
transform = Transform3D(0.70710677, -0.49999997, 0.49999997, 0, 0.70710677, 0.70710677, -0.70710677, -0.49999997, 0.49999997, 0, 0, 0)
pixel_size = 0.05
no_depth_test = true
texture_filter = 0
render_priority = 10
sprite_frames = ExtResource("1_vi7xt")
autoplay = "default"
frame = 1
frame_progress = 0.888575

View file

@ -125,7 +125,7 @@ public partial class PreviewMarker3D : Marker3D
if (!Engine.IsEditorHint()) return; if (!Engine.IsEditorHint()) return;
if (_sprite is not null) if (_sprite is not null)
{ {
GD.Print($"Modulating sprite to {alpha}"); //GD.Print($"Modulating sprite to {alpha}");
_sprite.SetModulate(new Color(_sprite.Modulate.R, _sprite.Modulate.G, _sprite.Modulate.B, alpha)); _sprite.SetModulate(new Color(_sprite.Modulate.R, _sprite.Modulate.G, _sprite.Modulate.B, alpha));
} }
else else

View file

@ -49,11 +49,7 @@ public partial class IsoActivationProvider: Area3D, IModule<PlayerState, Charact
_selectorController.Hide(); _selectorController.Hide();
SpawnSelector();
if (Hud.Instance is not null)
{
Hud.Instance.CreateSelector(_selectorController);
}
// if (SelectorScene is not null && _selector is null) // if (SelectorScene is not null && _selector is null)
// { // {
@ -62,6 +58,43 @@ public partial class IsoActivationProvider: Area3D, IModule<PlayerState, Charact
// } // }
} }
private void SpawnSelector()
{
var sel = SelectorScene.Instantiate<Node3D>();
StateMachine.MainObject.GetParent().AddChild(sel);
sel.GlobalPosition = StateMachine.MainObject.GlobalPosition;
_selectorController.ShowSelector += () =>
{
sel.Show();
};
_selectorController.HideSelector += () =>
{
sel.Reparent(this);
sel.Hide();
};
_selectorController.ChangeParent3D += parent =>
{
if (parent is not null)
{
sel.Reparent(parent);
}
else
{
sel.Reparent(this);
sel.Hide();
}
sel.Position = Vector3.Zero;
};
// if (Hud.Instance is not null)
// {
// Hud.Instance.CreateSelector(_selectorController);
// }
}
public void Process(double delta) public void Process(double delta)
{ {
@ -69,7 +102,7 @@ public partial class IsoActivationProvider: Area3D, IModule<PlayerState, Charact
public void PhysicsProcess(double delta) public void PhysicsProcess(double delta)
{ {
_selectorController.PhysicsProcess(delta); //_selectorController.PhysicsProcess(delta);
HandleInteraction(); HandleInteraction();
} }
@ -110,6 +143,7 @@ public partial class IsoActivationProvider: Area3D, IModule<PlayerState, Charact
if (success) if (success)
{ {
// Deselect and scan for next // Deselect and scan for next
_selectorController.RemoveInteractable(selected);
_selectorController.SelectNext(); _selectorController.SelectNext();
//_selector.RemoveInteractable(selected); //_selector.RemoveInteractable(selected);
} }

View file

@ -10,6 +10,8 @@ public partial class SelectorController : Node
[Signal] public delegate void HideSelectorEventHandler(); [Signal] public delegate void HideSelectorEventHandler();
[Signal] public delegate void ChangePositionEventHandler(Vector2 position); [Signal] public delegate void ChangePositionEventHandler(Vector2 position);
[Signal] public delegate void ChangeParent3DEventHandler(Node3D node);
private Interactable _lastInteractable; private Interactable _lastInteractable;
private List<IInteractable> _interactables = []; private List<IInteractable> _interactables = [];
@ -99,11 +101,8 @@ public partial class SelectorController : Node
} }
public void RemoveInteractable(IInteractable interactable) public void RemoveInteractable(IInteractable interactable)
{
if (_interactables.Contains(interactable))
{ {
_interactables.Remove(interactable); _interactables.Remove(interactable);
}
UpdatePosition(); UpdatePosition();
} }
@ -119,6 +118,8 @@ public partial class SelectorController : Node
if (SelectedInteractable != null) if (SelectedInteractable != null)
{ {
EmitSignalChangePosition(SelectedInteractable.GetScreenPosition()); EmitSignalChangePosition(SelectedInteractable.GetScreenPosition());
//EmitSignalChangePosition3D();
EmitSignalChangeParent3D(SelectedInteractable as Node3D);
EmitSignalShowSelector(); EmitSignalShowSelector();
} }
else else
@ -137,9 +138,9 @@ public partial class SelectorController : Node
EmitSignalHideSelector(); EmitSignalHideSelector();
} }
public void PhysicsProcess(double delta) // public void PhysicsProcess(double delta)
{ // {
if (SelectedInteractable is null) return; // if (SelectedInteractable is null) return;
EmitSignalChangePosition(SelectedInteractable.GetScreenPosition()); // //EmitSignalChangePosition(SelectedInteractable.GetScreenPosition());
} // }
} }

View file

@ -3,32 +3,39 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://dde36pgb8fbwc" uid="uid://dde36pgb8fbwc"
path="res://.godot/imported/selector_big.png-27577e86fb500a19a8e9ac34042c9f91.ctex" path.s3tc="res://.godot/imported/selector_big.png-27577e86fb500a19a8e9ac34042c9f91.s3tc.ctex"
metadata={ metadata={
"vram_texture": false "imported_formats": ["s3tc_bptc"],
"vram_texture": true
} }
[deps] [deps]
source_file="res://Sprites/selector_big.png" source_file="res://Sprites/selector_big.png"
dest_files=["res://.godot/imported/selector_big.png-27577e86fb500a19a8e9ac34042c9f91.ctex"] dest_files=["res://.godot/imported/selector_big.png-27577e86fb500a19a8e9ac34042c9f91.s3tc.ctex"]
[params] [params]
compress/mode=0 compress/mode=2
compress/high_quality=false compress/high_quality=false
compress/lossy_quality=0.7 compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1 compress/hdr_compression=1
compress/normal_map=0 compress/normal_map=0
compress/channel_pack=0 compress/channel_pack=0
mipmaps/generate=false mipmaps/generate=true
mipmaps/limit=-1 mipmaps/limit=-1
roughness/mode=0 roughness/mode=0
roughness/src_normal="" 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/fix_alpha_border=true
process/premult_alpha=false process/premult_alpha=false
process/normal_map_invert_y=false process/normal_map_invert_y=false
process/hdr_as_srgb=false process/hdr_as_srgb=false
process/hdr_clamp_exposure=false process/hdr_clamp_exposure=false
process/size_limit=0 process/size_limit=0
detect_3d/compress_to=1 detect_3d/compress_to=0