diff --git a/Assets/Scripts/Managers/CharacterManager.cs b/Assets/Scripts/Managers/CharacterManager.cs index cdda939..cfa668a 100644 --- a/Assets/Scripts/Managers/CharacterManager.cs +++ b/Assets/Scripts/Managers/CharacterManager.cs @@ -95,17 +95,7 @@ namespace Managers foreach (Player p in players) { - GameObject shipObject = Instantiate(p.character.shipPrefab); - p.spawnedCharacter = shipObject; - shipObject.TryGetComponent(out Ship ship); - ship.state = new ShipHandling.ShipState(); - ship.cameraOperator = MatchCamera.GetComponent(); - shipObject.transform.SetParent(MatchArena.transform, false); - shipObject.transform.localPosition = - MatchManager.G.ArenaProperties.spawnPositions[p.playerNumber - 1]; - - shipObject.transform.localScale = new Vector3(); - Tween.Scale(shipObject.transform, new Vector3(0.7f, 0.7f, 0.7f), 1f); + SpawnCharacter(p, MatchCamera, MatchArena); spawned.Add(p); } return; @@ -130,7 +120,9 @@ namespace Managers GameObject shipObject = Instantiate(player.character.shipPrefab); player.spawnedCharacter = shipObject; shipObject.TryGetComponent(out Ship ship); + ship.props = player.character; ship.state = new ShipHandling.ShipState(); + ApplyShipColor(player.character.shipHullColor, ship.bodyMeshRenderer); ship.cameraOperator = MatchCamera.GetComponent(); shipObject.transform.SetParent(MatchArena.transform, false); shipObject.transform.localPosition = @@ -144,6 +136,33 @@ namespace Managers return; } + public void SpawnCharacter(Player p, GameObject camera, GameObject arena) + { + Log.Debug($"Spawning ship:{p.character.shipName} for player: {p.playerName}"); + GameObject shipObject = Instantiate(p.character.shipPrefab); + Log.Debug($"Instantiated prefab"); + p.spawnedCharacter = shipObject; + shipObject.TryGetComponent(out Ship ship); + ship.props = p.character; + ship.state = new ShipHandling.ShipState(); + ship.cameraOperator = camera.GetComponent(); + ApplyShipColor(p.character.shipHullColor, ship.bodyMeshRenderer); + Log.Debug($"Applied ships color"); + shipObject.transform.SetParent(arena.transform, false); + shipObject.transform.localPosition = + MatchManager.G.ArenaProperties.spawnPositions[p.playerNumber - 1]; + shipObject.transform.localScale = new Vector3(); + Log.Debug($"Set ships location"); + Tween.Scale(shipObject.transform, new Vector3(0.7f, 0.7f, 0.7f), 1f); + Log.Debug($"Started ship spawn tween"); + } + + private void ApplyShipColor(Color color, MeshRenderer renderer) + { + MaterialPropertyBlock materialPropertyBlock = new(); + materialPropertyBlock.SetColor("_BaseColor", color); + renderer.SetPropertyBlock(materialPropertyBlock); + } } } \ No newline at end of file