Beeg checkin

This commit is contained in:
2023-09-06 03:49:16 -07:00
parent f180d4cacd
commit f8cca640a6
320 changed files with 2751 additions and 26682 deletions

0
GameLogic/.gitkeep Normal file
View File

174
GameLogic/GameManager.cs Normal file
View File

@@ -0,0 +1,174 @@
using Godot;
using Godot.Collections;
using System.Collections.Generic;
using System.Linq;
public partial class GameManager : Node
{
[Signal]
public delegate void OnGameOverEventHandler();
[Signal]
public delegate void ReselectCharacterEventHandler(PlayerManager player);
[Export]
private Array<PackedScene> PlayerScenes;
public Array<Controls> P1CharactersOut = new Array<Controls>();
public Array<Controls> P2CharactersOut = new Array<Controls>();
public IEnumerable<PlayerManager> Players = new List<PlayerManager>();
private int _levelIndex;
public override void _Ready()
{
var main = GetTree().Root.GetNode<Main>("/root/Main");
for (var i = 0; i < main.NumberOfPlayers; i++)
{
var player = PlayerScenes[i].Instantiate();
Players = Players.Append((PlayerManager)player);
GetTree().Root.AddChild(player);
}
}
public void OnAllEnemiesDefeated()
{
GD.Print("All enemies defeated");
OnLevelClear();
}
public void OnHandleCharacterSelectUI(PlayerManager player)
{
EmitSignal(SignalName.ReselectCharacter, player);
}
public void SetToNextCharacter(PlayerManager player)
{
player._characterIndex = (++player._characterIndex) % player.CharactersLeftOnStage.Count();
GD.Print(player.CharactersLeftOnStage.ElementAt(player._characterIndex));
}
public void SetToPreviousCharacter(PlayerManager player)
{
player._characterIndex = player._characterIndex == 0 ? player.CharactersLeftOnStage.Count() - 1 : --player._characterIndex;
}
public void ResetPlayerPosition(PlayerManager player)
{
player.SpawnPoint.SetPlayerPosition(player.SelectedCharacter);
GD.Print(player.CharactersLeftOnStage.ElementAt(player._characterIndex));
}
public void OnCharacterSelected(PlayerManager player)
{
var sfxPlayer = GetTree().Root.GetNode<AudioStreamPlayer>("Main/SFXPlayer");
var audioStream = ResourceLoader.Load<AudioStream>("Audio/SFX/Select.wav");
sfxPlayer.Stream = audioStream;
sfxPlayer.Play();
GD.Print("Instancing...");
var names = player.CharactersLeftOnStage.Select(x => x.Name).ToArray();
GD.Print(names);
if (player.CharactersLeftOnStage.Any())
{
var selectedCharacter = player.CharactersLeftOnStage[player._characterIndex];
player.SelectedCharacter = selectedCharacter;
GetTree().Root.AddChild(player.SelectedCharacter);
player.SpawnPoint.SetPlayerPosition(player.SelectedCharacter);
}
}
public void RemoveCharacter(P1Controls character)
{
Players.ElementAt(0).CharactersLeftOnStage.Remove(character);
GetTree().Root.RemoveChild(character);
GD.Print(Players.ElementAt(0).CharactersLeftOnStage.Select(x => x.Name).ToArray());
Players.ElementAt(0)._characterIndex = 0;
if (Players.ElementAt(0).CharactersLeftOnStage.Any())
EmitSignal(SignalName.ReselectCharacter, Players.ElementAt(0));
if (!P1CharactersOut.Any() && !Players.ElementAt(0).CharactersLeftOnStage.Any())
SetGameOver(Players.ElementAt(0), true);
if (Players.Count() == 2 && !P2CharactersOut.Any() && !Players.ElementAt(1).CharactersLeftOnStage.Any())
SetGameOver(Players.ElementAt(1), true);
}
public void RemoveCharacter(P2Controls character)
{
Players.ElementAt(1).CharactersLeftOnStage.Remove(character);
GetTree().Root.RemoveChild(character);
GD.Print(Players.ElementAt(1).CharactersLeftOnStage.Select(x => x.Name).ToArray());
Players.ElementAt(1)._characterIndex = 0;
if (Players.ElementAt(1).CharactersLeftOnStage.Any())
EmitSignal(SignalName.ReselectCharacter, Players.ElementAt(1));
}
public void RemoveCharacterAndAddToExit(P1Controls character)
{
P1CharactersOut.Add(character);
Players.ElementAt(0).CharactersLeftOnStage.Remove(character);
GetTree().Root.RemoveChild(character);
GD.Print(Players.ElementAt(0).CharactersLeftOnStage.Select(x => x.Name).ToArray());
Players.ElementAt(0)._characterIndex = 0;
if (Players.ElementAt(0).CharactersLeftOnStage.Any())
EmitSignal(SignalName.ReselectCharacter, Players.ElementAt(0));
}
public void RemoveCharacterAndAddToExit(P2Controls character)
{
P2CharactersOut.Add(character);
Players.ElementAt(1).CharactersLeftOnStage.Remove(character);
GetTree().Root.RemoveChild(character);
Players.ElementAt(1)._characterIndex = 0;
if (Players.ElementAt(1).CharactersLeftOnStage.Any())
EmitSignal(SignalName.ReselectCharacter, Players.ElementAt(1));
}
public void SetGameOver(PlayerManager player, bool isGameOver)
{
player.GameOver = isGameOver;
if (isGameOver)
EmitSignal(SignalName.OnGameOver);
GD.Print($"Game over for {player.Name}");
}
public void OnLevelClear()
{
Players.ElementAt(0).CharactersLeftOnStage.AddRange(P1CharactersOut);
if (Players.Count() == 2)
Players.ElementAt(1).CharactersLeftOnStage.AddRange(P2CharactersOut);
P1CharactersOut.Clear();
if (Players.Count() == 2)
P2CharactersOut.Clear();
Players.ElementAt(0)._characterIndex = 0;
if (Players.Count() == 2)
Players.ElementAt(1)._characterIndex = 0;
var players = GetTree().GetNodesInGroup("Player");
foreach (var player in players)
GetTree().Root.RemoveChild(player);
var projectiles = GetTree().Root.GetChildren().OfType<Projectile>();
foreach (var projectile in projectiles)
GetTree().Root.RemoveChild(projectile);
var main = GetTree().Root.GetNode<Main>("/root/Main");
main.LoadNextLevel(_levelIndex++);
foreach (var player in Players)
EmitSignal(SignalName.ReselectCharacter, player);
}
}

