Boss fixes, various changes

This commit is contained in:
2026-01-25 19:01:34 -08:00
parent 2622ed4423
commit 865934399d
25 changed files with 5770 additions and 371 deletions

View File

@@ -265,7 +265,7 @@ EnemyViewerWalk={
[internationalization] [internationalization]
locale/translations_pot_files=PackedStringArray("res://src/dialog/Dialogue.dialogue", "res://src/npc/Ran/ran.dialogue", "res://src/npc/Rat/ratdialogue.dialogue", "res://src/dialog/Altar.dialogue") locale/translations_pot_files=PackedStringArray("res://src/dialog/Dialogue.dialogue", "res://src/npc/Ran/ran.dialogue", "res://src/npc/Rat/ratdialogue.dialogue", "res://src/dialog/Altar.dialogue", "res://stone.dialogue")
[layer_names] [layer_names]

View File

@@ -110,8 +110,6 @@ public partial class BossTypeA : Enemy, IHaveEngagePlayerBehavior, IHaveFollowBe
EnemyHitbox.SetDeferred(CollisionShape3D.PropertyName.Disabled, false); EnemyHitbox.SetDeferred(CollisionShape3D.PropertyName.Disabled, false);
} }
public override void Die() => QueueFree();
public void RotateToPlayer(float rotationAngle) public void RotateToPlayer(float rotationAngle)
{ {
var tweener = GetTree().CreateTween(); var tweener = GetTree().CreateTween();

View File

@@ -13,12 +13,40 @@ public partial class EnemyModelView3D : EnemyModelView
[Node] public MeshInstance3D MeshInstance { get; set; } = default!; [Node] public MeshInstance3D MeshInstance { get; set; } = default!;
[Node] public AnimationPlayer DeathAnimation { get; set; } = default!;
[Node] public Node3D Armature { get; set; } = default!;
[Node] public Node3D ExplodingModel { get; set; } = default!;
public void OnReady()
{
DeathAnimation.AnimationFinished += DeathAnimation_AnimationFinished;
}
private void DeathAnimation_AnimationFinished(StringName animName)
{
QueueFree();
}
public override Vector2 GetSize() public override Vector2 GetSize()
{ {
var aabb = MeshInstance.GetAabb(); var aabb = MeshInstance.GetAabb();
return new Vector2(aabb.Size.X, aabb.Position.Abs().Y); return new Vector2(aabb.Size.X, aabb.Position.Abs().Y);
} }
public override void PlayHitAnimation()
{
}
public override void PlayDeathAnimation()
{
Armature.Hide();
ExplodingModel.Show();
DeathAnimation.Play("Animation");
}
private void ChangeMaterial() private void ChangeMaterial()
{ {
var material = new StandardMaterial3D var material = new StandardMaterial3D

View File

@@ -42,10 +42,11 @@ script = ExtResource("1_xsluo")
[node name="CollisionShape" type="CollisionShape3D" parent="."] [node name="CollisionShape" type="CollisionShape3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0) transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 2.18615, 0)
shape = SubResource("CapsuleShape3D_cwfph") shape = SubResource("CapsuleShape3D_cwfph")
[node name="Collision" type="Node3D" parent="."] [node name="Collision" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.18615, 0)
[node name="Collision" type="Area3D" parent="Collision"] [node name="Collision" type="Area3D" parent="Collision"]
collision_layer = 2048 collision_layer = 2048
@@ -83,11 +84,13 @@ collision_mask = 34
shape = SubResource("CylinderShape3D_drfkj") shape = SubResource("CylinderShape3D_drfkj")
[node name="Visual" type="Node3D" parent="."] [node name="Visual" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.1, 0)
[node name="EnemyModelView" parent="Visual" instance=ExtResource("4_o3b7p")] [node name="EnemyModelView" parent="Visual" instance=ExtResource("4_o3b7p")]
unique_name_in_owner = true unique_name_in_owner = true
[node name="Components" type="Node3D" parent="."] [node name="Components" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.18615, 0)
[node name="PatrolBehavior" parent="Components" instance=ExtResource("4_drfkj")] [node name="PatrolBehavior" parent="Components" instance=ExtResource("4_drfkj")]
unique_name_in_owner = true unique_name_in_owner = true
@@ -108,6 +111,7 @@ avoidance_enabled = true
radius = 1.0 radius = 1.0
[node name="SFX" type="Node3D" parent="."] [node name="SFX" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.18615, 0)
[node name="AbsorbSFX" type="AudioStreamPlayer3D" parent="SFX"] [node name="AbsorbSFX" type="AudioStreamPlayer3D" parent="SFX"]
unique_name_in_owner = true unique_name_in_owner = true

View File

@@ -666,7 +666,7 @@ EnemyLoreInfo = SubResource("Resource_ivy74")
[node name="Sprite3D" type="Sprite3D" parent="."] [node name="Sprite3D" type="Sprite3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(6, 0, 0, 0, 6, 0, 0, 0, 6, 0, 0, 0) transform = Transform3D(6, 0, 0, 0, 6, 0, 0, 0, 6, 0, 1.1044, 0)
pixel_size = 0.001 pixel_size = 0.001
billboard = 2 billboard = 2
shaded = true shaded = true
@@ -697,7 +697,7 @@ animation = &"idle_left_walk"
[node name="Hitbox" type="Area3D" parent="."] [node name="Hitbox" type="Area3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.152949, 0, 0) transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.152949, 1.1044, 0)
collision_layer = 64 collision_layer = 64
collision_mask = 64 collision_mask = 64
@@ -722,11 +722,12 @@ anim_player = NodePath("../AnimationPlayer")
[node name="WalkSFX" type="AudioStreamPlayer3D" parent="."] [node name="WalkSFX" type="AudioStreamPlayer3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.1044, 0)
autoplay = true autoplay = true
bus = &"SFX" bus = &"SFX"
[node name="Shadow" type="Sprite3D" parent="."] [node name="Shadow" type="Sprite3D" parent="."]
transform = Transform3D(0.115, 0, 0, 0, -5.02681e-09, 0.115, 0, -0.115, -5.02681e-09, -0.00018537, -1.10125, 0.0453106) transform = Transform3D(0.115, 0, 0, 0, -5.02681e-09, 0.115, 0, -0.115, -5.02681e-09, -0.00018537, 0.00315392, 0.0453106)
transparency = 0.1 transparency = 0.1
cast_shadow = 0 cast_shadow = 0
texture_filter = 0 texture_filter = 0

View File

@@ -35,7 +35,7 @@ script = ExtResource("1_lb5oy")
[node name="LineOfSight" type="Area3D" parent="."] [node name="LineOfSight" type="Area3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0) transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 2.27161, 0)
collision_layer = 2 collision_layer = 2
collision_mask = 2 collision_mask = 2
@@ -45,21 +45,22 @@ shape = SubResource("CylinderShape3D_jbgmx")
[node name="Raycast" type="RayCast3D" parent="."] [node name="Raycast" type="RayCast3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0) transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 2.27161, 0)
target_position = Vector3(0, 0, -5) target_position = Vector3(0, 0, -5)
collision_mask = 3 collision_mask = 3
[node name="CollisionShape" type="CollisionShape3D" parent="."] [node name="CollisionShape" type="CollisionShape3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.0824751, 0.212459, 0) transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.0824751, 2.48407, 0)
shape = SubResource("CapsuleShape3D_0h5s2") shape = SubResource("CapsuleShape3D_0h5s2")
[node name="EnemyModelView" parent="." instance=ExtResource("3_wrps7")] [node name="EnemyModelView" parent="." instance=ExtResource("3_wrps7")]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0799522, 0, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0799522, 1.36029, 0)
[node name="PlayerDetector" type="Area3D" parent="."] [node name="PlayerDetector" type="Area3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.27161, 0)
collision_layer = 0 collision_layer = 0
collision_mask = 34 collision_mask = 34
@@ -67,6 +68,7 @@ collision_mask = 34
shape = SubResource("CylinderShape3D_eek1b") shape = SubResource("CylinderShape3D_eek1b")
[node name="Collision" type="Area3D" parent="."] [node name="Collision" type="Area3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.27161, 0)
collision_layer = 2048 collision_layer = 2048
collision_mask = 0 collision_mask = 0
@@ -75,6 +77,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.120117, 0.221246, 0)
shape = SubResource("SphereShape3D_wrps7") shape = SubResource("SphereShape3D_wrps7")
[node name="Components" type="Node3D" parent="."] [node name="Components" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.27161, 0)
[node name="PatrolBehavior" parent="Components" instance=ExtResource("5_fkx5j")] [node name="PatrolBehavior" parent="Components" instance=ExtResource("5_fkx5j")]
unique_name_in_owner = true unique_name_in_owner = true
@@ -93,6 +96,7 @@ avoidance_enabled = true
radius = 1.0 radius = 1.0
[node name="HitSounds" type="Node3D" parent="."] [node name="HitSounds" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.27161, 0)
[node name="AbsorbSFX" type="AudioStreamPlayer3D" parent="HitSounds"] [node name="AbsorbSFX" type="AudioStreamPlayer3D" parent="HitSounds"]
unique_name_in_owner = true unique_name_in_owner = true

View File

@@ -1187,7 +1187,7 @@ EnemyLoreInfo = SubResource("Resource_gby04")
[node name="Sprite3D" type="Sprite3D" parent="."] [node name="Sprite3D" type="Sprite3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.086869, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.25389, 0)
billboard = 2 billboard = 2
shaded = true shaded = true
alpha_cut = 1 alpha_cut = 1
@@ -1218,7 +1218,7 @@ offset = Vector2(400, 400)
[node name="Hitbox" type="Area3D" parent="."] [node name="Hitbox" type="Area3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.152949, 0, 0) transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.152949, 1.34076, 0)
collision_layer = 64 collision_layer = 64
collision_mask = 64 collision_mask = 64
@@ -1245,18 +1245,19 @@ libraries = {
} }
[node name="Michael Attack VFX" type="AnimatedSprite3D" parent="."] [node name="Michael Attack VFX" type="AnimatedSprite3D" parent="."]
transform = Transform3D(0.72, 0, 0, 0, 0.72, 0, 0, 0, 0.72, -0.129818, 0.274447, 0.532815) transform = Transform3D(0.72, 0, 0, 0, 0.72, 0, 0, 0, 0.72, -0.129818, 1.61521, 0.532815)
modulate = Color(0.977, 0.31, 1, 0.741176) modulate = Color(0.977, 0.31, 1, 0.741176)
billboard = 2 billboard = 2
sprite_frames = SubResource("SpriteFrames_suy1t") sprite_frames = SubResource("SpriteFrames_suy1t")
[node name="WalkSFX" type="AudioStreamPlayer3D" parent="."] [node name="WalkSFX" type="AudioStreamPlayer3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.34076, 0)
autoplay = true autoplay = true
bus = &"SFX" bus = &"SFX"
[node name="Shadow" type="Sprite3D" parent="."] [node name="Shadow" type="Sprite3D" parent="."]
transform = Transform3D(0.38, 0, 0, 0, -1.66103e-08, 0.38, 0, -0.38, -1.66103e-08, 0.00393164, -1.31885, 0.0077811) transform = Transform3D(0.38, 0, 0, 0, -1.66103e-08, 0.38, 0, -0.38, -1.66103e-08, 0.00393164, 0.0219133, 0.0077811)
transparency = 0.1 transparency = 0.1
cast_shadow = 0 cast_shadow = 0
modulate = Color(1, 1, 1, 0.591) modulate = Color(1, 1, 1, 0.591)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -34,73 +34,74 @@ public partial class Map : Node3D, IMap
public void OnResolved() public void OnResolved()
{ {
this.Provide(); this.Provide();
} }
public void InitializeMapData() public void InitializeMapData()
{ {
CurrentFloorNumber.OnNext(-1); CurrentFloorNumber.OnNext(-1);
} }
public IDungeonRoom GetPlayersCurrentRoom() public IDungeonRoom GetPlayersCurrentRoom()
{ {
var rooms = CurrentFloor.Rooms; var rooms = CurrentFloor.Rooms;
var playersRoom = rooms.SingleOrDefault(x => x.IsPlayerInRoom); var playersRoom = rooms.SingleOrDefault(x => x.IsPlayerInRoom);
return playersRoom; return playersRoom;
} }
public Transform3D GetPlayerSpawnPosition() => CurrentFloor.GetPlayerSpawnPoint(); public Transform3D GetPlayerSpawnPosition() => CurrentFloor.GetPlayerSpawnPoint();
public async Task LoadFloor() public async Task LoadFloor()
{ {
var floor = MapOrder.GetChildren().OfType<FloorNode>().ElementAt(CurrentFloorNumber.Value + 1); var floor = MapOrder.GetChildren().OfType<FloorNode>().ElementAt(CurrentFloorNumber.Value + 1);
var sceneToLoad = LayoutToScenePathConverter.Convert(floor); var sceneToLoad = LayoutToScenePathConverter.Convert(floor);
await LoadFloor(sceneToLoad); await LoadFloor(sceneToLoad);
if (CurrentFloor is DungeonFloor dungeonFloor && floor is DungeonFloorNode dungeonFloorNode)
dungeonFloor.SpawnEnemies(dungeonFloorNode);
} }
public async Task LoadFloor(string sceneName) public async Task LoadFloor(string sceneName)
{ {
AnimationPlayer.CallDeferred(AnimationPlayer.MethodName.Play, "fade_out"); AnimationPlayer.CallDeferred(AnimationPlayer.MethodName.Play, "fade_out");
ClearMap(); ClearMap();
var newFloor = await LoadNewFloor(sceneName); var newFloor = await LoadNewFloor(sceneName);
AddChild(newFloor); AddChild(newFloor);
InitializeFloor(newFloor); InitializeFloor(newFloor);
AnimationPlayer.CallDeferred(AnimationPlayer.MethodName.Play, ("fade_in")); var floor = MapOrder.GetChildren().OfType<FloorNode>().ElementAt(CurrentFloorNumber.Value + 1);
if (CurrentFloor is DungeonFloor dungeonFloor && floor is DungeonFloorNode dungeonFloorNode)
dungeonFloor.SpawnEnemies(dungeonFloorNode);
AnimationPlayer.CallDeferred(AnimationPlayer.MethodName.Play, ("fade_in"));
} }
public void ClearMap() public void ClearMap()
{ {
AnimationPlayer.CallDeferred(AnimationPlayer.MethodName.Play, "fade_out"); AnimationPlayer.CallDeferred(AnimationPlayer.MethodName.Play, "fade_out");
CurrentFloor?.CallDeferred(MethodName.QueueFree, []); CurrentFloor?.CallDeferred(MethodName.QueueFree, []);
SpawnPointCreated?.Invoke(new Transform3D(Basis.Identity, new Vector3(-999, -999, -999))); SpawnPointCreated?.Invoke(new Transform3D(Basis.Identity, new Vector3(-999, -999, -999)));
} }
private void InitializeFloor(Node newFloor) private void InitializeFloor(Node newFloor)
{ {
CurrentFloor = (IDungeonFloor)newFloor; CurrentFloor = (IDungeonFloor)newFloor;
SetupDungeonFloor(); SetupDungeonFloor();
CurrentFloor.FloorIsLoaded = true; CurrentFloor.FloorIsLoaded = true;
CurrentFloorNumber.OnNext(CurrentFloorNumber.Value + 1); CurrentFloorNumber.OnNext(CurrentFloorNumber.Value + 1);
FloorLoaded?.Invoke(); FloorLoaded?.Invoke();
} }
private async Task<Node> LoadNewFloor(string sceneName) private async Task<Node> LoadNewFloor(string sceneName)
{ {
var sceneLoader = new SceneLoader(); var sceneLoader = new SceneLoader();
AddChild(sceneLoader); AddChild(sceneLoader);
sceneLoader.LoadSceneRequest(sceneName); sceneLoader.LoadSceneRequest(sceneName);
await ToSignal(sceneLoader, SceneLoader.SignalName.SceneLoaded); await ToSignal(sceneLoader, SceneLoader.SignalName.SceneLoaded);
var result = sceneLoader.LoadedScene; var result = sceneLoader.LoadedScene;
sceneLoader.QueueFree(); sceneLoader.QueueFree();
return result; return result;
} }
private void SetupDungeonFloor() private void SetupDungeonFloor()
{ {
CurrentFloor.InitializeDungeon(); CurrentFloor.InitializeDungeon();
var transform = GetPlayerSpawnPosition(); var transform = GetPlayerSpawnPosition();
SpawnPointCreated?.Invoke(transform); SpawnPointCreated?.Invoke(transform);
} }
} }

View File

@@ -76,6 +76,16 @@ libraries = {
[node name="MapOrder" type="Node" parent="."] [node name="MapOrder" type="Node" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
[node name="Boss Floor 1" type="Node" parent="MapOrder"]
script = ExtResource("3_v14r0")
FloorName = 2
[node name="Floor01" type="Node" parent="MapOrder"]
script = ExtResource("2_00xd7")
FolderName = "Floor01"
FloorOdds = Array[float]([0.33, 0.33, 0.33])
Michael = 1.0
[node name="Overworld" type="Node" parent="MapOrder"] [node name="Overworld" type="Node" parent="MapOrder"]
script = ExtResource("3_v14r0") script = ExtResource("3_v14r0")
@@ -83,12 +93,6 @@ script = ExtResource("3_v14r0")
script = ExtResource("3_v14r0") script = ExtResource("3_v14r0")
FloorName = 1 FloorName = 1
[node name="Floor01" type="Node" parent="MapOrder"]
script = ExtResource("2_00xd7")
FolderName = "Floor01"
FloorOdds = Array[float]([0.33, 0.33, 0.33])
Sproingy = 1.0
[node name="Floor02" type="Node" parent="MapOrder"] [node name="Floor02" type="Node" parent="MapOrder"]
script = ExtResource("2_00xd7") script = ExtResource("2_00xd7")
FolderName = "Floor02" FolderName = "Floor02"
@@ -137,10 +141,6 @@ FolderName = "Floor09"
FloorOdds = Array[float]([1.0]) FloorOdds = Array[float]([1.0])
Sproingy = 1.0 Sproingy = 1.0
[node name="Boss Floor 1" type="Node" parent="MapOrder"]
script = ExtResource("3_v14r0")
FloorName = 2
[node name="Floor11" type="Node" parent="MapOrder"] [node name="Floor11" type="Node" parent="MapOrder"]
script = ExtResource("2_00xd7") script = ExtResource("2_00xd7")
FolderName = "Floor11" FolderName = "Floor11"

View File

@@ -15,13 +15,13 @@ public partial class BossRoomA : Node3D, IBossRoom, IDungeonFloor
[Node] public Marker3D PlayerSpawn { get; set; } = default!; [Node] public Marker3D PlayerSpawn { get; set; } = default!;
[Node] public Node3D HorseHeadStatue { get; set; } = default!; //[Node] public Node3D HorseHeadStatue { get; set; } = default!;
[Node] public Node3D OxFaceStatue { get; set; } = default!; [Node] public Node3D OxFaceStatue { get; set; } = default!;
[Node] public BossTypeA OxFace { get; set; } = default!; [Node] public BossTypeA OxFace { get; set; } = default!;
[Node] public BossTypeA HorseFace { get; set; } = default!; //[Node] public BossTypeA HorseFace { get; set; } = default!;
[Node] public Area3D ActivateTrap { get; set; } = default!; [Node] public Area3D ActivateTrap { get; set; } = default!;
@@ -35,45 +35,45 @@ public partial class BossRoomA : Node3D, IBossRoom, IDungeonFloor
public void OnReady() public void OnReady()
{ {
ActivateTrap.BodyEntered += ActivateTrap_BodyEntered; ActivateTrap.BodyEntered += ActivateTrap_BodyEntered;
_exit.AreaEntered += Exit_AreaEntered; _exit.AreaEntered += Exit_AreaEntered;
OxFace.HealthComponent.HealthReachedZero += CheckForBossFightEnd; OxFace.HealthComponent.HealthReachedZero += CheckForBossFightEnd;
HorseFace.HealthComponent.HealthReachedZero += CheckForBossFightEnd; //HorseFace.HealthComponent.HealthReachedZero += CheckForBossFightEnd;
} }
private void ActivateTrap_BodyEntered(Node3D body) private void ActivateTrap_BodyEntered(Node3D body)
{ {
ActivateTrap.BodyEntered -= ActivateTrap_BodyEntered; ActivateTrap.BodyEntered -= ActivateTrap_BodyEntered;
StartBossFight(); StartBossFight();
} }
public void StartBossFight() public void StartBossFight()
{ {
OxFaceStatue.Hide(); OxFaceStatue.Hide();
HorseHeadStatue.Hide(); //HorseHeadStatue.Hide();
OxFace.StartFight(); OxFace.StartFight();
HorseFace.StartFight(); //HorseFace.StartFight();
} }
private void CheckForBossFightEnd() private void CheckForBossFightEnd()
{ {
if (OxFace.HealthComponent.CurrentHP.Value <= 0 && HorseFace.HealthComponent.CurrentHP.Value <= 0) if (OxFace.HealthComponent.CurrentHP.Value <= 0) //&& HorseFace.HealthComponent.CurrentHP.Value <= 0)
OnBossFightEnded(); OnBossFightEnded();
} }
public void OnBossFightEnded() public void OnBossFightEnded()
{ {
GateCollision.CallDeferred(MethodName.QueueFree); GateCollision.CallDeferred(MethodName.QueueFree);
LOCKEDGATE.Hide(); LOCKEDGATE.Hide();
} }
public void ExitReached() public void ExitReached()
=> Game.FloorExitReached(); => Game.FloorExitReached();
private void Exit_AreaEntered(Area3D area) private void Exit_AreaEntered(Area3D area)
{ {
if (area.GetOwner() is IPlayer) if (area.GetOwner() is IPlayer)
ExitReached(); ExitReached();
} }
public void InitializeDungeon() public void InitializeDungeon()

View File

@@ -13,21 +13,18 @@ public partial class CorridorRoom : Node3D
[Dependency] IGame Game => this.DependOn<IGame>(); [Dependency] IGame Game => this.DependOn<IGame>();
[Node] private Area3D _room { get; set; } = default!; [Node] private Area3D _room { get; set; } = default!;
[Node] private MeshInstance3D _minimap { get; set; } = default!;
private bool _playerDiscoveredRoom = false; private bool _playerDiscoveredRoom = false;
public void Setup() public void Setup()
{ {
if (_room != null) if (_room != null)
_room.BodyEntered += Room_BodyEntered; _room.BodyEntered += Room_BodyEntered;
} }
private void Room_BodyEntered(Node3D body) private void Room_BodyEntered(Node3D body)
{ {
if (!Game.CurrentFloor.FloorIsLoaded) if (!Game.CurrentFloor.FloorIsLoaded)
return; return;
if (body is IPlayer)
_minimap.Show();
} }
} }

View File

@@ -12,8 +12,6 @@ public abstract partial class DungeonRoom : Node3D, IDungeonRoom
{ {
public override void _Notification(int what) => this.Notify(what); public override void _Notification(int what) => this.Notify(what);
[Node] private MeshInstance3D _minimap { get; set; } = default!;
public bool IsPlayerInRoom => _isPlayerInRoom; public bool IsPlayerInRoom => _isPlayerInRoom;
public bool PlayerDiscoveredRoom => _playerDiscoveredRoom; public bool PlayerDiscoveredRoom => _playerDiscoveredRoom;
@@ -28,47 +26,46 @@ public abstract partial class DungeonRoom : Node3D, IDungeonRoom
public void Setup() public void Setup()
{ {
_enemiesInRoom = []; _enemiesInRoom = [];
if (_room != null) if (_room != null)
{ {
_room.BodyEntered += Room_BodyEntered; _room.BodyEntered += Room_BodyEntered;
_room.BodyExited += Room_BodyExited; _room.BodyExited += Room_BodyExited;
} }
} }
private void Room_BodyExited(Node3D body) private void Room_BodyExited(Node3D body)
{ {
if (body is IEnemy enemy) if (body is IEnemy enemy)
_enemiesInRoom = _enemiesInRoom.Remove(enemy); _enemiesInRoom = _enemiesInRoom.Remove(enemy);
if (body is IPlayer) if (body is IPlayer)
_isPlayerInRoom = false; _isPlayerInRoom = false;
} }
private void Room_BodyEntered(Node3D body) private void Room_BodyEntered(Node3D body)
{ {
if (body is IEnemy enemy) if (body is IEnemy enemy)
_enemiesInRoom = _enemiesInRoom.Add(enemy); _enemiesInRoom = _enemiesInRoom.Add(enemy);
if (body is IPlayer) if (body is IPlayer)
if (_playerDiscoveredRoom) if (_playerDiscoveredRoom)
_isPlayerInRoom = true; _isPlayerInRoom = true;
else else
OnPlayerDiscoveringRoom(); OnPlayerDiscoveringRoom();
} }
public ImmutableList<IEnemy> GetEnemiesInCurrentRoom() public ImmutableList<IEnemy> GetEnemiesInCurrentRoom()
{ {
return _enemiesInRoom; return _enemiesInRoom;
} }
private void OnPlayerDiscoveringRoom() private void OnPlayerDiscoveringRoom()
{ {
_isPlayerInRoom = true; _isPlayerInRoom = true;
_playerDiscoveredRoom = true; _playerDiscoveredRoom = true;
_minimap.Show();
} }
public void OnExitTree() public void OnExitTree()
{ {
_room.BodyEntered -= Room_BodyEntered; _room.BodyEntered -= Room_BodyEntered;
_room.BodyExited -= Room_BodyExited; _room.BodyExited -= Room_BodyExited;
} }
} }

View File

@@ -19,54 +19,57 @@ public partial class MonsterRoom : DungeonRoom
public override void _Ready() public override void _Ready()
{ {
SpawnItems(); SpawnItems();
} }
public void SpawnEnemies(Godot.Collections.Dictionary<EnemyType, float> enemyInfo) public void SpawnEnemies(Godot.Collections.Dictionary<EnemyType, float> enemyInfo)
{ {
if (enemyInfo == null || !enemyInfo.Any(x => x.Value > 0)) if (enemyInfo == null || !enemyInfo.Any(x => x.Value > 0))
return; return;
var rng = new RandomNumberGenerator(); var rng = new RandomNumberGenerator();
rng.Randomize(); rng.Randomize();
var enemySpawnPoints = EnemySpawnPoints.GetChildren(); var enemySpawnPoints = EnemySpawnPoints.GetChildren();
var numberOfEnemiesToSpawn = rng.RandiRange(1, enemySpawnPoints.Count); var numberOfEnemiesToSpawn = rng.RandiRange(1, enemySpawnPoints.Count);
foreach (var spawnPoint in enemySpawnPoints.Cast<Marker3D>()) foreach (var spawnPoint in enemySpawnPoints.Cast<Marker3D>())
{ {
if (numberOfEnemiesToSpawn <= 0) if (numberOfEnemiesToSpawn <= 0)
break; break;
numberOfEnemiesToSpawn--; numberOfEnemiesToSpawn--;
var index = rng.RandWeighted([.. enemyInfo.Values]); var index = rng.RandWeighted([.. enemyInfo.Values]);
var selectedEnemy = enemyInfo.ElementAt((int)index); var selectedEnemy = enemyInfo.ElementAt((int)index);
var instantiatedEnemy = EnemyTypeToEnemyConverter.Convert(selectedEnemy.Key); var instantiatedEnemy = EnemyTypeToEnemyConverter.Convert(selectedEnemy.Key);
instantiatedEnemy.Position = new Vector3(spawnPoint.Position.X, 1.75f, spawnPoint.Position.Z); instantiatedEnemy.Position = new Vector3(spawnPoint.Position.X, 0f, spawnPoint.Position.Z);
AddChild(instantiatedEnemy); AddChild(instantiatedEnemy);
} }
} }
// RegularFlame.GetChildren();
//
private void SpawnItems() private void SpawnItems()
{ {
if (ItemSpawnPoints == null) if (ItemSpawnPoints == null)
return; return;
var itemSpawnPoints = ItemSpawnPoints.GetChildren(); var itemSpawnPoints = ItemSpawnPoints.GetChildren();
var rng = new RandomNumberGenerator(); var rng = new RandomNumberGenerator();
rng.Randomize(); rng.Randomize();
var numberOfItemsToSpawn = rng.RandiRange(1, itemSpawnPoints.Count); var numberOfItemsToSpawn = rng.RandiRange(1, itemSpawnPoints.Count);
itemSpawnPoints.Shuffle(); itemSpawnPoints.Shuffle();
var database = ItemDatabase.Instance; var database = ItemDatabase.Instance;
foreach (var spawnPoint in itemSpawnPoints.Cast<Marker3D>()) foreach (var spawnPoint in itemSpawnPoints.Cast<Marker3D>())
{ {
if (numberOfItemsToSpawn <= 0) if (numberOfItemsToSpawn <= 0)
break; break;
numberOfItemsToSpawn--; numberOfItemsToSpawn--;
var selectedItem = database.PickItem<InventoryItem>(); var selectedItem = database.PickItem<InventoryItem>();
var duplicated = selectedItem.Duplicate((int)DuplicateFlags.UseInstantiation) as Node3D; var duplicated = selectedItem.Duplicate((int)DuplicateFlags.UseInstantiation) as Node3D;
duplicated.Position = new Vector3(spawnPoint.Position.X, -1.5f, spawnPoint.Position.Z); duplicated.Position = new Vector3(spawnPoint.Position.X, 0, spawnPoint.Position.Z);
AddChild(duplicated); AddChild(duplicated);
} }
} }
} }

File diff suppressed because one or more lines are too long

View File

@@ -1,12 +1,10 @@
[gd_scene load_steps=86 format=4 uid="uid://5ja3qxn8h7iw"] [gd_scene load_steps=84 format=4 uid="uid://5ja3qxn8h7iw"]
[ext_resource type="Script" uid="uid://tqyybt313web" path="res://src/map/dungeon/code/BossRoomA.cs" id="1_0h3lb"] [ext_resource type="Script" uid="uid://tqyybt313web" path="res://src/map/dungeon/code/BossRoomA.cs" id="1_0h3lb"]
[ext_resource type="Texture2D" uid="uid://clc5f6yyc7sdw" path="res://src/map/assets/Jomon Bells/BELL ANIMATIONS_concrete_0003_color_1k.png" id="2_lqw6r"] [ext_resource type="Texture2D" uid="uid://clc5f6yyc7sdw" path="res://src/map/assets/Jomon Bells/BELL ANIMATIONS_concrete_0003_color_1k.png" id="2_lqw6r"]
[ext_resource type="PackedScene" uid="uid://j7xsk4fv6f4q" path="res://src/map/dungeon/models/Special Floors & Rooms/Boss Floor A/15_A1_BOSS FLOOR A_VER.2.glb" id="2_r3w6s"] [ext_resource type="PackedScene" uid="uid://j7xsk4fv6f4q" path="res://src/map/dungeon/models/Special Floors & Rooms/Boss Floor A/15_A1_BOSS FLOOR A_VER.2.glb" id="2_r3w6s"]
[ext_resource type="Texture2D" uid="uid://dipyrtjclqae1" path="res://src/map/assets/Jomon Bells/BELL ANIMATIONS_COLUMN.jpg" id="3_ucaw1"] [ext_resource type="Texture2D" uid="uid://dipyrtjclqae1" path="res://src/map/assets/Jomon Bells/BELL ANIMATIONS_COLUMN.jpg" id="3_ucaw1"]
[ext_resource type="Texture2D" uid="uid://d1xdvf8awh4bi" path="res://src/map/assets/Jomon Bells/BELL ANIMATIONS_CHAIN_TEX.png" id="4_i4jo4"] [ext_resource type="Texture2D" uid="uid://d1xdvf8awh4bi" path="res://src/map/assets/Jomon Bells/BELL ANIMATIONS_CHAIN_TEX.png" id="4_i4jo4"]
[ext_resource type="PackedScene" uid="uid://8yaqqojv4nuv" path="res://src/enemy/enemy_types/14. horse_head/HorseHeadStatue.tscn" id="24_r1rk5"]
[ext_resource type="PackedScene" uid="uid://2wibfnu2jvlv" path="res://src/enemy/enemy_types/14. horse_head/HorseFace.tscn" id="25_a482y"]
[ext_resource type="PackedScene" uid="uid://bvv5giqyrhtl1" path="res://src/enemy/enemy_types/15. ox_face/OxFaceStatue.tscn" id="26_futcf"] [ext_resource type="PackedScene" uid="uid://bvv5giqyrhtl1" path="res://src/enemy/enemy_types/15. ox_face/OxFaceStatue.tscn" id="26_futcf"]
[ext_resource type="PackedScene" uid="uid://6dnsw37d1uw4" path="res://src/enemy/enemy_types/15. ox_face/OxFace.tscn" id="27_g6y6v"] [ext_resource type="PackedScene" uid="uid://6dnsw37d1uw4" path="res://src/enemy/enemy_types/15. ox_face/OxFace.tscn" id="27_g6y6v"]
[ext_resource type="Shader" uid="uid://dr68ani6ouefm" path="res://src/map/map shaders/B1 Cloud Roll.gdshader" id="30_lmjp4"] [ext_resource type="Shader" uid="uid://dr68ani6ouefm" path="res://src/map/map shaders/B1 Cloud Roll.gdshader" id="30_lmjp4"]
@@ -662,6 +660,7 @@ script = ExtResource("1_0h3lb")
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -157.601, -16.1094, 21.8408) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -157.601, -16.1094, 21.8408)
[node name="Collision" type="Node3D" parent="."] [node name="Collision" type="Node3D" parent="."]
visible = false
[node name="StaticBody3D2" type="StaticBody3D" parent="Collision"] [node name="StaticBody3D2" type="StaticBody3D" parent="Collision"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -88.2175, -1.5279, -0.620708) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -88.2175, -1.5279, -0.620708)
@@ -800,6 +799,9 @@ transform = Transform3D(19.342, 0, 0, 0, 3.12, 0, 0, 0, 4.493, -118.232, 0.07999
[node name="CollisionShape3D" type="CollisionShape3D" parent="Collision/StaticBody3D5"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Collision/StaticBody3D5"]
shape = SubResource("ConcavePolygonShape3D_1txpk") shape = SubResource("ConcavePolygonShape3D_1txpk")
[node name="GateCollision" type="Node3D" parent="Collision"]
unique_name_in_owner = true
[node name="Doors" type="Node3D" parent="."] [node name="Doors" type="Node3D" parent="."]
[node name="Spawn Points" type="Node3D" parent="."] [node name="Spawn Points" type="Node3D" parent="."]
@@ -823,35 +825,17 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -240.071, 36.4279, 34.624)
visible = false visible = false
shape = SubResource("BoxShape3D_pkvyy") shape = SubResource("BoxShape3D_pkvyy")
[node name="Horse Head" type="Node3D" parent="Room"]
[node name="HorseHeadStatue" parent="Room/Horse Head" instance=ExtResource("24_r1rk5")]
unique_name_in_owner = true
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -102.157, -2.30863, 13.3664)
[node name="HorseFace" parent="Room/Horse Head" instance=ExtResource("25_a482y")]
unique_name_in_owner = true
transform = Transform3D(-6.55671e-09, 0, -0.15, 0, 0.15, 0, 0.15, 0, -6.55671e-09, -102.157, -0.510939, 13.3664)
visible = false
PrimaryAttackElementalType = null
PrimaryAttackElementalDamageBonus = null
InitialHP = null
[node name="OxFace" type="Node3D" parent="Room"] [node name="OxFace" type="Node3D" parent="Room"]
transform = Transform3D(-6.55671e-09, 0, -0.15, 0, 0.15, 0, 0.15, 0, -6.55671e-09, -102.157, -0.510939, 13.3664) transform = Transform3D(-6.55671e-09, 0, -0.15, 0, 0.15, 0, 0.15, 0, -6.55671e-09, -102.157, -0.510939, 13.3664)
[node name="OxFaceStatue" parent="Room/OxFace" instance=ExtResource("26_futcf")] [node name="OxFaceStatue" parent="Room/OxFace" instance=ExtResource("26_futcf")]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(6.66667, 0, 0, 0, 6.66667, 0, 0, 0, 6.66667, 54.7793, -11.9846, -4.01331) transform = Transform3D(6.66667, 0, 0, 0, 6.66667, 0, 0, 0, 6.66667, 54.7793, -11.9846, -4.01331)
visible = false
[node name="OxFace" parent="Room/OxFace" instance=ExtResource("27_g6y6v")] [node name="OxFace" parent="Room/OxFace" instance=ExtResource("27_g6y6v")]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 58.194, 0.2072, -3.02661) transform = Transform3D(1, 0, 3.55271e-15, 0, 1, 0, -3.55271e-15, 0, 1, 58.194, -12.7983, -3.02698)
visible = false visible = false
PrimaryAttackElementalType = null
PrimaryAttackElementalDamageBonus = null
InitialHP = null
[node name="Exit" type="Area3D" parent="Room"] [node name="Exit" type="Area3D" parent="Room"]
unique_name_in_owner = true unique_name_in_owner = true
@@ -864,6 +848,7 @@ transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 1.5910
shape = SubResource("BoxShape3D_1qa0g") shape = SubResource("BoxShape3D_1qa0g")
[node name="Minimap" type="Node3D" parent="."] [node name="Minimap" type="Node3D" parent="."]
visible = false
[node name="Boss Floor Environment" type="WorldEnvironment" parent="."] [node name="Boss Floor Environment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_1qa0g") environment = SubResource("Environment_1qa0g")
@@ -919,6 +904,7 @@ transform = Transform3D(0.565, 0, 0, 0, 0.565, 0, 0, 0, 0.565, -92.0811, -2.7728
transform = Transform3D(0.55, 0, 0, 0, 0.55, 0, 0, 0, 0.55, -92.04, -2.83756, 3.9847) transform = Transform3D(0.55, 0, 0, 0, 0.55, 0, 0, 0, 0.55, -92.04, -2.83756, 3.9847)
[node name="NavigationRegion3D" type="NavigationRegion3D" parent="."] [node name="NavigationRegion3D" type="NavigationRegion3D" parent="."]
visible = false
navigation_mesh = SubResource("NavigationMesh_eanap") navigation_mesh = SubResource("NavigationMesh_eanap")
[node name="MeshInstance3D" type="MeshInstance3D" parent="NavigationRegion3D"] [node name="MeshInstance3D" type="MeshInstance3D" parent="NavigationRegion3D"]
@@ -998,3 +984,6 @@ libraries = {
&"": SubResource("AnimationLibrary_cm2l0") &"": SubResource("AnimationLibrary_cm2l0")
} }
autoplay = "Animation" autoplay = "Animation"
[node name="LOCKEDGATE" type="MeshInstance3D" parent="."]
unique_name_in_owner = true

View File

@@ -10882,6 +10882,44 @@ billboard = 1
sprite_frames = SubResource("SpriteFrames_cnruo") sprite_frames = SubResource("SpriteFrames_cnruo")
frame_progress = 0.271099 frame_progress = 0.271099
[node name="RegularFlame" type="Node3D" parent="Node3D/Flames"]
[node name="REGULAR FLAME" type="AnimatedSprite3D" parent="Node3D/Flames/RegularFlame"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.38918, 0)
billboard = 1
sprite_frames = SubResource("SpriteFrames_yw3t6")
frame_progress = 0.180404
[node name="REGULAR FLAME2" type="AnimatedSprite3D" parent="Node3D/Flames/RegularFlame"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.38918, 0)
billboard = 1
sprite_frames = SubResource("SpriteFrames_yw3t6")
frame_progress = 0.180404
[node name="REGULAR FLAME3" type="AnimatedSprite3D" parent="Node3D/Flames/RegularFlame"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.38918, 0)
billboard = 1
sprite_frames = SubResource("SpriteFrames_yw3t6")
frame_progress = 0.180404
[node name="REGULAR FLAME4" type="AnimatedSprite3D" parent="Node3D/Flames/RegularFlame"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.38918, 0)
billboard = 1
sprite_frames = SubResource("SpriteFrames_yw3t6")
frame_progress = 0.180404
[node name="REGULAR FLAME5" type="AnimatedSprite3D" parent="Node3D/Flames/RegularFlame"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.38918, 0)
billboard = 1
sprite_frames = SubResource("SpriteFrames_yw3t6")
frame_progress = 0.180404
[node name="REGULAR FLAME6" type="AnimatedSprite3D" parent="Node3D/Flames/RegularFlame"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.38918, 0)
billboard = 1
sprite_frames = SubResource("SpriteFrames_yw3t6")
frame_progress = 0.180404
[node name="FAR SCENERY" type="MeshInstance3D" parent="Node3D"] [node name="FAR SCENERY" type="MeshInstance3D" parent="Node3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -146.027, 31.1617, -329.541) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -146.027, 31.1617, -329.541)
visible = false visible = false

View File

@@ -1,9 +1,8 @@
[gd_scene load_steps=23 format=3 uid="uid://tpgwccr6v43e"] [gd_scene load_steps=20 format=3 uid="uid://tpgwccr6v43e"]
[ext_resource type="Script" uid="uid://dhollu4j3pynq" path="res://src/map/dungeon/code/MonsterRoom.cs" id="1_58osi"] [ext_resource type="Script" uid="uid://dhollu4j3pynq" path="res://src/map/dungeon/code/MonsterRoom.cs" id="1_58osi"]
[ext_resource type="PackedScene" uid="uid://cljj515aklhoq" path="res://src/map/dungeon/models/Area 1/Tree/A1-Tree.glb" id="2_rr4cd"] [ext_resource type="PackedScene" uid="uid://cljj515aklhoq" path="res://src/map/dungeon/models/Area 1/Tree/A1-Tree.glb" id="2_rr4cd"]
[ext_resource type="Texture2D" uid="uid://dw50ys561j8no" path="res://src/map/assets/DUST_1.png" id="4_e73oq"] [ext_resource type="Texture2D" uid="uid://dw50ys561j8no" path="res://src/map/assets/DUST_1.png" id="4_e73oq"]
[ext_resource type="Texture2D" uid="uid://ba7ch5rr7qj1d" path="res://src/minimap/textures/Room Maps/mi_treeante.png" id="7_hy27a"]
[sub_resource type="BoxShape3D" id="BoxShape3D_q0uor"] [sub_resource type="BoxShape3D" id="BoxShape3D_q0uor"]
size = Vector3(7.93076, 7.25739, 0.543945) size = Vector3(7.93076, 7.25739, 0.543945)
@@ -76,14 +75,6 @@ size = Vector2(0.1, 0.1)
subdivide_width = 1 subdivide_width = 1
subdivide_depth = 1 subdivide_depth = 1
[sub_resource type="PlaneMesh" id="PlaneMesh_jfnkd"]
size = Vector2(20, 16)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_vyfk3"]
shading_mode = 0
albedo_texture = ExtResource("7_hy27a")
texture_filter = 0
[node name="Antechamber B" type="Node3D"] [node name="Antechamber B" type="Node3D"]
script = ExtResource("1_58osi") script = ExtResource("1_58osi")
@@ -215,16 +206,6 @@ local_coords = true
process_material = SubResource("ParticleProcessMaterial_vqrrr") process_material = SubResource("ParticleProcessMaterial_vqrrr")
draw_pass_1 = SubResource("QuadMesh_55djs") draw_pass_1 = SubResource("QuadMesh_55djs")
[node name="Minimap" type="Node3D" parent="."]
[node name="Minimap" type="MeshInstance3D" parent="Minimap"]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, 8)
visible = false
mesh = SubResource("PlaneMesh_jfnkd")
skeleton = NodePath("../cor_t_intersection")
surface_material_override/0 = SubResource("StandardMaterial3D_vyfk3")
[node name="OmniLight3D" type="OmniLight3D" parent="."] [node name="OmniLight3D" type="OmniLight3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.383, 6.70561, 8.71907) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.383, 6.70561, 8.71907)
light_energy = 1.904 light_energy = 1.904

View File

@@ -1,6 +1,7 @@
using Chickensoft.AutoInject; using Chickensoft.AutoInject;
using Chickensoft.Introspection; using Chickensoft.Introspection;
using Godot; using Godot;
using Zennysoft.Ma.Adapter;
namespace Zennysoft.Game.Ma; namespace Zennysoft.Game.Ma;
[Meta(typeof(IAutoNode))] [Meta(typeof(IAutoNode))]
@@ -10,15 +11,28 @@ public partial class Minimap : Control
[Dependency] public IMap _map => this.DependOn<IMap>(); [Dependency] public IMap _map => this.DependOn<IMap>();
[Dependency] public IPlayer _player => this.DependOn<IPlayer>();
[Node] public Camera3D MinimapCamera { get; set; }
[Node] public Label LayerNumberText { get; set; } = default!; [Node] public Label LayerNumberText { get; set; } = default!;
private bool _ready = false;
public void OnResolved() public void OnResolved()
{ {
_map.CurrentFloorNumber.Sync += CurrentFloorNumber_Sync; _map.CurrentFloorNumber.Sync += CurrentFloorNumber_Sync;
_ready = true;
}
public override void _PhysicsProcess(double delta)
{
if (_ready)
MinimapCamera.Position = new Vector3(_player.GlobalPosition.X, MinimapCamera.Position.Y, _player.GlobalPosition.Z);
} }
private void CurrentFloorNumber_Sync(int obj) private void CurrentFloorNumber_Sync(int obj)
{ {
LayerNumberText.Text = $"{obj:D2}"; LayerNumberText.Text = $"{obj:D2}";
} }
} }

View File

@@ -63,8 +63,9 @@ handle_input_locally = false
size = Vector2i(350, 300) size = Vector2i(350, 300)
render_target_update_mode = 4 render_target_update_mode = 4
[node name="Minimap Camera" type="Camera3D" parent="CenterContainer/SubViewportContainer/SubViewport"] [node name="MinimapCamera" type="Camera3D" parent="CenterContainer/SubViewportContainer/SubViewport"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -21.7374, 240.05, 2.76249) unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -21.7374, 146.05, 2.76249)
cull_mask = 2 cull_mask = 2
environment = SubResource("Environment_yn75n") environment = SubResource("Environment_yn75n")
attributes = SubResource("CameraAttributesPractical_yn75n") attributes = SubResource("CameraAttributesPractical_yn75n")

View File

@@ -20,53 +20,58 @@ public partial class Npc : Node3D
public void OnReady() public void OnReady()
{ {
SetPhysicsProcess(true); SetPhysicsProcess(true);
DialogueZone.BodyEntered += DialogueZone_BodyEntered; DialogueZone.BodyEntered += DialogueZone_BodyEntered;
DialogueZone.BodyExited += DialogueZone_BodyExited; DialogueZone.BodyExited += DialogueZone_BodyExited;
Hitbox.AreaEntered += Hitbox_AreaEntered; Hitbox.AreaEntered += Hitbox_AreaEntered;
} }
private void Hitbox_AreaEntered(Area3D area) private void Hitbox_AreaEntered(Area3D area)
{ {
if (area.GetOwner() is ThrownItem thrownItem) if (area.GetOwner() is ThrownItem thrownItem)
{ {
DialogueController.ShowDialogue(Dialogue, "get_item"); DialogueController.ShowDialogue(Dialogue, "get_item");
thrownItem.QueueFree(); thrownItem.QueueFree();
} }
else else
{ {
DialogueController.ShowDialogue(Dialogue, "hit"); DialogueController.ShowDialogue(Dialogue, "hit");
} }
} }
private void Hitbox_BodyEntered(Node body) private void Hitbox_BodyEntered(Node body)
{ {
DialogueController.ShowDialogue(Dialogue, "hit"); DialogueController.ShowDialogue(Dialogue, "hit");
} }
private void DialogueZone_BodyExited(Node3D body) private void DialogueZone_BodyExited(Node3D body)
{ {
_isInDialogueZone = false; _isInDialogueZone = false;
DialogueController.Interrupt(); DialogueController.Interrupt();
} }
private void DialogueZone_BodyEntered(Node3D body) private void DialogueZone_BodyEntered(Node3D body)
{ {
_isInDialogueZone = true; _isInDialogueZone = true;
} }
public override void _UnhandledInput(InputEvent @event) public override void _UnhandledInput(InputEvent @event)
{ {
if (@event.IsActionPressed(GameInputs.Interact) && _isInDialogueZone) if (@event.IsActionPressed(GameInputs.Interact) && _isInDialogueZone)
{ {
if (_isIntroductionComplete) DialogueController.ShowDialogue(Dialogue, "general");
DialogueController.ShowDialogue(Dialogue, "general"); }
else }
{
DialogueController.ShowDialogue(Dialogue, "introduction"); public partial class Gesthemii : Npc
_isIntroductionComplete = true; {
} public override void _UnhandledInput(InputEvent @event)
} {
if (@event.IsActionPressed(GameInputs.Interact) && _isInDialogueZone)
{
DialogueController.ShowDialogue(Dialogue, "general");
}
}
} }
} }

View File

@@ -12331,6 +12331,7 @@ transform = Transform3D(-0.015, 0, -2.26494e-09, 0, 0.015, 0, 2.26494e-09, 0, -0
[node name="tendomaya" parent="Camera/player_model" instance=ExtResource("3_74hqa")] [node name="tendomaya" parent="Camera/player_model" instance=ExtResource("3_74hqa")]
transform = Transform3D(1.355, 0, 2.84217e-14, 0, 1.355, 0, -2.84217e-14, 0, 1.355, 3.57499e-06, 0, -23.676) transform = Transform3D(1.355, 0, 2.84217e-14, 0, 1.355, 0, -2.84217e-14, 0, 1.355, 3.57499e-06, 0, -23.676)
visible = false
[node name="Lights" type="Node3D" parent="Camera"] [node name="Lights" type="Node3D" parent="Camera"]

View File

@@ -0,0 +1,3 @@
~ general
- Here's my hint
=> END

View File

@@ -0,0 +1,16 @@
[remap]
importer="dialogue_manager"
importer_version=15
type="Resource"
uid="uid://8wf6jvs78ncf"
path="res://.godot/imported/stone.dialogue-844f025f38603e82467c319c925d9163.tres"
[deps]
source_file="res://stone.dialogue"
dest_files=["res://.godot/imported/stone.dialogue-844f025f38603e82467c319c925d9163.tres"]
[params]
defaults=true