46 lines
1.1 KiB
C#
46 lines
1.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Linq;
|
|
using OpenRa.Game.Traits;
|
|
|
|
namespace OpenRa.Game
|
|
{
|
|
abstract class Order
|
|
{
|
|
public abstract void Apply(bool doVoice);
|
|
}
|
|
|
|
class MoveOrder : Order
|
|
{
|
|
public readonly Actor Unit;
|
|
public readonly int2 Destination;
|
|
|
|
public MoveOrder(Actor unit, int2 destination)
|
|
{
|
|
this.Unit = unit;
|
|
this.Destination = destination;
|
|
}
|
|
|
|
string GetVoiceSuffix()
|
|
{
|
|
var suffixes = new[] { ".r01", ".r03" };
|
|
return suffixes[Unit.traits.Get<Traits.Mobile>().Voice];
|
|
}
|
|
|
|
public override void Apply(bool doVoice)
|
|
{
|
|
if (doVoice && Game.LocalPlayer == Unit.Owner)
|
|
Game.PlaySound(Game.SovietVoices.First.GetNext() + GetVoiceSuffix(), false);
|
|
|
|
var mobile = Unit.traits.Get<Mobile>();
|
|
mobile.Cancel(Unit);
|
|
mobile.QueueActivity(new Mobile.MoveTo(Destination));
|
|
|
|
var attackBase = Unit.traits.WithInterface<AttackBase>().FirstOrDefault();
|
|
if (attackBase != null)
|
|
attackBase.target = null; /* move cancels attack order */
|
|
}
|
|
}
|
|
}
|