Fix thrown item position

Start adding more floors
Testing Item Rescue
This commit is contained in:
2025-03-04 00:32:24 -08:00
parent 2da4b8958d
commit b733a30724
16 changed files with 1051 additions and 159 deletions

View File

@@ -1,6 +1,6 @@
[gd_scene load_steps=9 format=3 uid="uid://brq11lswpqxei"]
[ext_resource type="Script" path="res://src/items/dropped/DroppedItem.cs" id="1_67jk4"]
[ext_resource type="Script" uid="uid://c2sps6uamyyw2" path="res://src/items/dropped/DroppedItem.cs" id="1_67jk4"]
[ext_resource type="Texture2D" uid="uid://mi70lolgtf3n" path="res://src/items/throwable/textures/GEOMANCER-DICE.png" id="2_cu1v3"]
[ext_resource type="Material" uid="uid://x2bv1q51mcjq" path="res://src/enemy/PixelMelt.tres" id="2_eat5q"]
@@ -45,7 +45,7 @@ _data = {
}
[sub_resource type="ViewportTexture" id="ViewportTexture_x5q15"]
viewport_path = NodePath("Sprite3D/SubViewport")
viewport_path = NodePath("Sprite3D/SubViewportContainer/SubViewport")
[node name="DroppedItem" type="RigidBody3D"]
collision_layer = 1024
@@ -74,13 +74,18 @@ texture_filter = 0
render_priority = 100
texture = SubResource("ViewportTexture_x5q15")
[node name="SubViewport" type="SubViewport" parent="Sprite3D"]
[node name="SubViewportContainer" type="SubViewportContainer" parent="Sprite3D"]
visibility_layer = 0
offset_right = 40.0
offset_bottom = 40.0
[node name="SubViewport" type="SubViewport" parent="Sprite3D/SubViewportContainer"]
disable_3d = true
transparent_bg = true
handle_input_locally = false
render_target_update_mode = 4
[node name="Sprite" type="Sprite2D" parent="Sprite3D/SubViewport"]
[node name="Sprite" type="Sprite2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
unique_name_in_owner = true
material = ExtResource("2_eat5q")
scale = Vector2(0.1, 0.1)

View File

@@ -12,9 +12,11 @@ public partial class ThrownItem : RigidBody3D
[Dependency] public IPlayer Player => this.DependOn<IPlayer>();
[Dependency] public IGame Game => this.DependOn<IGame>();
public IInventoryItem ItemThatIsThrown;
[Node] public Sprite3D Sprite { get; set; } = default!;
[Node] public Sprite2D Sprite { get; set; } = default!;
public void OnResolved()
{
@@ -36,6 +38,43 @@ public partial class ThrownItem : RigidBody3D
ApplyCentralImpulse(-Player.CurrentBasis.Z.Normalized() * ItemThatIsThrown.ThrowSpeed);
}
public void RescueItem()
{
ContactMonitor = false;
Freeze = true;
PlayRescueAnimation();
Game.RescuedItems.Items.Add(ItemThatIsThrown);
}
private void PlayRescueAnimation()
{
LoadShader("res://src/vfx/shaders/PixelMelt.gdshader");
var tweener = GetTree().CreateTween();
SetShaderValue(true);
tweener.TweenMethod(Callable.From((float x) => SetShaderValue(x)), 0.0f, 0.3f, 2f);
tweener.TweenCallback(Callable.From(QueueFree));
}
private void LoadShader(string shaderPath)
{
var shader = GD.Load<Shader>(shaderPath);
Sprite.Material = new ShaderMaterial();
var shaderMaterial = (ShaderMaterial)Sprite.Material;
shaderMaterial.Shader = shader;
}
private void SetShaderValue(float shaderValue)
{
var shaderMaterial = (ShaderMaterial)Sprite.Material;
shaderMaterial.SetShaderParameter("progress", shaderValue);
}
private void SetShaderValue(bool shaderValue)
{
var shaderMaterial = (ShaderMaterial)Sprite.Material;
shaderMaterial.SetShaderParameter("reverse", shaderValue);
}
private void CalculateEffect(IEnemy enemy)
{
if (ItemThatIsThrown is ThrowableItem throwableItem)

View File

@@ -1,13 +1,17 @@
[gd_scene load_steps=4 format=3 uid="uid://b1twcuneob5kt"]
[gd_scene load_steps=6 format=3 uid="uid://b1twcuneob5kt"]
[ext_resource type="Script" uid="uid://bx1k4yff3m82m" path="res://src/items/thrown/ThrownItem.cs" id="1_wlplc"]
[ext_resource type="Texture2D" uid="uid://mi70lolgtf3n" path="res://src/items/throwable/textures/GEOMANCER-DICE.png" id="2_alcjn"]
[ext_resource type="Material" uid="uid://x2bv1q51mcjq" path="res://src/enemy/PixelMelt.tres" id="2_qjpqg"]
[sub_resource type="BoxShape3D" id="BoxShape3D_s4ym5"]
size = Vector3(0.46632, 0.507293, 0.586082)
[sub_resource type="ViewportTexture" id="ViewportTexture_qjpqg"]
viewport_path = NodePath("Sprite3D/SubViewportContainer/SubViewport")
[node name="Hitbox" type="RigidBody3D"]
collision_layer = 16
collision_layer = 1040
collision_mask = 25
gravity_scale = 0.25
contact_monitor = true
@@ -15,11 +19,40 @@ max_contacts_reported = 50
script = ExtResource("1_wlplc")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.129255, 0.162556, 0.00695503)
shape = SubResource("BoxShape3D_s4ym5")
[node name="Sprite" type="Sprite3D" parent="."]
unique_name_in_owner = true
pixel_size = 0.001
[node name="Sprite3D" type="Sprite3D" parent="."]
transform = Transform3D(0.41, 0, 0, 0, 0.41, 0, 0, 0, 0.41, 0, 0, 0)
billboard = 2
shaded = true
texture_filter = 0
render_priority = 100
texture = SubResource("ViewportTexture_qjpqg")
[node name="SubViewportContainer" type="SubViewportContainer" parent="Sprite3D"]
visibility_layer = 0
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_right = 100.0
offset_bottom = 100.0
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 4
size_flags_vertical = 4
[node name="SubViewport" type="SubViewport" parent="Sprite3D/SubViewportContainer"]
disable_3d = true
transparent_bg = true
handle_input_locally = false
size = Vector2i(100, 100)
render_target_update_mode = 4
[node name="Sprite" type="Sprite2D" parent="Sprite3D/SubViewportContainer/SubViewport"]
unique_name_in_owner = true
material = ExtResource("2_qjpqg")
scale = Vector2(0.1, 0.1)
texture = ExtResource("2_alcjn")
centered = false