Fix up special floors

This commit is contained in:
2026-04-27 23:33:03 -07:00
parent a55ab4a342
commit f2a164b262
21 changed files with 1335 additions and 781 deletions

View File

@@ -7,7 +7,7 @@ using Zennysoft.Ma.Adapter;
namespace Zennysoft.Game.Ma;
[Meta(typeof(IAutoNode))]
public partial class Altar : SpecialFloor, IDungeonFloor
public partial class Altar : SpecialFloor
{
public override void _Notification(int what) => this.Notify(what);
@@ -25,33 +25,28 @@ public partial class Altar : SpecialFloor, IDungeonFloor
public void OnResolved()
{
Show();
Exit.AreaEntered += Exit_AreaEntered;
NoExitArea.AreaEntered += NoExitArea_AreaEntered;
FloorIsLoaded = true;
}
private void _player_PointUpFinished()
{
_player.Activate();
Show();
Exit.AreaEntered += Exit_AreaEntered;
NoExitArea.AreaEntered += NoExitArea_AreaEntered;
FloorIsLoaded = true;
}
private void NoExitArea_AreaEntered(Area3D area)
{
DialogueController.ShowDialogue(Dialogue, "no_exit");
DialogueController.ShowDialogue(Dialogue, "no_exit");
}
private void Exit_AreaEntered(Area3D area)
{
if (area.GetOwner() is IPlayer)
ExitReached();
if (area.GetOwner() is IPlayer)
ExitReached();
}
public void ExitReached() => Game.FloorExitReached();
public void OnExitTree()
{
Exit.AreaEntered -= Exit_AreaEntered;
NoExitArea.AreaEntered -= NoExitArea_AreaEntered;
Exit.AreaEntered -= Exit_AreaEntered;
NoExitArea.AreaEntered -= NoExitArea_AreaEntered;
}
}

View File

@@ -2,7 +2,6 @@ using Chickensoft.AutoInject;
using Chickensoft.Introspection;
using Godot;
using System.Collections.Immutable;
using Zennysoft.Game.Abstractions;
namespace Zennysoft.Game.Ma;
@@ -17,7 +16,7 @@ public partial class SpecialFloor : Node3D, IDungeonFloor
public virtual void InitializeDungeon()
{
FloorIsLoaded = true;
FloorIsLoaded = true;
}
public bool FloorIsLoaded { get; set; }

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,36 @@
using Chickensoft.AutoInject;
using Chickensoft.Introspection;
using Godot;
using System.Linq;
using Zennysoft.Game.Ma;
[Meta(typeof(IAutoNode))]
public partial class BadEnd : SpecialFloor
{
public override void _Notification(int what) => this.Notify(what);
[Node] public Node3D EnemySpawnPoints { get; set; } = default!;
[Node] public Marker3D PlayerSpawnPoint { get; set; } = default!;
public void OnReady()
{
SpawnEnemies();
}
public void SpawnEnemies()
{
var enemySpawnPoints = EnemySpawnPoints.GetChildren().OfType<Marker3D>();
foreach (var spawnPoint in enemySpawnPoints)
{
var instantiatedEnemy = EnemyTypeToEnemyConverter.Convert(EnemyType.Michael);
AddChild(instantiatedEnemy);
instantiatedEnemy.GlobalPosition = new Vector3(spawnPoint.GlobalPosition.X, 2.4f, spawnPoint.GlobalPosition.Z);
ResetPhysicsInterpolation();
var enemyWithFollowBehavior = (IHaveFollowBehavior)instantiatedEnemy;
enemyWithFollowBehavior.FollowBehavior.StartFollow(enemyWithFollowBehavior.NavigationAgent);
}
}
public override (Vector3 Rotation, Vector3 Position) GetPlayerSpawnPoint() { return (PlayerSpawnPoint.Rotation, new Vector3(PlayerSpawnPoint.GlobalPosition.X, 2.4f, PlayerSpawnPoint.GlobalPosition.Z)); }
}

View File

@@ -0,0 +1 @@
uid://dn85unitw20hr

View File

