


public class BasicTankControls : MonoBehaviour
{
public void Init(TankBehavior tank)
{
this.tank = tank;
}
public virtual void Act(List<TankData> tanksData)
{
// no operation
}
protected TankBehavior tank;
}
void Start ()
{
...
controls = GetComponent<BasicTankControls>();
if(controls != null)
{
controls.Init(this);
}
...
}
void FixedUpdate()
{
if(controls != null)
{
GameObject[] tankObjects = GameObject.FindGameObjectsWithTag("Tank");
List<TankData> tanksData = new List<TankData>();
foreach (var item in tankObjects)
{
if (item.GetInstanceID() != this.GetInstanceID())
{
tanksData.Add(item.GetComponent<TankBehavior>().GetData());
}
}
controls.Act(tanksData);
}
}
public class TankData
{
public TankData(int instanceId, Vector2 position, float health, Direction direction)
{
this.InstanceID = instanceId;
this.Position = position;
this.Health = health;
this.Direction = direction;
}
public readonly int InstanceID;
public readonly Vector2 Position;
public readonly float Health;
public readonly Direction Direction;
}
public class HumanControls : BasicTankControls
{
public override void Act(List<TankData> tanksData)
{
if(Input.GetButton("Up"))
{
tank.MoveForward();
}
else if (Input.GetButton("Down"))
{
tank.MoveBackward();
}
if (Input.GetButtonDown("Left"))
{
tank.RotateLeft();
}
else if (Input.GetButtonDown("Right"))
{
tank.RotateRight();
}
if (Input.GetButton("Fire"))
{
tank.Fire();
}
}
}
Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.
комментарии (19)