Start thinking about how the harv<->proc interaction is going to work
This commit is contained in:
@@ -117,7 +117,7 @@
|
||||
<Compile Include="Support\OpenAlInterop.cs" />
|
||||
<Compile Include="Support\PerfHistory.cs" />
|
||||
<Compile Include="Sync.cs" />
|
||||
<Compile Include="Traits\AcceptsOre.cs" />
|
||||
<Compile Include="Traits\OreRefinery.cs" />
|
||||
<Compile Include="Traits\Activities\Attack.cs" />
|
||||
<Compile Include="Traits\Activities\CallFunc.cs" />
|
||||
<Compile Include="Traits\Activities\EnterTransport.cs" />
|
||||
@@ -251,6 +251,7 @@
|
||||
<Compile Include="Traits\StoresOre.cs" />
|
||||
<Compile Include="Traits\Submarine.cs" />
|
||||
<Compile Include="Traits\TakeCover.cs" />
|
||||
<Compile Include="Traits\TiberiumRefinery.cs" />
|
||||
<Compile Include="Traits\TraitsInterfaces.cs" />
|
||||
<Compile Include="Traits\Turreted.cs" />
|
||||
<Compile Include="Traits\Unit.cs" />
|
||||
|
||||
@@ -16,6 +16,7 @@ namespace OpenRa.Traits.Activities
|
||||
this.refinery = refinery;
|
||||
}
|
||||
|
||||
// TODO: This belongs on the refinery itself
|
||||
static readonly int2 refineryDeliverOffset = new int2( 1, 2 );
|
||||
|
||||
public IActivity Tick( Actor self )
|
||||
@@ -26,6 +27,8 @@ namespace OpenRa.Traits.Activities
|
||||
if( isDone )
|
||||
{
|
||||
self.traits.Get<Harvester>().Deliver( self, refinery );
|
||||
|
||||
refinery.traits.Get<IAcceptOre>().OnDock(self);
|
||||
return NextActivity ?? new Harvest();
|
||||
}
|
||||
else if( NextActivity != null )
|
||||
@@ -43,7 +46,7 @@ namespace OpenRa.Traits.Activities
|
||||
checkForBlocked = false,
|
||||
};
|
||||
var refineries = self.World.Queries.OwnedBy[self.Owner]
|
||||
.Where( x => x.traits.Contains<AcceptsOre>())
|
||||
.Where(x => x.traits.Contains<IAcceptOre>())
|
||||
.ToList();
|
||||
if( refinery != null )
|
||||
search.AddInitialCell( self.World, refinery.Location + refineryDeliverOffset );
|
||||
@@ -62,6 +65,7 @@ namespace OpenRa.Traits.Activities
|
||||
// no refineries reachable?
|
||||
return this;
|
||||
}
|
||||
// TODO: This belongs in the refinery trait
|
||||
else if( unit.Facing != 64 )
|
||||
return new Turn( 64 ) { NextActivity = this };
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ namespace OpenRa.Traits
|
||||
|
||||
if (underCursor != null
|
||||
&& underCursor.Owner == self.Owner
|
||||
&& underCursor.traits.Contains<AcceptsOre>() && !IsEmpty)
|
||||
&& underCursor.traits.Contains<IAcceptOre>() && !IsEmpty)
|
||||
return new Order("Deliver", self, underCursor);
|
||||
|
||||
if (underCursor == null && self.World.Map.ContainsResource(xy))
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
|
||||
namespace OpenRa.Traits
|
||||
{
|
||||
class AcceptsOreInfo : ITraitInfo
|
||||
class OreRefineryInfo : ITraitInfo
|
||||
{
|
||||
public object Create(Actor self) { return new AcceptsOre(self); }
|
||||
public object Create(Actor self) { return new OreRefinery(self); }
|
||||
}
|
||||
|
||||
class AcceptsOre
|
||||
class OreRefinery : IAcceptOre
|
||||
{
|
||||
public AcceptsOre(Actor self)
|
||||
public OreRefinery(Actor self)
|
||||
{
|
||||
self.World.AddFrameEndTask(
|
||||
w =>
|
||||
@@ -21,5 +21,7 @@ namespace OpenRa.Traits
|
||||
harvester.QueueActivity(new Harvest());
|
||||
});
|
||||
}
|
||||
|
||||
public void OnDock(Actor harv) {}
|
||||
}
|
||||
}
|
||||
@@ -65,6 +65,12 @@ namespace OpenRa.Traits
|
||||
() => anim.PlayRepeating(GetPrefix(self) + "idle"));
|
||||
}
|
||||
|
||||
public void PlayCustomAnim(Actor self, string name, Action a)
|
||||
{
|
||||
anim.PlayThen(GetPrefix(self) + name,
|
||||
() => { anim.PlayRepeating(GetPrefix(self) + "idle"); a(); });
|
||||
}
|
||||
|
||||
public void PlayCustomAnimBackwards(Actor self, string name, Action a)
|
||||
{
|
||||
anim.PlayBackwardsThen(GetPrefix(self) + name,
|
||||
|
||||
32
OpenRa.Game/Traits/TiberiumRefinery.cs
Normal file
32
OpenRa.Game/Traits/TiberiumRefinery.cs
Normal file
@@ -0,0 +1,32 @@
|
||||
using OpenRa.Traits.Activities;
|
||||
|
||||
namespace OpenRa.Traits
|
||||
{
|
||||
class TiberiumRefineryInfo : ITraitInfo
|
||||
{
|
||||
public object Create(Actor self) { return new TiberiumRefinery(self); }
|
||||
}
|
||||
|
||||
class TiberiumRefinery : IAcceptOre
|
||||
{
|
||||
Actor self;
|
||||
public TiberiumRefinery(Actor self)
|
||||
{
|
||||
this.self = self;
|
||||
self.World.AddFrameEndTask(
|
||||
w =>
|
||||
{ /* create the free harvester! */
|
||||
var harvester = w.CreateActor("harv", self.Location + new int2(1, 2), self.Owner);
|
||||
var unit = harvester.traits.Get<Unit>();
|
||||
var mobile = harvester.traits.Get<Mobile>();
|
||||
unit.Facing = 64;
|
||||
harvester.QueueActivity(new Harvest());
|
||||
});
|
||||
}
|
||||
|
||||
public void OnDock(Actor harv)
|
||||
{
|
||||
self.traits.Get<RenderBuilding>().PlayCustomAnim(self, "active");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -21,7 +21,7 @@ namespace OpenRa.Traits
|
||||
public interface INotifyDamage { void Damaged(Actor self, AttackInfo e); }
|
||||
public interface INotifyBuildComplete { void BuildingComplete(Actor self); }
|
||||
public interface INotifyProduction { void UnitProduced(Actor self, Actor other); }
|
||||
|
||||
public interface IAcceptOre { void OnDock(Actor harv); }
|
||||
public interface IAcceptThief { void OnSteal(Actor self, Actor thief); }
|
||||
public interface IAcceptSpy { void OnInfiltrate(Actor self, Actor spy); }
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ PROC:
|
||||
Armor: wood
|
||||
Crewed: yes
|
||||
Sight: 4
|
||||
AcceptsOre:
|
||||
TiberiumRefinery:
|
||||
StoresOre:
|
||||
Pips: 17
|
||||
Capacity: 1000
|
||||
|
||||
@@ -1256,7 +1256,7 @@ PROC:
|
||||
Armor: wood
|
||||
Crewed: yes
|
||||
Sight: 6
|
||||
AcceptsOre:
|
||||
OreRefinery:
|
||||
StoresOre:
|
||||
Pips: 17
|
||||
Capacity: 2000
|
||||
|
||||
Reference in New Issue
Block a user