@@ -0,0 +1,36 @@
using Chickensoft.AutoInject;
using Chickensoft.Introspection;
using Godot;
using System;
using Zennysoft.Game.Ma;
using Zennysoft.Ma.Adapter;
[Meta(typeof(IAutoNode))]
public partial class Cellular : SpecialFloor
{
public override void _Notification(int what) => this.Notify(what);
[Node] private Area3D Exit { get; set; } = default!;
[Dependency] protected IGame Game => this.DependOn<IGame>();
public void OnResolved()
{
Show();
Exit.AreaEntered += Exit_AreaEntered;
FloorIsLoaded = true;
}
private void Exit_AreaEntered(Area3D area)
{
if (area.GetOwner() is IPlayer)
ExitReached();
}
public void ExitReached() => Game.FloorExitReached();
public void OnExitTree()
{
Exit.AreaEntered -= Exit_AreaEntered;
}
}

View File

@@ -0,0 +1 @@
uid://gal66yd2dil0

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,35 @@
using Chickensoft.AutoInject;
using Chickensoft.Introspection;
using Godot;
using Zennysoft.Game.Ma;
using Zennysoft.Ma.Adapter;
[Meta(typeof(IAutoNode))]
public partial class Grassland : SpecialFloor
{
public override void _Notification(int what) => this.Notify(what);
[Node] private Area3D Exit { get; set; } = default!;
[Dependency] protected IGame Game => this.DependOn<IGame>();
public void OnResolved()
{
Show();
Exit.AreaEntered += Exit_AreaEntered;
FloorIsLoaded = true;
}
private void Exit_AreaEntered(Area3D area)
{
if (area.GetOwner() is IPlayer)
ExitReached();
}
public void ExitReached() => Game.FloorExitReached();
public void OnExitTree()
{
Exit.AreaEntered -= Exit_AreaEntered;
}
}

View File

@@ -0,0 +1 @@
uid://cgwg0emlcwxw2

File diff suppressed because one or more lines are too long

View File

@@ -2,9 +2,9 @@
[ext_resource type="Script" uid="uid://cuhfkyh3d7noa" path="res://src/map/dungeon/code/Overworld.cs" id="1_5hmt3"]
[ext_resource type="Texture2D" uid="uid://co6h8vyi11sl2" path="res://src/map/overworld/Models/Overworld_CLOUD_RINGS_INNER_63.png" id="2_g6b7b"]
[ext_resource type="AudioStream" uid="uid://ym4ur8a2qxhp" path="res://src/audio/amb/amb_perlin.wav" id="2_wbbo3"]
[ext_resource type="AudioStream" uid="uid://b7wxddjx3qw5o" path="res://src/audio/amb/amb_white_noise.wav" id="3_c2gp5"]
[ext_resource type="AudioStream" uid="uid://ddii3pi8x75xc" path="res://src/audio/amb/amb_beach.wav" id="3_pvi8n"]
[ext_resource type="AudioStream" uid="uid://cblhg7lmwn5ng" path="res://src/audio/amb/amb_perlin.wav" id="2_wbbo3"]
[ext_resource type="AudioStream" uid="uid://byw0oogbgggp0" path="res://src/audio/amb/amb_white_noise.wav" id="3_c2gp5"]
[ext_resource type="AudioStream" uid="uid://b8um78tuv72lj" path="res://src/audio/amb/amb_beach.wav" id="3_pvi8n"]
[ext_resource type="Texture2D" uid="uid://w33fr6exryiy" path="res://src/map/overworld/Models/Overworld_CLOUD_RINGS_INNER_37.png" id="3_uyygh"]
[ext_resource type="Texture2D" uid="uid://dv10yaqvp3mub" path="res://src/map/overworld/Models/Overworld_CLOUD_RINGS_INNER_71.png" id="4_r8r3k"]
[ext_resource type="Shader" uid="uid://brhf7s3riyag5" path="res://src/map/map shaders/Metal.gdshader" id="5_d1qcb"]

View File

@@ -0,0 +1,35 @@
using Chickensoft.AutoInject;
using Chickensoft.Introspection;
using Godot;
using Zennysoft.Game.Ma;
using Zennysoft.Ma.Adapter;
[Meta(typeof(IAutoNode))]
public partial class Platform : SpecialFloor
{
public override void _Notification(int what) => this.Notify(what);
[Node] private Area3D Exit { get; set; } = default!;
[Dependency] protected IGame Game => this.DependOn<IGame>();
public void OnResolved()
{
Show();
Exit.AreaEntered += Exit_AreaEntered;
FloorIsLoaded = true;
}
private void Exit_AreaEntered(Area3D area)
{
if (area.GetOwner() is IPlayer)
ExitReached();
}
public void ExitReached() => Game.FloorExitReached();
public void OnExitTree()
{
Exit.AreaEntered -= Exit_AreaEntered;
}
}