View File

@@ -0,0 +1,24 @@
[gd_scene load_steps=5 format=3 uid="uid://cxj6yeddshy16"]
[ext_resource type="Script" path="res://GameLogic/GameManager.cs" id="1_ya2kt"]
[ext_resource type="PackedScene" uid="uid://b57xus5rqasy8" path="res://Player/Base/Player2.tscn" id="3_y1wkr"]
[ext_resource type="PackedScene" uid="uid://xcmspevaqcrc" path="res://Player/Base/Player1.tscn" id="4_3fl70"]
[ext_resource type="PackedScene" uid="uid://dq1gtd55p04do" path="res://UI/StageGUI.tscn" id="4_xi0i5"]
[node name="GameManager" type="Node3D"]
script = ExtResource("1_ya2kt")
PlayerScenes = Array[PackedScene]([ExtResource("4_3fl70"), ExtResource("3_y1wkr")])
[node name="Camera3D" type="Camera3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.5, 0.866025, 0, -0.866025, 0.5, -0.527878, 10.966, 6.61121)
projection = 1
current = true
size = 10.8546
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(1, 0, 0, 0, -0.504317, 0.863519, 0, -0.863519, -0.504317, 0, 19.9508, 0)
[node name="StageGUI" parent="." instance=ExtResource("4_xi0i5")]
[connection signal="ReselectCharacter" from="." to="StageGUI" method="OnCharacterSelect"]
[connection signal="OnCharacterSelectionMade" from="StageGUI" to="." method="OnCharacterSelected"]

63
GameLogic/Main.cs Normal file
View File

@@ -0,0 +1,63 @@
using Godot;
using Godot.Collections;
using System.Linq;
public partial class Main : Node
{
[Export]
public Array<PackedScene> Levels;
[Export]
public PackedScene GameManager;
public int NumberOfPlayers = 0;
public void LoadLevel(int indexToLoad, int numberOfPlayers)
{
var sceneToLoad = Levels.ElementAt(indexToLoad);
CallDeferred(nameof(DeferredGoToScene), sceneToLoad);
NumberOfPlayers = numberOfPlayers;
var gameManager = GameManager.Instantiate();
AddChild(gameManager);
var gameManagerInstance = (GameManager)gameManager;
gameManagerInstance.OnHandleCharacterSelectUI(gameManagerInstance.Players.ElementAt(0));
if (numberOfPlayers == 2)
gameManagerInstance.OnHandleCharacterSelectUI(gameManagerInstance.Players.ElementAt(1));
var bgmPlayer = GetTree().Root.GetNode<BGMPlayer>("BgmPlayer");
bgmPlayer.ProcessMode = ProcessModeEnum.Always;
bgmPlayer.SetBGMFromFilepath("Audio/BGM/LevelTheme.wav");
bgmPlayer.PlayBGM();
GetTree().Paused = true;
}
public void LoadNextLevel(int currentSceneIndex)
{
if (currentSceneIndex < Levels.Count())
{
var currentScene = Levels.ToList().ElementAt(currentSceneIndex);
var nextScene = currentSceneIndex + 1;
CallDeferred(nameof(DeferredGoToScene), Levels.ElementAt(nextScene), currentScene);
}
}
private void DeferredGoToScene(PackedScene sceneToAdd)
{
var nextScene = GD.Load<PackedScene>(sceneToAdd.ResourcePath);
var newScene = nextScene.Instantiate();
GetTree().Root.AddChild(newScene);
GetTree().Paused = true;
}
private void DeferredGoToScene(PackedScene sceneToAdd, PackedScene sceneToRemove)
{
GetTree().GetFirstNodeInGroup("Level").QueueFree();
var nextScene = GD.Load<PackedScene>(sceneToAdd.ResourcePath);
var newScene = nextScene.Instantiate();
GetTree().Root.AddChild(newScene);
GetTree().Paused = true;
}
}

25
GameLogic/Main.tscn Normal file
View File

@@ -0,0 +1,25 @@
[gd_scene load_steps=13 format=3 uid="uid://vwrw05ob2caq"]
[ext_resource type="Script" path="res://GameLogic/Main.cs" id="1_g4hua"]
[ext_resource type="PackedScene" uid="uid://dqv03pua4j8ga" path="res://Levels/Scenes/Level1.tscn" id="2_8xl51"]
[ext_resource type="PackedScene" uid="uid://b12gq4yqc3d8i" path="res://UI/MainMenu.tscn" id="2_kvovw"]
[ext_resource type="PackedScene" uid="uid://basequfmpg04f" path="res://Levels/Scenes/Level2.tscn" id="3_t7swd"]
[ext_resource type="PackedScene" uid="uid://btl5fdyjewnwc" path="res://Levels/Scenes/Level3.tscn" id="4_bs7wi"]
[ext_resource type="PackedScene" uid="uid://ctvkevnc0wxka" path="res://Levels/Scenes/Level4.tscn" id="5_n8o1o"]
[ext_resource type="PackedScene" uid="uid://col60npvg7wr1" path="res://Levels/Scenes/Level6.tscn" id="6_pqdlv"]
[ext_resource type="PackedScene" uid="uid://8ukphol1isp2" path="res://Levels/Scenes/Level5.tscn" id="7_8fpis"]
[ext_resource type="PackedScene" uid="uid://bsq7edeueqyjg" path="res://Levels/Scenes/Level7.tscn" id="8_mi3pb"]
[ext_resource type="PackedScene" uid="uid://c4xcka4ekuur8" path="res://Levels/Scenes/Level8.tscn" id="9_1ajc1"]
[ext_resource type="PackedScene" uid="uid://djwln4at4ho44" path="res://Levels/Scenes/Level9.tscn" id="11_hkjaq"]
[ext_resource type="PackedScene" uid="uid://cxj6yeddshy16" path="res://GameLogic/GameManager.tscn" id="11_wiyvp"]
[node name="Main" type="Node3D"]
script = ExtResource("1_g4hua")
Levels = Array[PackedScene]([ExtResource("2_8xl51"), ExtResource("3_t7swd"), ExtResource("4_bs7wi"), ExtResource("5_n8o1o"), ExtResource("6_pqdlv"), ExtResource("7_8fpis"), ExtResource("8_mi3pb"), ExtResource("9_1ajc1"), ExtResource("11_hkjaq"), ExtResource("11_hkjaq")])
GameManager = ExtResource("11_wiyvp")
[node name="MainMenu" parent="." instance=ExtResource("2_kvovw")]
z_index = 100
[node name="SFXPlayer" type="AudioStreamPlayer" parent="."]
max_polyphony = 10