Boss fixes, various changes
This commit is contained in:
@@ -265,7 +265,7 @@ EnemyViewerWalk={
|
||||
|
||||
[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]
|
||||
|
||||
|
||||
@@ -110,8 +110,6 @@ public partial class BossTypeA : Enemy, IHaveEngagePlayerBehavior, IHaveFollowBe
|
||||
EnemyHitbox.SetDeferred(CollisionShape3D.PropertyName.Disabled, false);
|
||||
}
|
||||
|
||||
public override void Die() => QueueFree();
|
||||
|
||||
public void RotateToPlayer(float rotationAngle)
|
||||
{
|
||||
var tweener = GetTree().CreateTween();
|
||||
|
||||
@@ -13,12 +13,40 @@ public partial class EnemyModelView3D : EnemyModelView
|
||||
|
||||
[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()
|
||||
{
|
||||
var aabb = MeshInstance.GetAabb();
|
||||
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()
|
||||
{
|
||||
var material = new StandardMaterial3D
|
||||
|
||||
@@ -42,10 +42,11 @@ script = ExtResource("1_xsluo")
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape3D" parent="."]
|
||||
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")
|
||||
|
||||
[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"]
|
||||
collision_layer = 2048
|
||||
@@ -83,11 +84,13 @@ collision_mask = 34
|
||||
shape = SubResource("CylinderShape3D_drfkj")
|
||||
|
||||
[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")]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[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")]
|
||||
unique_name_in_owner = true
|
||||
@@ -108,6 +111,7 @@ avoidance_enabled = true
|
||||
radius = 1.0
|
||||
|
||||
[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"]
|
||||
unique_name_in_owner = true
|
||||
|
||||
@@ -666,7 +666,7 @@ EnemyLoreInfo = SubResource("Resource_ivy74")
|
||||
|
||||
[node name="Sprite3D" type="Sprite3D" parent="."]
|
||||
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
|
||||
billboard = 2
|
||||
shaded = true
|
||||
@@ -697,7 +697,7 @@ animation = &"idle_left_walk"
|
||||
|
||||
[node name="Hitbox" type="Area3D" parent="."]
|
||||
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_mask = 64
|
||||
|
||||
@@ -722,11 +722,12 @@ anim_player = NodePath("../AnimationPlayer")
|
||||
|
||||
[node name="WalkSFX" type="AudioStreamPlayer3D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.1044, 0)
|
||||
autoplay = true
|
||||
bus = &"SFX"
|
||||
|
||||
[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
|
||||
cast_shadow = 0
|
||||
texture_filter = 0
|
||||
|
||||
@@ -35,7 +35,7 @@ script = ExtResource("1_lb5oy")
|
||||
|
||||
[node name="LineOfSight" type="Area3D" parent="."]
|
||||
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_mask = 2
|
||||
|
||||
@@ -45,21 +45,22 @@ shape = SubResource("CylinderShape3D_jbgmx")
|
||||
|
||||
[node name="Raycast" type="RayCast3D" parent="."]
|
||||
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)
|
||||
collision_mask = 3
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape3D" parent="."]
|
||||
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")
|
||||
|
||||
[node name="EnemyModelView" parent="." instance=ExtResource("3_wrps7")]
|
||||
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="."]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.27161, 0)
|
||||
collision_layer = 0
|
||||
collision_mask = 34
|
||||
|
||||
@@ -67,6 +68,7 @@ collision_mask = 34
|
||||
shape = SubResource("CylinderShape3D_eek1b")
|
||||
|
||||
[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_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")
|
||||
|
||||
[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")]
|
||||
unique_name_in_owner = true
|
||||
@@ -93,6 +96,7 @@ avoidance_enabled = true
|
||||
radius = 1.0
|
||||
|
||||
[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"]
|
||||
unique_name_in_owner = true
|
||||
|
||||
@@ -1187,7 +1187,7 @@ EnemyLoreInfo = SubResource("Resource_gby04")
|
||||
|
||||
[node name="Sprite3D" type="Sprite3D" parent="."]
|
||||
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
|
||||
shaded = true
|
||||
alpha_cut = 1
|
||||
@@ -1218,7 +1218,7 @@ offset = Vector2(400, 400)
|
||||
|
||||
[node name="Hitbox" type="Area3D" parent="."]
|
||||
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_mask = 64
|
||||
|
||||
@@ -1245,18 +1245,19 @@ libraries = {
|
||||
}
|
||||
|
||||
[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)
|
||||
billboard = 2
|
||||
sprite_frames = SubResource("SpriteFrames_suy1t")
|
||||
|
||||
[node name="WalkSFX" type="AudioStreamPlayer3D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.34076, 0)
|
||||
autoplay = true
|
||||
bus = &"SFX"
|
||||
|
||||
[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
|
||||
cast_shadow = 0
|
||||
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
@@ -34,73 +34,74 @@ public partial class Map : Node3D, IMap
|
||||
|
||||
public void OnResolved()
|
||||
{
|
||||
this.Provide();
|
||||
this.Provide();
|
||||
}
|
||||
|
||||
public void InitializeMapData()
|
||||
{
|
||||
CurrentFloorNumber.OnNext(-1);
|
||||
CurrentFloorNumber.OnNext(-1);
|
||||
}
|
||||
|
||||
public IDungeonRoom GetPlayersCurrentRoom()
|
||||
{
|
||||
var rooms = CurrentFloor.Rooms;
|
||||
var playersRoom = rooms.SingleOrDefault(x => x.IsPlayerInRoom);
|
||||
return playersRoom;
|
||||
var rooms = CurrentFloor.Rooms;
|
||||
var playersRoom = rooms.SingleOrDefault(x => x.IsPlayerInRoom);
|
||||
return playersRoom;
|
||||
}
|
||||
|
||||
public Transform3D GetPlayerSpawnPosition() => CurrentFloor.GetPlayerSpawnPoint();
|
||||
|
||||
public async Task LoadFloor()
|
||||
{
|
||||
var floor = MapOrder.GetChildren().OfType<FloorNode>().ElementAt(CurrentFloorNumber.Value + 1);
|
||||
var sceneToLoad = LayoutToScenePathConverter.Convert(floor);
|
||||
await LoadFloor(sceneToLoad);
|
||||
if (CurrentFloor is DungeonFloor dungeonFloor && floor is DungeonFloorNode dungeonFloorNode)
|
||||
dungeonFloor.SpawnEnemies(dungeonFloorNode);
|
||||
var floor = MapOrder.GetChildren().OfType<FloorNode>().ElementAt(CurrentFloorNumber.Value + 1);
|
||||
var sceneToLoad = LayoutToScenePathConverter.Convert(floor);
|
||||
await LoadFloor(sceneToLoad);
|
||||
}
|
||||
|
||||
public async Task LoadFloor(string sceneName)
|
||||
{
|
||||
AnimationPlayer.CallDeferred(AnimationPlayer.MethodName.Play, "fade_out");
|
||||
ClearMap();
|
||||
var newFloor = await LoadNewFloor(sceneName);
|
||||
AddChild(newFloor);
|
||||
InitializeFloor(newFloor);
|
||||
AnimationPlayer.CallDeferred(AnimationPlayer.MethodName.Play, ("fade_in"));
|
||||
AnimationPlayer.CallDeferred(AnimationPlayer.MethodName.Play, "fade_out");
|
||||
ClearMap();
|
||||
var newFloor = await LoadNewFloor(sceneName);
|
||||
AddChild(newFloor);
|
||||
InitializeFloor(newFloor);
|
||||
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()
|
||||
{
|
||||
AnimationPlayer.CallDeferred(AnimationPlayer.MethodName.Play, "fade_out");
|
||||
CurrentFloor?.CallDeferred(MethodName.QueueFree, []);
|
||||
SpawnPointCreated?.Invoke(new Transform3D(Basis.Identity, new Vector3(-999, -999, -999)));
|
||||
AnimationPlayer.CallDeferred(AnimationPlayer.MethodName.Play, "fade_out");
|
||||
CurrentFloor?.CallDeferred(MethodName.QueueFree, []);
|
||||
SpawnPointCreated?.Invoke(new Transform3D(Basis.Identity, new Vector3(-999, -999, -999)));
|
||||
}
|
||||
|
||||
private void InitializeFloor(Node newFloor)
|
||||
{
|
||||
CurrentFloor = (IDungeonFloor)newFloor;
|
||||
SetupDungeonFloor();
|
||||
CurrentFloor.FloorIsLoaded = true;
|
||||
CurrentFloorNumber.OnNext(CurrentFloorNumber.Value + 1);
|
||||
FloorLoaded?.Invoke();
|
||||
CurrentFloor = (IDungeonFloor)newFloor;
|
||||
SetupDungeonFloor();
|
||||
CurrentFloor.FloorIsLoaded = true;
|
||||
CurrentFloorNumber.OnNext(CurrentFloorNumber.Value + 1);
|
||||
FloorLoaded?.Invoke();
|
||||
}
|
||||
|
||||
private async Task<Node> LoadNewFloor(string sceneName)
|
||||
{
|
||||
var sceneLoader = new SceneLoader();
|
||||
AddChild(sceneLoader);
|
||||
sceneLoader.LoadSceneRequest(sceneName);
|
||||
await ToSignal(sceneLoader, SceneLoader.SignalName.SceneLoaded);
|
||||
var result = sceneLoader.LoadedScene;
|
||||
sceneLoader.QueueFree();
|
||||
return result;
|
||||
var sceneLoader = new SceneLoader();
|
||||
AddChild(sceneLoader);
|
||||
sceneLoader.LoadSceneRequest(sceneName);
|
||||
await ToSignal(sceneLoader, SceneLoader.SignalName.SceneLoaded);
|
||||
var result = sceneLoader.LoadedScene;
|
||||
sceneLoader.QueueFree();
|
||||
return result;
|
||||
}
|
||||
|
||||
private void SetupDungeonFloor()
|
||||
{
|
||||
CurrentFloor.InitializeDungeon();
|
||||
var transform = GetPlayerSpawnPosition();
|
||||
SpawnPointCreated?.Invoke(transform);
|
||||
CurrentFloor.InitializeDungeon();
|
||||
var transform = GetPlayerSpawnPosition();
|
||||
SpawnPointCreated?.Invoke(transform);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -76,6 +76,16 @@ libraries = {
|
||||
[node name="MapOrder" type="Node" parent="."]
|
||||
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"]
|
||||
script = ExtResource("3_v14r0")
|
||||
|
||||
@@ -83,12 +93,6 @@ script = ExtResource("3_v14r0")
|
||||
script = ExtResource("3_v14r0")
|
||||
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"]
|
||||
script = ExtResource("2_00xd7")
|
||||
FolderName = "Floor02"
|
||||
@@ -137,10 +141,6 @@ FolderName = "Floor09"
|
||||
FloorOdds = Array[float]([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"]
|
||||
script = ExtResource("2_00xd7")
|
||||
FolderName = "Floor11"
|
||||
|
||||
@@ -15,13 +15,13 @@ public partial class BossRoomA : Node3D, IBossRoom, IDungeonFloor
|
||||
|
||||
[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 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!;
|
||||
|
||||
@@ -35,45 +35,45 @@ public partial class BossRoomA : Node3D, IBossRoom, IDungeonFloor
|
||||
|
||||
public void OnReady()
|
||||
{
|
||||
ActivateTrap.BodyEntered += ActivateTrap_BodyEntered;
|
||||
_exit.AreaEntered += Exit_AreaEntered;
|
||||
OxFace.HealthComponent.HealthReachedZero += CheckForBossFightEnd;
|
||||
HorseFace.HealthComponent.HealthReachedZero += CheckForBossFightEnd;
|
||||
ActivateTrap.BodyEntered += ActivateTrap_BodyEntered;
|
||||
_exit.AreaEntered += Exit_AreaEntered;
|
||||
OxFace.HealthComponent.HealthReachedZero += CheckForBossFightEnd;
|
||||
//HorseFace.HealthComponent.HealthReachedZero += CheckForBossFightEnd;
|
||||
}
|
||||
|
||||
private void ActivateTrap_BodyEntered(Node3D body)
|
||||
{
|
||||
ActivateTrap.BodyEntered -= ActivateTrap_BodyEntered;
|
||||
StartBossFight();
|
||||
ActivateTrap.BodyEntered -= ActivateTrap_BodyEntered;
|
||||
StartBossFight();
|
||||
}
|
||||
|
||||
public void StartBossFight()
|
||||
{
|
||||
OxFaceStatue.Hide();
|
||||
HorseHeadStatue.Hide();
|
||||
OxFace.StartFight();
|
||||
HorseFace.StartFight();
|
||||
OxFaceStatue.Hide();
|
||||
//HorseHeadStatue.Hide();
|
||||
OxFace.StartFight();
|
||||
//HorseFace.StartFight();
|
||||
}
|
||||
|
||||
private void CheckForBossFightEnd()
|
||||
{
|
||||
if (OxFace.HealthComponent.CurrentHP.Value <= 0 && HorseFace.HealthComponent.CurrentHP.Value <= 0)
|
||||
OnBossFightEnded();
|
||||
if (OxFace.HealthComponent.CurrentHP.Value <= 0) //&& HorseFace.HealthComponent.CurrentHP.Value <= 0)
|
||||
OnBossFightEnded();
|
||||
}
|
||||
|
||||
public void OnBossFightEnded()
|
||||
{
|
||||
GateCollision.CallDeferred(MethodName.QueueFree);
|
||||
LOCKEDGATE.Hide();
|
||||
GateCollision.CallDeferred(MethodName.QueueFree);
|
||||
LOCKEDGATE.Hide();
|
||||
}
|
||||
|
||||
public void ExitReached()
|
||||
=> Game.FloorExitReached();
|
||||
=> Game.FloorExitReached();
|
||||
|
||||
private void Exit_AreaEntered(Area3D area)
|
||||
{
|
||||
if (area.GetOwner() is IPlayer)
|
||||
ExitReached();
|
||||
if (area.GetOwner() is IPlayer)
|
||||
ExitReached();
|
||||
}
|
||||
|
||||
public void InitializeDungeon()
|
||||
|
||||
@@ -13,21 +13,18 @@ public partial class CorridorRoom : Node3D
|
||||
[Dependency] IGame Game => this.DependOn<IGame>();
|
||||
|
||||
[Node] private Area3D _room { get; set; } = default!;
|
||||
[Node] private MeshInstance3D _minimap { get; set; } = default!;
|
||||
|
||||
private bool _playerDiscoveredRoom = false;
|
||||
|
||||
public void Setup()
|
||||
{
|
||||
if (_room != null)
|
||||
_room.BodyEntered += Room_BodyEntered;
|
||||
if (_room != null)
|
||||
_room.BodyEntered += Room_BodyEntered;
|
||||
}
|
||||
|
||||
private void Room_BodyEntered(Node3D body)
|
||||
{
|
||||
if (!Game.CurrentFloor.FloorIsLoaded)
|
||||
return;
|
||||
if (body is IPlayer)
|
||||
_minimap.Show();
|
||||
if (!Game.CurrentFloor.FloorIsLoaded)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,8 +12,6 @@ public abstract partial class DungeonRoom : Node3D, IDungeonRoom
|
||||
{
|
||||
public override void _Notification(int what) => this.Notify(what);
|
||||
|
||||
[Node] private MeshInstance3D _minimap { get; set; } = default!;
|
||||
|
||||
public bool IsPlayerInRoom => _isPlayerInRoom;
|
||||
|
||||
public bool PlayerDiscoveredRoom => _playerDiscoveredRoom;
|
||||
@@ -28,47 +26,46 @@ public abstract partial class DungeonRoom : Node3D, IDungeonRoom
|
||||
|
||||
public void Setup()
|
||||
{
|
||||
_enemiesInRoom = [];
|
||||
if (_room != null)
|
||||
{
|
||||
_room.BodyEntered += Room_BodyEntered;
|
||||
_room.BodyExited += Room_BodyExited;
|
||||
}
|
||||
_enemiesInRoom = [];
|
||||
if (_room != null)
|
||||
{
|
||||
_room.BodyEntered += Room_BodyEntered;
|
||||
_room.BodyExited += Room_BodyExited;
|
||||
}
|
||||
}
|
||||
|
||||
private void Room_BodyExited(Node3D body)
|
||||
{
|
||||
if (body is IEnemy enemy)
|
||||
_enemiesInRoom = _enemiesInRoom.Remove(enemy);
|
||||
if (body is IPlayer)
|
||||
_isPlayerInRoom = false;
|
||||
if (body is IEnemy enemy)
|
||||
_enemiesInRoom = _enemiesInRoom.Remove(enemy);
|
||||
if (body is IPlayer)
|
||||
_isPlayerInRoom = false;
|
||||
}
|
||||
private void Room_BodyEntered(Node3D body)
|
||||
{
|
||||
if (body is IEnemy enemy)
|
||||
_enemiesInRoom = _enemiesInRoom.Add(enemy);
|
||||
if (body is IPlayer)
|
||||
if (_playerDiscoveredRoom)
|
||||
_isPlayerInRoom = true;
|
||||
else
|
||||
OnPlayerDiscoveringRoom();
|
||||
if (body is IEnemy enemy)
|
||||
_enemiesInRoom = _enemiesInRoom.Add(enemy);
|
||||
if (body is IPlayer)
|
||||
if (_playerDiscoveredRoom)
|
||||
_isPlayerInRoom = true;
|
||||
else
|
||||
OnPlayerDiscoveringRoom();
|
||||
}
|
||||
|
||||
public ImmutableList<IEnemy> GetEnemiesInCurrentRoom()
|
||||
{
|
||||
return _enemiesInRoom;
|
||||
return _enemiesInRoom;
|
||||
}
|
||||
|
||||
private void OnPlayerDiscoveringRoom()
|
||||
{
|
||||
_isPlayerInRoom = true;
|
||||
_playerDiscoveredRoom = true;
|
||||
_minimap.Show();
|
||||
_isPlayerInRoom = true;
|
||||
_playerDiscoveredRoom = true;
|
||||
}
|
||||
|
||||
public void OnExitTree()
|
||||
{
|
||||
_room.BodyEntered -= Room_BodyEntered;
|
||||
_room.BodyExited -= Room_BodyExited;
|
||||
_room.BodyEntered -= Room_BodyEntered;
|
||||
_room.BodyExited -= Room_BodyExited;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,54 +19,57 @@ public partial class MonsterRoom : DungeonRoom
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
SpawnItems();
|
||||
SpawnItems();
|
||||
}
|
||||
|
||||
public void SpawnEnemies(Godot.Collections.Dictionary<EnemyType, float> enemyInfo)
|
||||
{
|
||||
if (enemyInfo == null || !enemyInfo.Any(x => x.Value > 0))
|
||||
return;
|
||||
if (enemyInfo == null || !enemyInfo.Any(x => x.Value > 0))
|
||||
return;
|
||||
|
||||
var rng = new RandomNumberGenerator();
|
||||
rng.Randomize();
|
||||
var enemySpawnPoints = EnemySpawnPoints.GetChildren();
|
||||
var numberOfEnemiesToSpawn = rng.RandiRange(1, enemySpawnPoints.Count);
|
||||
var rng = new RandomNumberGenerator();
|
||||
rng.Randomize();
|
||||
var enemySpawnPoints = EnemySpawnPoints.GetChildren();
|
||||
var numberOfEnemiesToSpawn = rng.RandiRange(1, enemySpawnPoints.Count);
|
||||
|
||||
foreach (var spawnPoint in enemySpawnPoints.Cast<Marker3D>())
|
||||
{
|
||||
if (numberOfEnemiesToSpawn <= 0)
|
||||
break;
|
||||
numberOfEnemiesToSpawn--;
|
||||
foreach (var spawnPoint in enemySpawnPoints.Cast<Marker3D>())
|
||||
{
|
||||
if (numberOfEnemiesToSpawn <= 0)
|
||||
break;
|
||||
numberOfEnemiesToSpawn--;
|
||||
|
||||
var index = rng.RandWeighted([.. enemyInfo.Values]);
|
||||
var selectedEnemy = enemyInfo.ElementAt((int)index);
|
||||
var instantiatedEnemy = EnemyTypeToEnemyConverter.Convert(selectedEnemy.Key);
|
||||
instantiatedEnemy.Position = new Vector3(spawnPoint.Position.X, 1.75f, spawnPoint.Position.Z);
|
||||
AddChild(instantiatedEnemy);
|
||||
}
|
||||
var index = rng.RandWeighted([.. enemyInfo.Values]);
|
||||
var selectedEnemy = enemyInfo.ElementAt((int)index);
|
||||
var instantiatedEnemy = EnemyTypeToEnemyConverter.Convert(selectedEnemy.Key);
|
||||
instantiatedEnemy.Position = new Vector3(spawnPoint.Position.X, 0f, spawnPoint.Position.Z);
|
||||
AddChild(instantiatedEnemy);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// RegularFlame.GetChildren();
|
||||
//
|
||||
private void SpawnItems()
|
||||
{
|
||||
if (ItemSpawnPoints == null)
|
||||
return;
|
||||
if (ItemSpawnPoints == null)
|
||||
return;
|
||||
|
||||
var itemSpawnPoints = ItemSpawnPoints.GetChildren();
|
||||
var rng = new RandomNumberGenerator();
|
||||
rng.Randomize();
|
||||
var numberOfItemsToSpawn = rng.RandiRange(1, itemSpawnPoints.Count);
|
||||
itemSpawnPoints.Shuffle();
|
||||
var database = ItemDatabase.Instance;
|
||||
foreach (var spawnPoint in itemSpawnPoints.Cast<Marker3D>())
|
||||
{
|
||||
if (numberOfItemsToSpawn <= 0)
|
||||
break;
|
||||
numberOfItemsToSpawn--;
|
||||
var itemSpawnPoints = ItemSpawnPoints.GetChildren();
|
||||
var rng = new RandomNumberGenerator();
|
||||
rng.Randomize();
|
||||
var numberOfItemsToSpawn = rng.RandiRange(1, itemSpawnPoints.Count);
|
||||
itemSpawnPoints.Shuffle();
|
||||
var database = ItemDatabase.Instance;
|
||||
foreach (var spawnPoint in itemSpawnPoints.Cast<Marker3D>())
|
||||
{
|
||||
if (numberOfItemsToSpawn <= 0)
|
||||
break;
|
||||
numberOfItemsToSpawn--;
|
||||
|
||||
var selectedItem = database.PickItem<InventoryItem>();
|
||||
var duplicated = selectedItem.Duplicate((int)DuplicateFlags.UseInstantiation) as Node3D;
|
||||
duplicated.Position = new Vector3(spawnPoint.Position.X, -1.5f, spawnPoint.Position.Z);
|
||||
AddChild(duplicated);
|
||||
}
|
||||
var selectedItem = database.PickItem<InventoryItem>();
|
||||
var duplicated = selectedItem.Duplicate((int)DuplicateFlags.UseInstantiation) as Node3D;
|
||||
duplicated.Position = new Vector3(spawnPoint.Position.X, 0, spawnPoint.Position.Z);
|
||||
AddChild(duplicated);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -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="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="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="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://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"]
|
||||
@@ -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)
|
||||
|
||||
[node name="Collision" type="Node3D" parent="."]
|
||||
visible = false
|
||||
|
||||
[node name="StaticBody3D2" type="StaticBody3D" parent="Collision"]
|
||||
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"]
|
||||
shape = SubResource("ConcavePolygonShape3D_1txpk")
|
||||
|
||||
[node name="GateCollision" type="Node3D" parent="Collision"]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="Doors" 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
|
||||
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"]
|
||||
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")]
|
||||
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)
|
||||
visible = false
|
||||
|
||||
[node name="OxFace" parent="Room/OxFace" instance=ExtResource("27_g6y6v")]
|
||||
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
|
||||
PrimaryAttackElementalType = null
|
||||
PrimaryAttackElementalDamageBonus = null
|
||||
InitialHP = null
|
||||
|
||||
[node name="Exit" type="Area3D" parent="Room"]
|
||||
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")
|
||||
|
||||
[node name="Minimap" type="Node3D" parent="."]
|
||||
visible = false
|
||||
|
||||
[node name="Boss Floor Environment" type="WorldEnvironment" parent="."]
|
||||
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)
|
||||
|
||||
[node name="NavigationRegion3D" type="NavigationRegion3D" parent="."]
|
||||
visible = false
|
||||
navigation_mesh = SubResource("NavigationMesh_eanap")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="NavigationRegion3D"]
|
||||
@@ -998,3 +984,6 @@ libraries = {
|
||||
&"": SubResource("AnimationLibrary_cm2l0")
|
||||
}
|
||||
autoplay = "Animation"
|
||||
|
||||
[node name="LOCKEDGATE" type="MeshInstance3D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
|
||||
@@ -10882,6 +10882,44 @@ billboard = 1
|
||||
sprite_frames = SubResource("SpriteFrames_cnruo")
|
||||
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"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -146.027, 31.1617, -329.541)
|
||||
visible = false
|
||||
|
||||
@@ -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="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://ba7ch5rr7qj1d" path="res://src/minimap/textures/Room Maps/mi_treeante.png" id="7_hy27a"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_q0uor"]
|
||||
size = Vector3(7.93076, 7.25739, 0.543945)
|
||||
@@ -76,14 +75,6 @@ size = Vector2(0.1, 0.1)
|
||||
subdivide_width = 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"]
|
||||
script = ExtResource("1_58osi")
|
||||
|
||||
@@ -215,16 +206,6 @@ local_coords = true
|
||||
process_material = SubResource("ParticleProcessMaterial_vqrrr")
|
||||
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="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.383, 6.70561, 8.71907)
|
||||
light_energy = 1.904
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using Chickensoft.AutoInject;
|
||||
using Chickensoft.Introspection;
|
||||
using Godot;
|
||||
using Zennysoft.Ma.Adapter;
|
||||
|
||||
namespace Zennysoft.Game.Ma;
|
||||
[Meta(typeof(IAutoNode))]
|
||||
@@ -10,15 +11,28 @@ public partial class Minimap : Control
|
||||
|
||||
[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!;
|
||||
|
||||
private bool _ready = false;
|
||||
|
||||
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)
|
||||
{
|
||||
LayerNumberText.Text = $"{obj:D2}";
|
||||
LayerNumberText.Text = $"{obj:D2}";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,8 +63,9 @@ handle_input_locally = false
|
||||
size = Vector2i(350, 300)
|
||||
render_target_update_mode = 4
|
||||
|
||||
[node name="Minimap Camera" 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)
|
||||
[node name="MinimapCamera" type="Camera3D" parent="CenterContainer/SubViewportContainer/SubViewport"]
|
||||
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
|
||||
environment = SubResource("Environment_yn75n")
|
||||
attributes = SubResource("CameraAttributesPractical_yn75n")
|
||||
|
||||
@@ -20,53 +20,58 @@ public partial class Npc : Node3D
|
||||
|
||||
public void OnReady()
|
||||
{
|
||||
SetPhysicsProcess(true);
|
||||
DialogueZone.BodyEntered += DialogueZone_BodyEntered;
|
||||
DialogueZone.BodyExited += DialogueZone_BodyExited;
|
||||
Hitbox.AreaEntered += Hitbox_AreaEntered;
|
||||
SetPhysicsProcess(true);
|
||||
DialogueZone.BodyEntered += DialogueZone_BodyEntered;
|
||||
DialogueZone.BodyExited += DialogueZone_BodyExited;
|
||||
Hitbox.AreaEntered += Hitbox_AreaEntered;
|
||||
|
||||
}
|
||||
|
||||
private void Hitbox_AreaEntered(Area3D area)
|
||||
{
|
||||
if (area.GetOwner() is ThrownItem thrownItem)
|
||||
{
|
||||
DialogueController.ShowDialogue(Dialogue, "get_item");
|
||||
thrownItem.QueueFree();
|
||||
}
|
||||
else
|
||||
{
|
||||
DialogueController.ShowDialogue(Dialogue, "hit");
|
||||
}
|
||||
if (area.GetOwner() is ThrownItem thrownItem)
|
||||
{
|
||||
DialogueController.ShowDialogue(Dialogue, "get_item");
|
||||
thrownItem.QueueFree();
|
||||
}
|
||||
else
|
||||
{
|
||||
DialogueController.ShowDialogue(Dialogue, "hit");
|
||||
}
|
||||
}
|
||||
|
||||
private void Hitbox_BodyEntered(Node body)
|
||||
{
|
||||
DialogueController.ShowDialogue(Dialogue, "hit");
|
||||
DialogueController.ShowDialogue(Dialogue, "hit");
|
||||
}
|
||||
|
||||
private void DialogueZone_BodyExited(Node3D body)
|
||||
{
|
||||
_isInDialogueZone = false;
|
||||
DialogueController.Interrupt();
|
||||
_isInDialogueZone = false;
|
||||
DialogueController.Interrupt();
|
||||
}
|
||||
|
||||
private void DialogueZone_BodyEntered(Node3D body)
|
||||
{
|
||||
_isInDialogueZone = true;
|
||||
_isInDialogueZone = true;
|
||||
}
|
||||
|
||||
public override void _UnhandledInput(InputEvent @event)
|
||||
{
|
||||
if (@event.IsActionPressed(GameInputs.Interact) && _isInDialogueZone)
|
||||
{
|
||||
if (_isIntroductionComplete)
|
||||
DialogueController.ShowDialogue(Dialogue, "general");
|
||||
else
|
||||
{
|
||||
DialogueController.ShowDialogue(Dialogue, "introduction");
|
||||
_isIntroductionComplete = true;
|
||||
}
|
||||
}
|
||||
if (@event.IsActionPressed(GameInputs.Interact) && _isInDialogueZone)
|
||||
{
|
||||
DialogueController.ShowDialogue(Dialogue, "general");
|
||||
}
|
||||
}
|
||||
|
||||
public partial class Gesthemii : Npc
|
||||
{
|
||||
public override void _UnhandledInput(InputEvent @event)
|
||||
{
|
||||
if (@event.IsActionPressed(GameInputs.Interact) && _isInDialogueZone)
|
||||
{
|
||||
DialogueController.ShowDialogue(Dialogue, "general");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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")]
|
||||
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"]
|
||||
|
||||
|
||||
3
Zennysoft.Game.Ma/stone.dialogue
Normal file
3
Zennysoft.Game.Ma/stone.dialogue
Normal file
@@ -0,0 +1,3 @@
|
||||
~ general
|
||||
- Here's my hint
|
||||
=> END
|
||||
16
Zennysoft.Game.Ma/stone.dialogue.import
Normal file
16
Zennysoft.Game.Ma/stone.dialogue.import
Normal 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
|
||||
Reference in New Issue
Block a user