View File

@@ -0,0 +1 @@
uid://dd8dyuud0f74g

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,37 @@
using Chickensoft.AutoInject;
using Chickensoft.Introspection;
using Godot;
using Zennysoft.Game.Ma;
using Zennysoft.Ma.Adapter;
[Meta(typeof(IAutoNode))]
public partial class River : SpecialFloor
{
public override void _Notification(int what) => this.Notify(what);
[Node] private Area3D Exit { get; set; } = default!;
[Node] private Marker3D PlayerSpawnPoint { get; set; } = default!;
[Dependency] protected IGame Game => this.DependOn<IGame>();
public void OnResolved()
{
Show();
Exit.AreaEntered += Exit_AreaEntered;
FloorIsLoaded = true;
}
private void Exit_AreaEntered(Area3D area)
{
if (area.GetOwner() is IPlayer)
ExitReached();
}
public void ExitReached() => Game.FloorExitReached();
public void OnExitTree()
{
Exit.AreaEntered -= Exit_AreaEntered;
}
}

View File

@@ -0,0 +1 @@
uid://4yx8q5wp3acp

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,35 @@
using Chickensoft.AutoInject;
using Chickensoft.Introspection;
using Godot;
using Zennysoft.Game.Ma;
using Zennysoft.Ma.Adapter;
[Meta(typeof(IAutoNode))]
public partial class Server : SpecialFloor
{
public override void _Notification(int what) => this.Notify(what);
[Node] private Area3D Exit { get; set; } = default!;
[Dependency] protected IGame Game => this.DependOn<IGame>();
public void OnResolved()
{
Show();
Exit.AreaEntered += Exit_AreaEntered;
FloorIsLoaded = true;
}
private void Exit_AreaEntered(Area3D area)
{
if (area.GetOwner() is IPlayer)
ExitReached();
}
public void ExitReached() => Game.FloorExitReached();
public void OnExitTree()
{
Exit.AreaEntered -= Exit_AreaEntered;
}
}

View File

@@ -0,0 +1 @@
uid://bc56uwauby3eh

View File

