Add more patrols

This commit is contained in:
Scott_NZ
2012-12-15 12:08:12 +13:00
parent 31d3616b8d
commit fda897c69e
2 changed files with 201 additions and 48 deletions

View File

@@ -46,13 +46,57 @@ namespace OpenRA.Mods.RA.Missions
Player soviets;
World world;
static readonly string[] DogPatrol = { "e1", "dog.patrol", "dog.patrol" };
static readonly string[] InfantryPatrol = { "e1", "e1", "e1", "e1", "e1" };
Actor[] patrol1;
CPos[] patrolPoints1;
int currentPatrolPoint1;
Actor[] patrol2;
CPos[] patrolPoints2;
int currentPatrolPoint2 = 3;
Actor[] patrol3;
CPos[] patrolPoints3;
int currentPatrolPoint3;
Actor[] patrol4;
CPos[] patrolPoints4;
int currentPatrolPoint4;
Actor[] patrol5;
CPos[] patrolPoints5;
int currentPatrolPoint5;
public void Tick(Actor self)
{
if (world.FrameNumber == 1)
{
InsertSpies();
}
PatrolTick();
PatrolTick(ref patrol1, ref currentPatrolPoint1, soviets, DogPatrol, patrolPoints1);
PatrolTick(ref patrol2, ref currentPatrolPoint2, soviets, InfantryPatrol, patrolPoints2);
PatrolTick(ref patrol3, ref currentPatrolPoint3, soviets, DogPatrol, patrolPoints3);
PatrolTick(ref patrol4, ref currentPatrolPoint4, soviets, DogPatrol, patrolPoints4);
PatrolTick(ref patrol5, ref currentPatrolPoint5, soviets, DogPatrol, patrolPoints5);
}
void PatrolTick(ref Actor[] patrolActors, ref int currentPoint, Player owner, string[] actorNames, CPos[] points)
{
if (patrolActors == null)
{
var td = new TypeDictionary { new OwnerInit(owner), new LocationInit(points[currentPoint]) };
patrolActors = actorNames.Select(f => world.CreateActor(f, td)).ToArray();
}
var leader = patrolActors[0];
if (!leader.IsDead() && leader.IsIdle && leader.IsInWorld)
{
currentPoint = (currentPoint + 1) % points.Length;
leader.QueueActivity(new AttackMove.AttackMoveActivity(leader, new Move.Move(points[currentPoint], 0)));
leader.QueueActivity(new Wait(50));
foreach (var follower in patrolActors.Skip(1))
{
follower.QueueActivity(new Wait(world.SharedRandom.Next(0, 25)));
follower.QueueActivity(new AttackMove.AttackMoveActivity(follower, new Move.Move(points[currentPoint], 0)));
}
}
}
void InsertSpies()
@@ -77,37 +121,12 @@ namespace OpenRA.Mods.RA.Missions
lst.QueueActivity(new RemoveSelf());
}
static readonly string[] DogPatrol = { "e1", "dog.patrol", "dog.patrol" };
IEnumerable<Actor> patrol1;
CPos[] patrolPoints1;
int currentPatrolPoint1;
void PatrolTick()
{
if (patrol1 == null)
{
var td = new TypeDictionary { new OwnerInit(soviets), new LocationInit(patrolPoints1.First()) };
patrol1 = DogPatrol.Select(f => world.CreateActor(f, td)).ToArray();
}
var leader = patrol1.First();
if (!leader.IsDead() && leader.IsIdle && leader.IsInWorld)
{
currentPatrolPoint1 = (currentPatrolPoint1 + 1) % patrolPoints1.Count();
leader.QueueActivity(new AttackMove.AttackMoveActivity(leader, new Move.Move(patrolPoints1[currentPatrolPoint1])));
leader.QueueActivity(new Wait(50));
foreach (var follower in patrol1.Skip(1))
{
follower.QueueActivity(new Wait(world.SharedRandom.Next(0, 25)));
follower.QueueActivity(new AttackMove.AttackMoveActivity(follower, new Move.Move(patrolPoints1[currentPatrolPoint1])));
}
}
}
void SetupSubStances()
{
if (Game.IsHost)
if (!Game.IsHost)
{
return;
}
foreach (var actor in world.Actors.Where(a => a.IsInWorld && a.Owner == soviets && !a.IsDead() && a.HasTrait<TargetableSubmarine>()))
{
world.IssueOrder(new Order("SetUnitStance", actor, false)
@@ -116,7 +135,6 @@ namespace OpenRA.Mods.RA.Missions
});
}
}
}
public void WorldLoaded(World w)
{
@@ -141,6 +159,30 @@ namespace OpenRA.Mods.RA.Missions
actors["PatrolPoint14"].Location,
actors["PatrolPoint15"].Location
};
patrolPoints2 = patrolPoints1;
patrolPoints3 = new[]
{
actors["PatrolPoint21"].Location,
actors["PatrolPoint22"].Location,
actors["PatrolPoint23"].Location,
actors["PatrolPoint24"].Location,
actors["PatrolPoint25"].Location
};
patrolPoints4 = new[]
{
actors["PatrolPoint31"].Location,
actors["PatrolPoint32"].Location,
actors["PatrolPoint33"].Location,
actors["PatrolPoint34"].Location
};
patrolPoints5 = new[]
{
actors["PatrolPoint41"].Location,
actors["PatrolPoint42"].Location,
actors["PatrolPoint43"].Location,
actors["PatrolPoint44"].Location,
actors["PatrolPoint45"].Location
};
SetupSubStances();
Game.MoveViewport(lstEntryPoint.Location.ToFloat2());
PlayMusic();

