Files
dungeons/Assets/Plugins/Zenject/OptionalExtras/SampleGame1 (Beginner)/Scripts/Ship/States/ShipStateDead.cs

79 lines
2.2 KiB
C#

using System;
using UnityEngine;
using Random = UnityEngine.Random;
namespace Zenject.Asteroids
{
public class ShipStateDead : ShipState
{
readonly SignalBus _signalBus;
readonly BrokenShipFactory _brokenShipFactory;
readonly ExplosionFactory _explosionFactory;
readonly Settings _settings;
readonly Ship _ship;
GameObject _shipBroken;
GameObject _explosion;
public ShipStateDead(
Settings settings, Ship ship,
ExplosionFactory explosionFactory,
BrokenShipFactory brokenShipFactory,
SignalBus signalBus)
{
_signalBus = signalBus;
_brokenShipFactory = brokenShipFactory;
_explosionFactory = explosionFactory;
_settings = settings;
_ship = ship;
}
public override void Start()
{
_ship.MeshRenderer.enabled = false;
_ship.ParticleEmitter.gameObject.SetActive(false);
_explosion = _explosionFactory.Create().gameObject;
_explosion.transform.position = _ship.Position;
_shipBroken = _brokenShipFactory.Create().gameObject;
_shipBroken.transform.position = _ship.Position;
_shipBroken.transform.rotation = _ship.Rotation;
foreach (var rigidBody in _shipBroken.GetComponentsInChildren<Rigidbody>())
{
var randomTheta = Random.Range(0, Mathf.PI * 2.0f);
var randomDir = new Vector3(Mathf.Cos(randomTheta), Mathf.Sin(randomTheta), 0);
rigidBody.AddForce(randomDir * _settings.explosionForce);
}
_signalBus.Fire<ShipCrashedSignal>();
}
public override void Dispose()
{
_ship.MeshRenderer.enabled = true;
_ship.ParticleEmitter.gameObject.SetActive(true);
GameObject.Destroy(_explosion);
GameObject.Destroy(_shipBroken);
}
public override void Update()
{
}
[Serializable]
public class Settings
{
public float explosionForce;
}
public class Factory : PlaceholderFactory<ShipStateDead>
{
}
}
}