@@ -1,6 +1,6 @@
[gd_scene load_steps=64 format=4 uid="uid://cnlw4fistem53"]
[gd_scene load_steps=63 format=4 uid="uid://cnlw4fistem53"]
[ext_resource type="Script" uid="uid://xd6tx3lifebl" path="res://src/map/dungeon/code/SpecialFloor.cs" id="1_138ti"]
[ext_resource type="Script" uid="uid://bc56uwauby3eh" path="res://src/map/dungeon/floors/Special Floors/Server.cs" id="1_138ti"]
[ext_resource type="Texture2D" uid="uid://dlku6x3aq0pns" path="res://src/map/dungeon/models/Special Floors & Rooms/EX-Server/EXserver_WIRE.jpg" id="2_pw0lq"]
[ext_resource type="Texture2D" uid="uid://c025gjwdd0ikh" path="res://src/map/dungeon/models/Special Floors & Rooms/EX-Server/EXserver_metl27L.jpg" id="3_bfmrj"]
[ext_resource type="Texture2D" uid="uid://d334x3u0u5bpi" path="res://src/map/dungeon/models/Special Floors & Rooms/EX-Server/EXserver_e4b1d3cefeea6abfb2fc946a6342c595.jpg" id="4_ps4y4"]
@@ -1002,135 +1002,129 @@ dof_blur_far_transition = -1.0
dof_blur_amount = 0.11
[sub_resource type="BoxShape3D" id="BoxShape3D_8cgur"]
size = Vector3(112.274, 37.2499, 160.67)
size = Vector3(128.504, 37.2499, 164.505)
[sub_resource type="BoxShape3D" id="BoxShape3D_4yya2"]
size = Vector3(2.97754, 2.34912, 3.79205)
[sub_resource type="BoxShape3D" id="BoxShape3D_kmguv"]
size = Vector3(4.52301, 7.56061, 15.4608)
size = Vector3(1.90881, 4.51166, 6.00504)
[node name="EX-SERVER" type="Node3D"]
script = ExtResource("1_138ti")
[node name="EXserver" type="Node3D" parent="."]
[node name="Model" type="Node3D" parent="."]
[node name="EXserver" type="Node3D" parent="Model"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.557487, -12.3606, 0.247175)
[node name="OUTSIDE WIRES" type="MeshInstance3D" parent="EXserver"]
[node name="OUTSIDE WIRES" type="MeshInstance3D" parent="Model/EXserver"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 38.9209, 20.355, 25.4014)
mesh = SubResource("ArrayMesh_k6qgd")
skeleton = NodePath("")
[node name="RAILING" type="MeshInstance3D" parent="EXserver"]
[node name="RAILING" type="MeshInstance3D" parent="Model/EXserver"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 16.2092, 13.9905, -28.6612)
mesh = SubResource("ArrayMesh_6v0lb")
skeleton = NodePath("")
[node name="BRIDGE" type="MeshInstance3D" parent="EXserver"]
[node name="BRIDGE" type="MeshInstance3D" parent="Model/EXserver"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -115.813, 14.0733, -0.00542006)
mesh = SubResource("ArrayMesh_p1efh")
skeleton = NodePath("")
[node name="INNER STRUCTURE" type="MeshInstance3D" parent="EXserver"]
[node name="INNER STRUCTURE" type="MeshInstance3D" parent="Model/EXserver"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.107586, 18.9983, -2.08537)
mesh = SubResource("ArrayMesh_ury05")
skeleton = NodePath("")
[node name="PIPES" type="MeshInstance3D" parent="EXserver"]
[node name="PIPES" type="MeshInstance3D" parent="Model/EXserver"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.27806, 15.981, -12.5393)
mesh = SubResource("ArrayMesh_ctlxs")
skeleton = NodePath("")
[node name="OUTER ARCHES" type="MeshInstance3D" parent="EXserver"]
[node name="OUTER ARCHES" type="MeshInstance3D" parent="Model/EXserver"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 39.7089, 17.699, -23.9641)
mesh = SubResource("ArrayMesh_3bxwr")
skeleton = NodePath("")
[node name="Sheet" type="MeshInstance3D" parent="EXserver"]
[node name="Sheet" type="MeshInstance3D" parent="Model/EXserver"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -22.4493, 13.0738, -40.7692)
mesh = SubResource("ArrayMesh_y8ty6")
skeleton = NodePath("")
[node name="Rebar Outside" type="MeshInstance3D" parent="EXserver"]
[node name="Rebar Outside" type="MeshInstance3D" parent="Model/EXserver"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -31.9182, 12.0054, -39.313)
mesh = SubResource("ArrayMesh_oatly")
skeleton = NodePath("")
[node name="MAIN STRUCTURE" type="MeshInstance3D" parent="EXserver"]
[node name="MAIN STRUCTURE" type="MeshInstance3D" parent="Model/EXserver"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.22385, 15.4441, -11.8955)
mesh = SubResource("ArrayMesh_i45gj")
skeleton = NodePath("")
[node name="POWERLINES" type="MeshInstance3D" parent="EXserver"]
[node name="POWERLINES" type="MeshInstance3D" parent="Model/EXserver"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.855303, 25.8652, 359.675)
mesh = SubResource("ArrayMesh_cprhv")
skeleton = NodePath("")
[node name="WIRES INSIDE" type="MeshInstance3D" parent="EXserver"]
[node name="WIRES INSIDE" type="MeshInstance3D" parent="Model/EXserver"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.15608, 11.7134, 1.02745)
mesh = SubResource("ArrayMesh_3rek3")
skeleton = NodePath("")
[node name="INNER COLUMNS" type="MeshInstance3D" parent="EXserver"]
[node name="INNER COLUMNS" type="MeshInstance3D" parent="Model/EXserver"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.225967, 26.1951, -0.693762)
mesh = SubResource("ArrayMesh_laiyj")
skeleton = NodePath("")
[node name="INNER RAILING" type="MeshInstance3D" parent="EXserver"]
[node name="INNER RAILING" type="MeshInstance3D" parent="Model/EXserver"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.37131, 13.7869, 1.55229)
mesh = SubResource("ArrayMesh_3x0q5")
skeleton = NodePath("")
[node name="Area3D" type="Area3D" parent="."]
[node name="Collisions" type="Node3D" parent="."]
[node name="StaticBody3D" type="StaticBody3D" parent="Collisions"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12.6779, 4.15592, -11.9757)
[node name="CollisionShape3D2" type="CollisionShape3D" parent="Area3D"]
[node name="CollisionShape3D2" type="CollisionShape3D" parent="Collisions/StaticBody3D"]
shape = SubResource("ConcavePolygonShape3D_ymi8t")
[node name="COLLISION" type="MeshInstance3D" parent="."]
[node name="COLLISION" type="MeshInstance3D" parent="Collisions"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12.6779, 4.09334, -11.9757)
visible = false
mesh = SubResource("ArrayMesh_yrug1")
skeleton = NodePath("")
[node name="FogVolume2" type="FogVolume" parent="."]
[node name="VFX" type="Node3D" parent="."]
[node name="FogVolume2" type="FogVolume" parent="VFX"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.56509, -108.513, -20.4169)
size = Vector3(1438.24, 194.68, 1620.82)
material = SubResource("FogMaterial_w2wxh")
[node name="OmniLight3D" type="OmniLight3D" parent="."]
[node name="OmniLight3D" type="OmniLight3D" parent="VFX"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -7.34175, 0)
light_energy = 9.13
shadow_enabled = true
omni_range = 45.4638
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
[node name="WorldEnvironment" type="WorldEnvironment" parent="VFX"]
environment = SubResource("Environment_pj6ms")
camera_attributes = SubResource("CameraAttributesPractical_8ry6s")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="WorldEnvironment"]
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="VFX/WorldEnvironment"]
transform = Transform3D(-0.980955, 0.175167, -0.0839258, 0, 0.432086, 0.901833, 0.194234, 0.884657, -0.423857, -49.49, 69.351, 0)
shadow_enabled = true
shadow_blur = 3.051
[node name="SteleF" parent="." instance=ExtResource("13_5o7ke")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 42.3072, 0.636905, 18.7862)
[node name="SteleF2" parent="." instance=ExtResource("13_5o7ke")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -32.4542, 0.622075, 5.49706)
[node name="SteleF3" parent="." instance=ExtResource("13_5o7ke")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -32.4542, 0.622075, -4.79838)
[node name="Spawn Points" type="Node3D" parent="."]
transform = Transform3D(1.4, 0, 0, 0, 1.4, 0, 0, 0, 1.4, 0, 3.70806, 0)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.70806, 0)
[node name="PlayerSpawnPoint" type="Marker3D" parent="Spawn Points"]
unique_name_in_owner = true
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 39.3951, -2.89376, -1.035)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.581077, -1.88017, 32.9043)
[node name="Room" type="Node3D" parent="."]
transform = Transform3D(1.4, 0, 0, 0, 1.4, 0, 0, 0, 1.4, 0, 4.31338, 0)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 4.31338, 0)
[node name="Room" type="Area3D" parent="Room"]
unique_name_in_owner = true
@@ -1139,7 +1133,7 @@ collision_layer = 0
collision_mask = 8
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Room"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15.5814, -10.4857, -31.8726)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.15937, -10.4857, -16.1804)
shape = SubResource("BoxShape3D_8cgur")
[node name="Exit" type="Area3D" parent="Room"]
@@ -1148,14 +1142,16 @@ collision_layer = 256
collision_mask = 256
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/Exit"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -13.1171, -2.1779, -0.0887146)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 33.583, -0.46095, -0.0630896)
shape = SubResource("BoxShape3D_4yya2")
[node name="NoExitArea" type="Area3D" parent="Room"]
unique_name_in_owner = true
collision_layer = 0
collision_mask = 64
[node name="NPCs" type="Node3D" parent="."]
[node name="CollisionShape3D" type="CollisionShape3D" parent="Room/NoExitArea"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 72.5243, -2.06593, -2.02953)
shape = SubResource("BoxShape3D_kmguv")
[node name="SteleF" parent="NPCs" instance=ExtResource("13_5o7ke")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 42.3072, 0.636905, 18.7862)
[node name="SteleF2" parent="NPCs" instance=ExtResource("13_5o7ke")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -32.4542, 0.622075, 5.49706)
[node name="SteleF3" parent="NPCs" instance=ExtResource("13_5o7ke")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -32.4542, 0.622075, -4.79838)