Nod Airfield behavior (fly units from offscreen)
This commit is contained in:
@@ -8,7 +8,8 @@ namespace OpenRa.Traits.Activities
|
||||
bool isCanceled;
|
||||
|
||||
public Fly(float2 pos) { Pos = pos; }
|
||||
|
||||
public Fly(int2 pos) { Pos = Util.CenterOfCell(pos); }
|
||||
|
||||
public IActivity NextActivity { get; set; }
|
||||
|
||||
const int CruiseAltitude = 20;
|
||||
|
||||
@@ -5,7 +5,7 @@ using System.Text;
|
||||
|
||||
namespace OpenRa.Traits.Activities
|
||||
{
|
||||
class Land : IActivity
|
||||
public class Land : IActivity
|
||||
{
|
||||
readonly float2 Pos;
|
||||
bool isCanceled;
|
||||
|
||||
@@ -5,7 +5,7 @@ using System.Text;
|
||||
|
||||
namespace OpenRa.Traits.Activities
|
||||
{
|
||||
class UnloadCargo : IActivity
|
||||
public class UnloadCargo : IActivity
|
||||
{
|
||||
public IActivity NextActivity { get; set; }
|
||||
bool isCanceled;
|
||||
|
||||
@@ -4,7 +4,7 @@ using OpenRa.GameRules;
|
||||
|
||||
namespace OpenRa.Traits
|
||||
{
|
||||
class ProductionInfo : ITraitInfo
|
||||
public class ProductionInfo : ITraitInfo
|
||||
{
|
||||
public readonly int[] SpawnOffset = null;
|
||||
public readonly string[] Produces = { };
|
||||
@@ -12,7 +12,7 @@ namespace OpenRa.Traits
|
||||
public virtual object Create(Actor self) { return new Production(self); }
|
||||
}
|
||||
|
||||
class Production : IIssueOrder, IResolveOrder, IProducer, ITags
|
||||
public class Production : IIssueOrder, IResolveOrder, IProducer, ITags
|
||||
{
|
||||
bool isPrimary = false;
|
||||
public bool IsPrimary { get { return isPrimary; } }
|
||||
@@ -29,7 +29,7 @@ namespace OpenRa.Traits
|
||||
return newUnit.Info.Traits.GetOrDefault<UnitInfo>().InitialFacing;
|
||||
}
|
||||
|
||||
public bool Produce( Actor self, ActorInfo producee )
|
||||
public virtual bool Produce( Actor self, ActorInfo producee )
|
||||
{
|
||||
var location = CreationLocation( self, producee );
|
||||
if( location == null || self.World.WorldActor.traits.Get<UnitInfluence>().GetUnitsAt( location.Value ).Any() )
|
||||
|
||||
@@ -11,7 +11,7 @@ namespace OpenRa.Traits
|
||||
public object Create(Actor self) { return new RallyPoint(self); }
|
||||
}
|
||||
|
||||
class RallyPoint : IRender, IIssueOrder, IResolveOrder, ITick
|
||||
public class RallyPoint : IRender, IIssueOrder, IResolveOrder, ITick
|
||||
{
|
||||
[Sync]
|
||||
public int2 rallyPoint;
|
||||
|
||||
@@ -51,6 +51,7 @@
|
||||
<Compile Include="Activities\Infiltrate.cs" />
|
||||
<Compile Include="Activities\LayMine.cs" />
|
||||
<Compile Include="Activities\Steal.cs" />
|
||||
<Compile Include="ProductionAirdrop.cs" />
|
||||
<Compile Include="C4Demolition.cs" />
|
||||
<Compile Include="Effects\CrateEffect.cs" />
|
||||
<Compile Include="Effects\GpsSatellite.cs" />
|
||||
|
||||
60
OpenRa.Mods.RA/ProductionAirdrop.cs
Normal file
60
OpenRa.Mods.RA/ProductionAirdrop.cs
Normal file
@@ -0,0 +1,60 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using OpenRa.GameRules;
|
||||
using OpenRa.Traits.Activities;
|
||||
using OpenRa.Traits;
|
||||
|
||||
namespace OpenRa.Mods.RA
|
||||
{
|
||||
public class ProductionAirdropInfo : ProductionInfo
|
||||
{
|
||||
public override object Create(Actor self) { return new ProductionAirdrop(self); }
|
||||
}
|
||||
|
||||
class ProductionAirdrop : Production
|
||||
{
|
||||
public ProductionAirdrop(Actor self) : base(self) { }
|
||||
|
||||
public override bool Produce( Actor self, ActorInfo producee )
|
||||
{
|
||||
var location = CreationLocation(self, producee);
|
||||
var owner = self.Owner;
|
||||
|
||||
// Start at the edge of the map, to the right of the airfield
|
||||
var startPos = new int2(owner.World.Map.XOffset + owner.World.Map.Width, self.Location.Y);
|
||||
var endPos = new int2(owner.World.Map.XOffset, self.Location.Y);
|
||||
var deployOffset = new float2(24f,0);
|
||||
|
||||
var rp = self.traits.GetOrDefault<RallyPoint>();
|
||||
owner.World.AddFrameEndTask(w =>
|
||||
{
|
||||
var a = w.CreateActor("C17", startPos, owner);
|
||||
var cargo = a.traits.Get<Cargo>();
|
||||
|
||||
var newUnit = new Actor(self.World, producee.Name, new int2(0, 0), self.Owner);
|
||||
cargo.Load(a, newUnit);
|
||||
|
||||
a.CancelActivity();
|
||||
a.QueueActivity(new Land(self.CenterLocation+deployOffset));
|
||||
a.QueueActivity(new CallFunc(() =>
|
||||
{
|
||||
var actor = cargo.Unload(self);
|
||||
self.World.AddFrameEndTask(ww =>
|
||||
{
|
||||
ww.Add(actor);
|
||||
actor.traits.Get<Mobile>().TeleportTo(actor, self.Location);
|
||||
actor.CancelActivity();
|
||||
actor.QueueActivity(new Move(rp.rallyPoint, 0));
|
||||
|
||||
foreach (var t in self.traits.WithInterface<INotifyProduction>())
|
||||
t.UnitProduced(self, actor);
|
||||
});
|
||||
}));
|
||||
a.QueueActivity(new Fly(endPos));
|
||||
a.QueueActivity(new RemoveSelf());
|
||||
});
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<sequences>
|
||||
|
||||
<!-- Mobile Construction Vehicle -->
|
||||
<unit name="mcv">
|
||||
<sequence name="idle" start="0" length="*" />
|
||||
</unit>
|
||||
|
||||
<!-- Tiberium Harvester -->
|
||||
<unit name="harv">
|
||||
<sequence name="idle" start="0" length="32" />
|
||||
<sequence name="harvest0" start="32" length="4" />
|
||||
@@ -14,9 +18,16 @@
|
||||
<sequence name="harvest6" start="56" length="4" />
|
||||
<sequence name="harvest7" start="60" length="4" />
|
||||
</unit>
|
||||
|
||||
<!-- Nod Buggy -->
|
||||
<unit name="bggy">
|
||||
<sequence name="idle" start="0" length="32" />
|
||||
<sequence name="turret" start="32" length="32" />
|
||||
<sequence name="muzzle" start="0" length="48" src="minigun" />
|
||||
</unit>
|
||||
|
||||
<!-- Nod Supply Aircraft -->
|
||||
<unit name="c17">
|
||||
<sequence name="idle" start="0" length="32" />
|
||||
</unit>
|
||||
</sequences>
|
||||
|
||||
@@ -955,7 +955,4 @@
|
||||
<sequence name="open" start="0" length="5" />
|
||||
<sequence name="idle" start="5" length="11" />
|
||||
</unit>
|
||||
<unit name="badr">
|
||||
<sequence name="idle" start="0" length="16" />
|
||||
</unit>
|
||||
</sequences>
|
||||
|
||||
@@ -151,7 +151,8 @@ AFLD:
|
||||
Crewed: yes
|
||||
Sight: 5
|
||||
RallyPoint:
|
||||
Production:
|
||||
BelowUnits:
|
||||
ProductionAirdrop:
|
||||
Produces: Vehicle
|
||||
|
||||
WEAP:
|
||||
|
||||
@@ -67,3 +67,20 @@ BGGY:
|
||||
MuzzleFlash: yes
|
||||
RenderUnitTurreted:
|
||||
AutoTarget:
|
||||
|
||||
C17:
|
||||
ParaDrop:
|
||||
LZRange: 1
|
||||
Inherits: ^Plane
|
||||
Unit:
|
||||
HP: 25
|
||||
Armor: light
|
||||
ROT: 5
|
||||
Sight: 0
|
||||
Speed: 40
|
||||
Plane:
|
||||
RenderUnit:
|
||||
WithShadow:
|
||||
Cargo:
|
||||
Passengers: 10
|
||||
-Selectable:
|
||||
|
||||
Reference in New Issue
Block a user