View File

@@ -504,18 +504,18 @@ Actors:
Actor118: ftur
Location: 98,40
Owner: Soviets
Actor149: silo
Location: 95,27
Actor149: fact
Location: 95,25
Owner: Soviets
Actor151: v01
Location: 89,50
Owner: Neutral
Actor150: silo
Location: 96,28
Owner: Soviets
Actor151: silo
Location: 97,27
Owner: Soviets
Actor152: silo
Location: 96,26
Location: 110,28
Owner: Soviets
Actor152: v07
Location: 79,45
Owner: Neutral
Actor153: apwr
Location: 97,16
Owner: Soviets
@@ -741,7 +741,7 @@ Actors:
Actor225: fenc
Location: 95,36
Owner: Soviets
Actor224: 4tnk.husk
Actor224: 4tnk
Location: 103,30
Owner: Soviets
Actor223: 4tnk
@@ -945,8 +945,8 @@ Actors:
Actor295: t07
Location: 84,40
Owner: Neutral
Actor296: t06
Location: 91,49
PatrolPoint22: waypoint
Location: 92,49
Owner: Neutral
Actor297: v08
Location: 72,78
@@ -1302,6 +1302,117 @@ Actors:
PatrolPoint14: waypoint
Location: 91,83
Owner: Neutral
PatrolPoint21: waypoint
Location: 105,45
Owner: Neutral
PatrolPoint23: waypoint
Location: 78,53
Owner: Neutral
PatrolPoint24: waypoint
Location: 92,56
Owner: Neutral
PatrolPoint25: waypoint
Location: 106,53
Owner: Neutral
Actor409: e1
Location: 76,59
Owner: Soviets
Actor410: e1
Location: 78,59
Owner: Soviets
Actor411: dog
Location: 75,58
Owner: Soviets
Actor412: sbag
Location: 76,60
Owner: Soviets
Actor413: sbag
Location: 75,60
Owner: Soviets
Actor414: sbag
Location: 74,60
Owner: Soviets
Actor415: sbag
Location: 78,60
Owner: Soviets
Actor416: sbag
Location: 79,60
Owner: Soviets
Actor417: sbag
Location: 73,60
Owner: Soviets
PatrolPoint31: waypoint
Location: 83,101
Owner: Neutral
PatrolPoint32: waypoint
Location: 71,96
Owner: Neutral
PatrolPoint33: waypoint
Location: 71,87
Owner: Neutral
PatrolPoint34: waypoint
Location: 92,85
Owner: Neutral
Actor296: kenn
Location: 90,68
Owner: Soviets
Actor303: v10
Location: 97,47
Owner: Neutral
Actor304: v08
Location: 78,45
Owner: Neutral
Actor306: v04
Location: 87,50
Owner: Neutral
Actor408: dog
Location: 108,42
Owner: Soviets
Actor418: dog
Location: 109,74
Owner: Soviets
Actor419: e1
Location: 108,75
Owner: Soviets
Actor420: e1
Location: 110,75
Owner: Soviets
Actor421: sbag
Location: 108,73
Owner: Soviets
Actor422: sbag
Location: 109,73
Owner: Soviets
Actor423: sbag
Location: 110,73
Owner: Soviets
Actor424: sbag
Location: 111,73
Owner: Soviets
PatrolPoint43: waypoint
Location: 109,51
Owner: Neutral
PatrolPoint42: waypoint
Location: 109,44
Owner: Neutral
PatrolPoint41: waypoint
Location: 102,41
Owner: Neutral
PatrolPoint45: waypoint
Location: 93,42
Owner: Neutral
PatrolPoint44: waypoint
Location: 96,53
Owner: Neutral
Actor425: dog
Location: 79,22
Owner: Soviets
Actor426: dog
Location: 93,19
Owner: Soviets
Actor427: dog
Location: 104,24
Owner: Soviets
Smudges: