Positional audio fix and BossRoomA spawn fix
This commit is contained in:
+321
-321
@@ -74,202 +74,202 @@ public partial class Game : Node3D, IGame
|
|||||||
|
|
||||||
public void Setup()
|
public void Setup()
|
||||||
{
|
{
|
||||||
_container = new SimpleInjector.Container();
|
_container = new SimpleInjector.Container();
|
||||||
Module.Bootstrap(_container);
|
Module.Bootstrap(_container);
|
||||||
|
|
||||||
GameRepo = _container.GetInstance<IGameRepo>();
|
GameRepo = _container.GetInstance<IGameRepo>();
|
||||||
GameState = _container.GetInstance<IGameState>();
|
GameState = _container.GetInstance<IGameState>();
|
||||||
GameState.Set(GameRepo);
|
GameState.Set(GameRepo);
|
||||||
GameState.Set(AppRepo);
|
GameState.Set(AppRepo);
|
||||||
GameState.Set(Player);
|
GameState.Set(Player);
|
||||||
GameState.Set(Map);
|
GameState.Set(Map);
|
||||||
GameState.Set(InGameUI);
|
GameState.Set(InGameUI);
|
||||||
Instantiator = new Instantiator(GetTree());
|
Instantiator = new Instantiator(GetTree());
|
||||||
RescuedItems = new RescuedItemDatabase();
|
RescuedItems = new RescuedItemDatabase();
|
||||||
|
|
||||||
GameChunk = new SaveChunk<GameData>(
|
GameChunk = new SaveChunk<GameData>(
|
||||||
(chunk) =>
|
(chunk) =>
|
||||||
{
|
{
|
||||||
var gameData = new GameData()
|
var gameData = new GameData()
|
||||||
{
|
{
|
||||||
|
|
||||||
PlayerData = new PlayerData()
|
PlayerData = new PlayerData()
|
||||||
{
|
{
|
||||||
PlayerStats = Player.Stats,
|
PlayerStats = Player.Stats,
|
||||||
Inventory = Player.Inventory
|
Inventory = Player.Inventory
|
||||||
},
|
},
|
||||||
MapData = new MapData()
|
MapData = new MapData()
|
||||||
{
|
{
|
||||||
FloorScenes = Map.FloorScenes
|
FloorScenes = Map.FloorScenes
|
||||||
},
|
},
|
||||||
RescuedItems = new RescuedItemDatabase()
|
RescuedItems = new RescuedItemDatabase()
|
||||||
{
|
{
|
||||||
Items = RescuedItems.Items
|
Items = RescuedItems.Items
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
return gameData;
|
return gameData;
|
||||||
},
|
},
|
||||||
onLoad:
|
onLoad:
|
||||||
(chunk, data) =>
|
(chunk, data) =>
|
||||||
{
|
{
|
||||||
RescuedItems = data.RescuedItems;
|
RescuedItems = data.RescuedItems;
|
||||||
chunk.LoadChunkSaveData(data.PlayerData);
|
chunk.LoadChunkSaveData(data.PlayerData);
|
||||||
chunk.LoadChunkSaveData(data.MapData);
|
chunk.LoadChunkSaveData(data.MapData);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnResolved()
|
public void OnResolved()
|
||||||
{
|
{
|
||||||
var saveFileManager = _container.GetInstance<IMaSaveFileManager<GameData>>();
|
var saveFileManager = _container.GetInstance<IMaSaveFileManager<GameData>>();
|
||||||
SaveFile = new SaveFile<GameData>(
|
SaveFile = new SaveFile<GameData>(
|
||||||
root: GameChunk,
|
root: GameChunk,
|
||||||
onSave: saveFileManager.Save,
|
onSave: saveFileManager.Save,
|
||||||
onLoad: async () =>
|
onLoad: async () =>
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var gameData = await saveFileManager.Load();
|
var gameData = await saveFileManager.Load();
|
||||||
return gameData;
|
return gameData;
|
||||||
}
|
}
|
||||||
catch (FileNotFoundException)
|
catch (FileNotFoundException)
|
||||||
{
|
{
|
||||||
GD.Print("No save file found.");
|
GD.Print("No save file found.");
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
GameBinding = GameState.Bind();
|
GameBinding = GameState.Bind();
|
||||||
GameBinding
|
GameBinding
|
||||||
.Handle((in GameState.Output.InitializeGame _) =>
|
.Handle((in GameState.Output.InitializeGame _) =>
|
||||||
{
|
{
|
||||||
InitializeGame();
|
InitializeGame();
|
||||||
Map.LoadMap();
|
Map.LoadMap();
|
||||||
GameRepo.Resume();
|
GameRepo.Resume();
|
||||||
InGameUI.Show();
|
InGameUI.Show();
|
||||||
InGameUI.PlayerInfoUI.Activate();
|
InGameUI.PlayerInfoUI.Activate();
|
||||||
Player.TeleportPlayer(Map.CurrentFloor.GetPlayerSpawnPoint());
|
Player.TeleportPlayer(Map.CurrentFloor.GetPlayerSpawnPoint());
|
||||||
Player.Activate();
|
Player.Activate();
|
||||||
Autoload.BgmPlayer.Play(BackgroundMusic.CrossingTheGate);
|
Autoload.BgmPlayer.Play(BackgroundMusic.CrossingTheGate);
|
||||||
})
|
})
|
||||||
.Handle((in GameState.Output.LoadGameFromFile _) =>
|
.Handle((in GameState.Output.LoadGameFromFile _) =>
|
||||||
{
|
{
|
||||||
LoadExistingGame();
|
LoadExistingGame();
|
||||||
})
|
})
|
||||||
.Handle((in GameState.Output.OpenPauseScreen _) =>
|
.Handle((in GameState.Output.OpenPauseScreen _) =>
|
||||||
{
|
{
|
||||||
GameRepo.Pause();
|
GameRepo.Pause();
|
||||||
PauseMenu.Show();
|
PauseMenu.Show();
|
||||||
PauseMenu.FadeIn();
|
PauseMenu.FadeIn();
|
||||||
Input.MouseMode = Input.MouseModeEnum.Visible;
|
Input.MouseMode = Input.MouseModeEnum.Visible;
|
||||||
PauseMenu.SetProcessUnhandledInput(true);
|
PauseMenu.SetProcessUnhandledInput(true);
|
||||||
})
|
})
|
||||||
.Handle((in GameState.Output.ClosePauseScreen _) =>
|
.Handle((in GameState.Output.ClosePauseScreen _) =>
|
||||||
{
|
{
|
||||||
PauseMenu.FadeOut();
|
PauseMenu.FadeOut();
|
||||||
Input.MouseMode = Input.MouseModeEnum.Visible;
|
Input.MouseMode = Input.MouseModeEnum.Visible;
|
||||||
PauseMenu.SetProcessUnhandledInput(false);
|
PauseMenu.SetProcessUnhandledInput(false);
|
||||||
GameRepo.Resume();
|
GameRepo.Resume();
|
||||||
})
|
})
|
||||||
.Handle((in GameState.Output.OpenInventoryMenu _) =>
|
.Handle((in GameState.Output.OpenInventoryMenu _) =>
|
||||||
{
|
{
|
||||||
InGameUI.InventoryMenu.RefreshInventoryScreen();
|
InGameUI.InventoryMenu.RefreshInventoryScreen();
|
||||||
InGameUI.InventoryMenu.Show();
|
InGameUI.InventoryMenu.Show();
|
||||||
InGameUI.InventoryMenu.SetProcessInput(true);
|
InGameUI.InventoryMenu.SetProcessInput(true);
|
||||||
})
|
})
|
||||||
.Handle((in GameState.Output.CloseInventoryMenu _) =>
|
.Handle((in GameState.Output.CloseInventoryMenu _) =>
|
||||||
{
|
{
|
||||||
InGameUI.InventoryMenu.Hide();
|
InGameUI.InventoryMenu.Hide();
|
||||||
InGameUI.InventoryMenu.SetProcessInput(false);
|
InGameUI.InventoryMenu.SetProcessInput(false);
|
||||||
})
|
})
|
||||||
.Handle((in GameState.Output.OpenDebugMenu _) =>
|
.Handle((in GameState.Output.OpenDebugMenu _) =>
|
||||||
{
|
{
|
||||||
InGameUI.DebugMenu.Show();
|
InGameUI.DebugMenu.Show();
|
||||||
InGameUI.PlayerInfoUI.Hide();
|
InGameUI.PlayerInfoUI.Hide();
|
||||||
GameRepo.Pause();
|
GameRepo.Pause();
|
||||||
})
|
})
|
||||||
.Handle((in GameState.Output.CloseDebugMenu _) =>
|
.Handle((in GameState.Output.CloseDebugMenu _) =>
|
||||||
{
|
{
|
||||||
InGameUI.DebugMenu.Hide();
|
InGameUI.DebugMenu.Hide();
|
||||||
InGameUI.PlayerInfoUI.Show();
|
InGameUI.PlayerInfoUI.Show();
|
||||||
GameRepo.Resume();
|
GameRepo.Resume();
|
||||||
})
|
})
|
||||||
.Handle((in GameState.Output.OpenTeleportScreen _) =>
|
.Handle((in GameState.Output.OpenTeleportScreen _) =>
|
||||||
{
|
{
|
||||||
InGameUI.UseTeleportPrompt.Show();
|
InGameUI.UseTeleportPrompt.Show();
|
||||||
InGameUI.UseTeleportPrompt.FadeIn();
|
InGameUI.UseTeleportPrompt.FadeIn();
|
||||||
})
|
})
|
||||||
.Handle((in GameState.Output.OpenFloorExitScreen _) =>
|
.Handle((in GameState.Output.OpenFloorExitScreen _) =>
|
||||||
{
|
{
|
||||||
InGameUI.UseTeleportPrompt.FadeOut();
|
InGameUI.UseTeleportPrompt.FadeOut();
|
||||||
FloorClearMenu.Show();
|
FloorClearMenu.Show();
|
||||||
FloorClearMenu.FadeIn();
|
FloorClearMenu.FadeIn();
|
||||||
})
|
})
|
||||||
.Handle((in GameState.Output.LoadNextFloor _) =>
|
.Handle((in GameState.Output.LoadNextFloor _) =>
|
||||||
{
|
{
|
||||||
FloorClearMenu.FadeOut();
|
FloorClearMenu.FadeOut();
|
||||||
Map.SpawnNextFloor();
|
Map.SpawnNextFloor();
|
||||||
if (Player.EquippedWeapon.Value.ItemTag == ItemTag.BreaksOnChange)
|
if (Player.EquippedWeapon.Value.ItemTag == ItemTag.BreaksOnChange)
|
||||||
{
|
{
|
||||||
var itemToDestroy = Player.EquippedWeapon.Value;
|
var itemToDestroy = Player.EquippedWeapon.Value;
|
||||||
Player.Unequip(itemToDestroy);
|
Player.Unequip(itemToDestroy);
|
||||||
Player.Inventory.Remove(itemToDestroy);
|
Player.Inventory.Remove(itemToDestroy);
|
||||||
}
|
}
|
||||||
if (Player.EquippedArmor.Value.ItemTag == ItemTag.BreaksOnChange)
|
if (Player.EquippedArmor.Value.ItemTag == ItemTag.BreaksOnChange)
|
||||||
{
|
{
|
||||||
var itemToDestroy = Player.EquippedArmor.Value;
|
var itemToDestroy = Player.EquippedArmor.Value;
|
||||||
Player.Unequip(itemToDestroy);
|
Player.Unequip(itemToDestroy);
|
||||||
Player.Inventory.Remove(itemToDestroy);
|
Player.Inventory.Remove(itemToDestroy);
|
||||||
}
|
}
|
||||||
if (Player.EquippedAccessory.Value.ItemTag == ItemTag.BreaksOnChange)
|
if (Player.EquippedAccessory.Value.ItemTag == ItemTag.BreaksOnChange)
|
||||||
{
|
{
|
||||||
var itemToDestroy = Player.EquippedAccessory.Value;
|
var itemToDestroy = Player.EquippedAccessory.Value;
|
||||||
Player.Unequip(itemToDestroy);
|
Player.Unequip(itemToDestroy);
|
||||||
Player.Inventory.Remove(itemToDestroy);
|
Player.Inventory.Remove(itemToDestroy);
|
||||||
}
|
}
|
||||||
FloorClearMenu.FadeOut();
|
FloorClearMenu.FadeOut();
|
||||||
})
|
})
|
||||||
.Handle((in GameState.Output.GameOver _) =>
|
.Handle((in GameState.Output.GameOver _) =>
|
||||||
{
|
{
|
||||||
GameRepo.Pause();
|
GameRepo.Pause();
|
||||||
DeathMenu.FadeIn();
|
DeathMenu.FadeIn();
|
||||||
});
|
});
|
||||||
|
|
||||||
GameState.Start();
|
GameState.Start();
|
||||||
this.Provide();
|
this.Provide();
|
||||||
InGameUI.UseTeleportPrompt.TeleportToNextFloor += UseTeleportPrompt_TeleportToNextFloor;
|
InGameUI.UseTeleportPrompt.TeleportToNextFloor += UseTeleportPrompt_TeleportToNextFloor;
|
||||||
InGameUI.UseTeleportPrompt.CloseTeleportPrompt += UseTeleportPrompt_CloseTeleportPrompt;
|
InGameUI.UseTeleportPrompt.CloseTeleportPrompt += UseTeleportPrompt_CloseTeleportPrompt;
|
||||||
FloorClearMenu.GoToNextFloor += FloorClearMenu_GoToNextFloor;
|
FloorClearMenu.GoToNextFloor += FloorClearMenu_GoToNextFloor;
|
||||||
FloorClearMenu.SaveAndExit += FloorClearMenu_SaveAndExit;
|
FloorClearMenu.SaveAndExit += FloorClearMenu_SaveAndExit;
|
||||||
FloorClearMenu.TransitionCompleted += FloorClearMenu_TransitionCompleted;
|
FloorClearMenu.TransitionCompleted += FloorClearMenu_TransitionCompleted;
|
||||||
|
|
||||||
GameRepo.RestorativePickedUp += GameEventDepot_RestorativePickedUp;
|
GameRepo.RestorativePickedUp += GameEventDepot_RestorativePickedUp;
|
||||||
|
|
||||||
DoubleEXPTimer.Timeout += DoubleEXPTimer_Timeout;
|
DoubleEXPTimer.Timeout += DoubleEXPTimer_Timeout;
|
||||||
|
|
||||||
MainMenu.NewGame += OnNewGame;
|
MainMenu.NewGame += OnNewGame;
|
||||||
MainMenu.LoadGame += OnLoadGame;
|
MainMenu.LoadGame += OnLoadGame;
|
||||||
MainMenu.Quit += OnQuit;
|
MainMenu.Quit += OnQuit;
|
||||||
|
|
||||||
DeathMenu.NewGame += OnContinueGame;
|
DeathMenu.NewGame += OnContinueGame;
|
||||||
DeathMenu.QuitGame += OnQuit;
|
DeathMenu.QuitGame += OnQuit;
|
||||||
|
|
||||||
GameRepo.IsPaused.Sync += IsPaused_Sync;
|
GameRepo.IsPaused.Sync += IsPaused_Sync;
|
||||||
|
|
||||||
_effectService = new EffectService(this, Player, Map);
|
_effectService = new EffectService(this, Player, Map);
|
||||||
|
|
||||||
MainMenu.Show();
|
MainMenu.Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void FloorClearMenu_SaveAndExit()
|
private void FloorClearMenu_SaveAndExit()
|
||||||
{
|
{
|
||||||
//SaveFile.Save();
|
//SaveFile.Save();
|
||||||
Player.Deactivate();
|
Player.Deactivate();
|
||||||
GameState.Input(new GameState.Input.ReturnToMainMenu());
|
GameState.Input(new GameState.Input.ReturnToMainMenu());
|
||||||
InGameUI.Hide();
|
InGameUI.Hide();
|
||||||
MainMenu.FadeIn();
|
MainMenu.FadeIn();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void FloorClearMenu_GoToNextFloor() => GameState.Input(new GameState.Input.LoadNextFloor());
|
private void FloorClearMenu_GoToNextFloor() => GameState.Input(new GameState.Input.LoadNextFloor());
|
||||||
@@ -277,126 +277,126 @@ public partial class Game : Node3D, IGame
|
|||||||
|
|
||||||
public void InitializeGame()
|
public void InitializeGame()
|
||||||
{
|
{
|
||||||
Map.InitializeMapData();
|
Map.InitializeMapData();
|
||||||
Player.InitializePlayerState();
|
Player.InitializePlayerState();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void FloorExitReached()
|
public void FloorExitReached()
|
||||||
{
|
{
|
||||||
GameState.Input(new GameState.Input.FloorExitEntered());
|
GameState.Input(new GameState.Input.FloorExitEntered());
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task UseItem(InventoryItem item)
|
public async Task UseItem(InventoryItem item)
|
||||||
{
|
{
|
||||||
if (item.ItemTag == ItemTag.MysteryItem)
|
if (item.ItemTag == ItemTag.MysteryItem)
|
||||||
item = RerollItem(item);
|
item = RerollItem(item);
|
||||||
|
|
||||||
switch (item)
|
switch (item)
|
||||||
{
|
{
|
||||||
case ConsumableItem consumableItem:
|
case ConsumableItem consumableItem:
|
||||||
EnactConsumableItemEffects(consumableItem);
|
EnactConsumableItemEffects(consumableItem);
|
||||||
break;
|
break;
|
||||||
case EffectItem effectItem:
|
case EffectItem effectItem:
|
||||||
EnactEffectItemEffects(effectItem);
|
EnactEffectItemEffects(effectItem);
|
||||||
break;
|
break;
|
||||||
case ThrowableItem throwableItem:
|
case ThrowableItem throwableItem:
|
||||||
EnactThrowableItemEffects(throwableItem);
|
EnactThrowableItemEffects(throwableItem);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
await ToSignal(GetTree().CreateTimer(0.3f), "timeout");
|
await ToSignal(GetTree().CreateTimer(0.3f), "timeout");
|
||||||
|
|
||||||
RemoveItemOrSubtractFromItemCount(item);
|
RemoveItemOrSubtractFromItemCount(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DropItem(InventoryItem item)
|
public void DropItem(InventoryItem item)
|
||||||
{
|
{
|
||||||
var droppedScene = GD.Load<PackedScene>("res://src/items/dropped/DroppedItem.tscn");
|
var droppedScene = GD.Load<PackedScene>("res://src/items/dropped/DroppedItem.tscn");
|
||||||
var dropped = droppedScene.Instantiate<DroppedItem>();
|
var dropped = droppedScene.Instantiate<DroppedItem>();
|
||||||
dropped.Item = item;
|
dropped.Item = item;
|
||||||
AddChild(dropped);
|
AddChild(dropped);
|
||||||
dropped.Drop();
|
dropped.Drop();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ThrowItem(InventoryItem item)
|
public void ThrowItem(InventoryItem item)
|
||||||
{
|
{
|
||||||
var thrownScene = GD.Load<PackedScene>("res://src/items/thrown/ThrownItem.tscn");
|
var thrownScene = GD.Load<PackedScene>("res://src/items/thrown/ThrownItem.tscn");
|
||||||
var thrown = thrownScene.Instantiate<ThrownItem>();
|
var thrown = thrownScene.Instantiate<ThrownItem>();
|
||||||
thrown.ItemThatIsThrown = item;
|
thrown.ItemThatIsThrown = item;
|
||||||
AddChild(thrown);
|
AddChild(thrown);
|
||||||
thrown.Position += new Vector3(0, 1.5f, 0);
|
thrown.Position += new Vector3(0, 1.5f, 0);
|
||||||
thrown.Throw(_effectService);
|
thrown.Throw(_effectService);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IDungeonFloor CurrentFloor => Map.CurrentFloor;
|
public IDungeonFloor CurrentFloor => Map.CurrentFloor;
|
||||||
|
|
||||||
public void EnemyDefeated(Vector3 defeatedLocation, EnemyStatResource resource)
|
public void EnemyDefeated(Vector3 defeatedLocation, EnemyStatResource resource)
|
||||||
{
|
{
|
||||||
Player.GainExp(resource.ExpFromDefeat * GameRepo.ExpRate);
|
Player.GainExp(resource.ExpFromDefeat * GameRepo.ExpRate);
|
||||||
DropRestorative(defeatedLocation);
|
DropRestorative(defeatedLocation);
|
||||||
}
|
}
|
||||||
|
|
||||||
public InventoryItem RerollItem(InventoryItem itemToReroll, bool insertIntoInventory = true)
|
public InventoryItem RerollItem(InventoryItem itemToReroll, bool insertIntoInventory = true)
|
||||||
{
|
{
|
||||||
var itemDb = new ItemDatabase();
|
var itemDb = new ItemDatabase();
|
||||||
|
|
||||||
var currentIndex = Player.Inventory.Items.IndexOf(itemToReroll);
|
var currentIndex = Player.Inventory.Items.IndexOf(itemToReroll);
|
||||||
|
|
||||||
if (insertIntoInventory)
|
if (insertIntoInventory)
|
||||||
Player.Inventory.Remove(itemToReroll);
|
Player.Inventory.Remove(itemToReroll);
|
||||||
|
|
||||||
InventoryItem rolledItem = null;
|
InventoryItem rolledItem = null;
|
||||||
|
|
||||||
if (itemToReroll is Weapon weapon)
|
if (itemToReroll is Weapon weapon)
|
||||||
rolledItem = itemDb.PickItem(weapon);
|
rolledItem = itemDb.PickItem(weapon);
|
||||||
if (itemToReroll is Armor armor)
|
if (itemToReroll is Armor armor)
|
||||||
rolledItem = itemDb.PickItem(armor);
|
rolledItem = itemDb.PickItem(armor);
|
||||||
if (itemToReroll is Accessory accessory)
|
if (itemToReroll is Accessory accessory)
|
||||||
rolledItem = itemDb.PickItem(accessory);
|
rolledItem = itemDb.PickItem(accessory);
|
||||||
if (itemToReroll is ThrowableItem throwableItem)
|
if (itemToReroll is ThrowableItem throwableItem)
|
||||||
rolledItem = itemDb.PickItem(throwableItem);
|
rolledItem = itemDb.PickItem(throwableItem);
|
||||||
if (itemToReroll is EffectItem effectItem)
|
if (itemToReroll is EffectItem effectItem)
|
||||||
rolledItem = itemDb.PickItem(effectItem);
|
rolledItem = itemDb.PickItem(effectItem);
|
||||||
if (itemToReroll is ConsumableItem consumableItem)
|
if (itemToReroll is ConsumableItem consumableItem)
|
||||||
rolledItem = itemDb.PickItem(consumableItem);
|
rolledItem = itemDb.PickItem(consumableItem);
|
||||||
|
|
||||||
if (insertIntoInventory)
|
if (insertIntoInventory)
|
||||||
Player.Inventory.TryInsert(rolledItem, currentIndex);
|
Player.Inventory.TryInsert(rolledItem, currentIndex);
|
||||||
|
|
||||||
return rolledItem;
|
return rolledItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void GameOver()
|
public void GameOver()
|
||||||
{
|
{
|
||||||
GameState.Input(new GameState.Input.GameOver());
|
GameState.Input(new GameState.Input.GameOver());
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void _Input(InputEvent @event)
|
public override void _Input(InputEvent @event)
|
||||||
{
|
{
|
||||||
if (@event.IsActionPressed(GameInputs.Debug))
|
if (@event.IsActionPressed(GameInputs.Debug))
|
||||||
GameState.Input(new GameState.Input.DebugButtonPressed());
|
GameState.Input(new GameState.Input.DebugButtonPressed());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DropRestorative(Vector3 vector)
|
private void DropRestorative(Vector3 vector)
|
||||||
{
|
{
|
||||||
var restorativeScene = GD.Load<PackedScene>("res://src/items/restorative/Restorative.tscn");
|
var restorativeScene = GD.Load<PackedScene>("res://src/items/restorative/Restorative.tscn");
|
||||||
var restorative = restorativeScene.Instantiate<Restorative>();
|
var restorative = restorativeScene.Instantiate<Restorative>();
|
||||||
AddChild(restorative);
|
AddChild(restorative);
|
||||||
restorative.GlobalPosition = vector;
|
restorative.GlobalPosition = vector;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UseTeleportPrompt_CloseTeleportPrompt()
|
private void UseTeleportPrompt_CloseTeleportPrompt()
|
||||||
{
|
{
|
||||||
GameState.Input(new GameState.Input.CloseTeleport());
|
GameState.Input(new GameState.Input.CloseTeleport());
|
||||||
InGameUI.UseTeleportPrompt.FadeOut();
|
InGameUI.UseTeleportPrompt.FadeOut();
|
||||||
GameRepo.Resume();
|
GameRepo.Resume();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UseTeleportPrompt_TeleportToNextFloor() => GameState.Input(new GameState.Input.UseTeleport());
|
private void UseTeleportPrompt_TeleportToNextFloor() => GameState.Input(new GameState.Input.UseTeleport());
|
||||||
|
|
||||||
private void FloorClearMenu_TransitionCompleted()
|
private void FloorClearMenu_TransitionCompleted()
|
||||||
{
|
{
|
||||||
GameRepo.Resume();
|
GameRepo.Resume();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void GameEventDepot_RestorativePickedUp(IHealthPack obj) => Player.Stats.SetCurrentVT(Player.Stats.CurrentVT.Value + (int)obj.RestoreAmount);
|
private void GameEventDepot_RestorativePickedUp(IHealthPack obj) => Player.Stats.SetCurrentVT(Player.Stats.CurrentVT.Value + (int)obj.RestoreAmount);
|
||||||
@@ -409,118 +409,118 @@ public partial class Game : Node3D, IGame
|
|||||||
|
|
||||||
private void EnactConsumableItemEffects(ConsumableItem consumableItem)
|
private void EnactConsumableItemEffects(ConsumableItem consumableItem)
|
||||||
{
|
{
|
||||||
if (Player.Stats.CurrentHP == Player.Stats.MaximumHP && consumableItem.RaiseHPAmount > 0)
|
if (Player.Stats.CurrentHP == Player.Stats.MaximumHP && consumableItem.RaiseHPAmount > 0)
|
||||||
Player.RaiseHP(consumableItem.RaiseHPAmount);
|
Player.RaiseHP(consumableItem.RaiseHPAmount);
|
||||||
if (Player.Stats.CurrentVT == Player.Stats.MaximumVT && consumableItem.RaiseVTAmount > 0)
|
if (Player.Stats.CurrentVT == Player.Stats.MaximumVT && consumableItem.RaiseVTAmount > 0)
|
||||||
Player.RaiseVT(consumableItem.RaiseVTAmount);
|
Player.RaiseVT(consumableItem.RaiseVTAmount);
|
||||||
|
|
||||||
if (consumableItem.HealHPAmount > 0 && Player.Stats.CurrentHP != Player.Stats.MaximumHP)
|
if (consumableItem.HealHPAmount > 0 && Player.Stats.CurrentHP != Player.Stats.MaximumHP)
|
||||||
Player.HealHP(consumableItem.HealHPAmount);
|
Player.HealHP(consumableItem.HealHPAmount);
|
||||||
if (consumableItem.HealVTAmount > 0 && Player.Stats.CurrentVT != Player.Stats.MaximumVT)
|
if (consumableItem.HealVTAmount > 0 && Player.Stats.CurrentVT != Player.Stats.MaximumVT)
|
||||||
Player.HealVT(consumableItem.HealVTAmount);
|
Player.HealVT(consumableItem.HealVTAmount);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void EnactEffectItemEffects(EffectItem effectItem)
|
private void EnactEffectItemEffects(EffectItem effectItem)
|
||||||
{
|
{
|
||||||
switch (effectItem.UsableItemTag)
|
switch (effectItem.UsableItemTag)
|
||||||
{
|
{
|
||||||
case UsableItemTag.TeleportAllEnemiesToRoom:
|
case UsableItemTag.TeleportAllEnemiesToRoom:
|
||||||
_effectService.TeleportEnemiesToCurrentRoom();
|
_effectService.TeleportEnemiesToCurrentRoom();
|
||||||
GameRepo.CloseInventory();
|
GameRepo.CloseInventory();
|
||||||
break;
|
break;
|
||||||
case UsableItemTag.KillHalfEnemiesInRoom:
|
case UsableItemTag.KillHalfEnemiesInRoom:
|
||||||
_effectService.KillHalfEnemiesInRoom();
|
_effectService.KillHalfEnemiesInRoom();
|
||||||
GameRepo.CloseInventory();
|
GameRepo.CloseInventory();
|
||||||
break;
|
break;
|
||||||
case UsableItemTag.TurnAllEnemiesIntoHealingItem:
|
case UsableItemTag.TurnAllEnemiesIntoHealingItem:
|
||||||
_effectService.TurnAllEnemiesInRoomIntoHealingItem();
|
_effectService.TurnAllEnemiesInRoomIntoHealingItem();
|
||||||
GameRepo.CloseInventory();
|
GameRepo.CloseInventory();
|
||||||
break;
|
break;
|
||||||
case UsableItemTag.HealsAllInRoomToMaxHP:
|
case UsableItemTag.HealsAllInRoomToMaxHP:
|
||||||
_effectService.HealAllEnemiesAndPlayerInRoomToFull();
|
_effectService.HealAllEnemiesAndPlayerInRoomToFull();
|
||||||
GameRepo.CloseInventory();
|
GameRepo.CloseInventory();
|
||||||
break;
|
break;
|
||||||
case UsableItemTag.AbsorbHPFromAllEnemiesInRoom:
|
case UsableItemTag.AbsorbHPFromAllEnemiesInRoom:
|
||||||
_effectService.AbsorbHPFromAllEnemiesInRoom();
|
_effectService.AbsorbHPFromAllEnemiesInRoom();
|
||||||
GameRepo.CloseInventory();
|
GameRepo.CloseInventory();
|
||||||
break;
|
break;
|
||||||
case UsableItemTag.DealElementalDamageToAllEnemiesInRoom:
|
case UsableItemTag.DealElementalDamageToAllEnemiesInRoom:
|
||||||
_effectService.DealElementalDamageToAllEnemiesInRoom(effectItem.Stats.ElementalDamageType);
|
_effectService.DealElementalDamageToAllEnemiesInRoom(effectItem.Stats.ElementalDamageType);
|
||||||
GameRepo.CloseInventory();
|
GameRepo.CloseInventory();
|
||||||
break;
|
break;
|
||||||
case UsableItemTag.SwapHPAndVT:
|
case UsableItemTag.SwapHPAndVT:
|
||||||
_effectService.SwapHPandVT();
|
_effectService.SwapHPandVT();
|
||||||
GameRepo.CloseInventory();
|
GameRepo.CloseInventory();
|
||||||
break;
|
break;
|
||||||
case UsableItemTag.RaiseCurrentWeaponAttack:
|
case UsableItemTag.RaiseCurrentWeaponAttack:
|
||||||
_effectService.RaiseCurrentWeaponAttack();
|
_effectService.RaiseCurrentWeaponAttack();
|
||||||
break;
|
break;
|
||||||
case UsableItemTag.RaiseCurrentDefenseArmor:
|
case UsableItemTag.RaiseCurrentDefenseArmor:
|
||||||
_effectService.RaiseCurrentArmorDefense();
|
_effectService.RaiseCurrentArmorDefense();
|
||||||
break;
|
break;
|
||||||
case UsableItemTag.RaiseLevel:
|
case UsableItemTag.RaiseLevel:
|
||||||
_effectService.RaiseLevel();
|
_effectService.RaiseLevel();
|
||||||
break;
|
break;
|
||||||
case UsableItemTag.RandomEffect:
|
case UsableItemTag.RandomEffect:
|
||||||
_effectService.RandomEffect(effectItem);
|
_effectService.RandomEffect(effectItem);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void EnactThrowableItemEffects(ThrowableItem throwableItem)
|
private void EnactThrowableItemEffects(ThrowableItem throwableItem)
|
||||||
{
|
{
|
||||||
switch (throwableItem.ThrowableItemTag)
|
switch (throwableItem.ThrowableItemTag)
|
||||||
{
|
{
|
||||||
case ThrowableItemTag.DoubleExp:
|
case ThrowableItemTag.DoubleExp:
|
||||||
GameRepo.StartDoubleEXP(TimeSpan.FromSeconds(30));
|
GameRepo.StartDoubleEXP(TimeSpan.FromSeconds(30));
|
||||||
GameRepo.CloseInventory();
|
GameRepo.CloseInventory();
|
||||||
break;
|
break;
|
||||||
case ThrowableItemTag.TeleportToRandomLocation:
|
case ThrowableItemTag.TeleportToRandomLocation:
|
||||||
_effectService.TeleportToRandomRoom(Player);
|
_effectService.TeleportToRandomRoom(Player);
|
||||||
GameRepo.CloseInventory();
|
GameRepo.CloseInventory();
|
||||||
break;
|
break;
|
||||||
case ThrowableItemTag.CanChangeAffinity:
|
case ThrowableItemTag.CanChangeAffinity:
|
||||||
_effectService.ChangeAffinity(throwableItem);
|
_effectService.ChangeAffinity(throwableItem);
|
||||||
break;
|
break;
|
||||||
case ThrowableItemTag.WarpToExitIfFound:
|
case ThrowableItemTag.WarpToExitIfFound:
|
||||||
_effectService.WarpToExit(Player);
|
_effectService.WarpToExit(Player);
|
||||||
GameRepo.CloseInventory();
|
GameRepo.CloseInventory();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (throwableItem.HealHPAmount > 0)
|
if (throwableItem.HealHPAmount > 0)
|
||||||
Player.HealHP(throwableItem.HealHPAmount);
|
Player.HealHP(throwableItem.HealHPAmount);
|
||||||
if (throwableItem.HealVTAmount > 0)
|
if (throwableItem.HealVTAmount > 0)
|
||||||
Player.HealVT(throwableItem.HealVTAmount);
|
Player.HealVT(throwableItem.HealVTAmount);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RemoveItemOrSubtractFromItemCount(InventoryItem item)
|
private void RemoveItemOrSubtractFromItemCount(InventoryItem item)
|
||||||
{
|
{
|
||||||
if (item is IStackable stackableItem && stackableItem.Count > 1)
|
if (item is IStackable stackableItem && stackableItem.Count > 1)
|
||||||
stackableItem.SetCount(stackableItem.Count - 1);
|
stackableItem.SetCount(stackableItem.Count - 1);
|
||||||
else
|
else
|
||||||
GameRepo.RemoveItemFromInventory(item);
|
GameRepo.RemoveItemFromInventory(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnNewGame()
|
private void OnNewGame()
|
||||||
{
|
{
|
||||||
GameState.Input(new GameState.Input.NewGame());
|
GameState.Input(new GameState.Input.NewGame());
|
||||||
MainMenu.Hide();
|
MainMenu.Hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnContinueGame()
|
private void OnContinueGame()
|
||||||
{
|
{
|
||||||
GameState.Input(new GameState.Input.ContinueGame());
|
GameState.Input(new GameState.Input.ContinueGame());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnLoadGame()
|
private void OnLoadGame()
|
||||||
{
|
{
|
||||||
GameState.Input(new GameState.Input.LoadGame());
|
GameState.Input(new GameState.Input.LoadGame());
|
||||||
MainMenu.Hide();
|
MainMenu.Hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnQuit()
|
private void OnQuit()
|
||||||
{
|
{
|
||||||
MainMenu.Hide();
|
MainMenu.Hide();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -106,6 +106,7 @@ stretch = true
|
|||||||
|
|
||||||
[node name="SubViewport" type="SubViewport" parent="SubViewportContainer"]
|
[node name="SubViewport" type="SubViewport" parent="SubViewportContainer"]
|
||||||
handle_input_locally = false
|
handle_input_locally = false
|
||||||
|
audio_listener_enable_3d = true
|
||||||
size = Vector2i(1440, 1080)
|
size = Vector2i(1440, 1080)
|
||||||
render_target_update_mode = 4
|
render_target_update_mode = 4
|
||||||
|
|
||||||
|
|||||||
@@ -4885,22 +4885,22 @@ 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 Statue" parent="Room" instance=ExtResource("24_r1rk5")]
|
[node name="HorseHeadStatue" parent="Room" instance=ExtResource("24_r1rk5")]
|
||||||
unique_name_in_owner = true
|
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.0139)
|
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -102.157, -2.30863, 13.0139)
|
||||||
|
|
||||||
[node name="Horse Head Active" parent="Room" instance=ExtResource("25_a482y")]
|
[node name="HorseFace" parent="Room" instance=ExtResource("25_a482y")]
|
||||||
unique_name_in_owner = true
|
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.0139)
|
transform = Transform3D(-6.55671e-09, 0, -0.15, 0, 0.15, 0, 0.15, 0, -6.55671e-09, -102.157, -0.510939, 13.0139)
|
||||||
visible = false
|
visible = false
|
||||||
PrimaryAttackElementalType = 0
|
PrimaryAttackElementalType = 0
|
||||||
PrimaryAttackElementalDamageBonus = 1.0
|
PrimaryAttackElementalDamageBonus = 1.0
|
||||||
|
|
||||||
[node name="Ox Face Statue" parent="Room" instance=ExtResource("26_futcf")]
|
[node name="OxFaceStatue" parent="Room" instance=ExtResource("26_futcf")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -101.555, -2.30863, 21.5833)
|
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -101.555, -2.30863, 21.5833)
|
||||||
|
|
||||||
[node name="OxFace Active" parent="Room" instance=ExtResource("27_g6y6v")]
|
[node name="OxFace" parent="Room" instance=ExtResource("27_g6y6v")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(-6.55671e-09, 0, -0.15, 0, 0.15, 0, 0.15, 0, -6.55671e-09, -101.703, -0.479859, 22.0955)
|
transform = Transform3D(-6.55671e-09, 0, -0.15, 0, 0.15, 0, 0.15, 0, -6.55671e-09, -101.703, -0.479859, 22.0955)
|
||||||
visible = false
|
visible = false
|
||||||
|
|||||||
@@ -8119,6 +8119,7 @@ root_node = NodePath("Overworld_CLOUD_RINGS_INNER")
|
|||||||
libraries = {
|
libraries = {
|
||||||
&"": SubResource("AnimationLibrary_q2pi3")
|
&"": SubResource("AnimationLibrary_q2pi3")
|
||||||
}
|
}
|
||||||
|
autoplay = "Cloud Rotation 1"
|
||||||
|
|
||||||
[node name="Overworld_CLOUD_RINGS_INNER" type="Node3D" parent="Model/AnimationPlayer"]
|
[node name="Overworld_CLOUD_RINGS_INNER" type="Node3D" parent="Model/AnimationPlayer"]
|
||||||
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 485.326, 0)
|
transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, 0, 485.326, 0)
|
||||||
@@ -8608,6 +8609,7 @@ volume_db = 5.275
|
|||||||
unit_size = 10.55
|
unit_size = 10.55
|
||||||
max_db = -3.264
|
max_db = -3.264
|
||||||
autoplay = true
|
autoplay = true
|
||||||
|
stream_paused = true
|
||||||
max_distance = 100.0
|
max_distance = 100.0
|
||||||
bus = &"AMBIENT"
|
bus = &"AMBIENT"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user