88 lines
1.8 KiB
C#
88 lines
1.8 KiB
C#
using UnityEngine;
|
|
|
|
#pragma warning disable 649
|
|
#pragma warning disable 618
|
|
|
|
namespace Zenject.Asteroids
|
|
{
|
|
public class Ship : MonoBehaviour
|
|
{
|
|
[SerializeField]
|
|
MeshRenderer _meshRenderer;
|
|
|
|
#if UNITY_2018_1_OR_NEWER
|
|
[SerializeField]
|
|
ParticleSystem _particleSystem;
|
|
#else
|
|
[SerializeField]
|
|
ParticleEmitter _particleEmitter;
|
|
#endif
|
|
|
|
ShipStateFactory _stateFactory;
|
|
ShipState _state;
|
|
|
|
[Inject]
|
|
public void Construct(ShipStateFactory stateFactory)
|
|
{
|
|
_stateFactory = stateFactory;
|
|
}
|
|
|
|
public MeshRenderer MeshRenderer
|
|
{
|
|
get { return _meshRenderer; }
|
|
}
|
|
|
|
#if UNITY_2018_1_OR_NEWER
|
|
public ParticleSystem ParticleEmitter
|
|
{
|
|
get { return _particleSystem; }
|
|
}
|
|
#else
|
|
public ParticleEmitter ParticleEmitter
|
|
{
|
|
get { return _particleEmitter; }
|
|
}
|
|
#endif
|
|
|
|
public Vector3 Position
|
|
{
|
|
get { return transform.position; }
|
|
set { transform.position = value; }
|
|
}
|
|
|
|
public Quaternion Rotation
|
|
{
|
|
get { return transform.rotation; }
|
|
set { transform.rotation = value; }
|
|
}
|
|
|
|
public void Start()
|
|
{
|
|
ChangeState(ShipStates.WaitingToStart);
|
|
}
|
|
|
|
public void Update()
|
|
{
|
|
_state.Update();
|
|
}
|
|
|
|
public void OnTriggerEnter(Collider other)
|
|
{
|
|
_state.OnTriggerEnter(other);
|
|
}
|
|
|
|
public void ChangeState(ShipStates state)
|
|
{
|
|
if (_state != null)
|
|
{
|
|
_state.Dispose();
|
|
_state = null;
|
|
}
|
|
|
|
_state = _stateFactory.CreateState(state);
|
|
_state.Start();
|
|
}
|
|
}
|
|
}
|
|
|