chronotank in aftermath mod dll

This commit is contained in:
Chris Forbes
2010-01-17 10:31:48 +13:00
parent 9c78406f08
commit b290d46ddc
12 changed files with 35 additions and 61 deletions

View File

@@ -3,13 +3,13 @@ using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Net.Sockets;
using IjwFramework.Types;
using OpenRa.FileFormats;
using OpenRa.GameRules;
using OpenRa.Graphics;
using OpenRa.Orders;
using OpenRa.Support;
using OpenRa.Traits;
using IjwFramework.Types;
namespace OpenRa
{
@@ -20,7 +20,7 @@ namespace OpenRa
public static World world;
internal static Viewport viewport;
public static PathFinder PathFinder;
internal static WorldRenderer worldRenderer;
public static WorldRenderer worldRenderer;
public static Controller controller;
internal static Chrome chrome;
public static UserSettings Settings;

View File

@@ -1,26 +1,21 @@
using System.Drawing;
using System;
using System.Linq;
using System.Windows.Forms;
using IjwFramework.Types;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using OpenRa.Traits;
using OpenRa.Support;
using OpenRa.Effects;
namespace OpenRa.Graphics
{
class WorldRenderer
public class WorldRenderer
{
public readonly TerrainRenderer terrainRenderer;
public readonly SpriteRenderer spriteRenderer;
public readonly LineRenderer lineRenderer;
public readonly UiOverlay uiOverlay;
public readonly Renderer renderer;
internal readonly TerrainRenderer terrainRenderer;
internal readonly SpriteRenderer spriteRenderer;
internal readonly LineRenderer lineRenderer;
internal readonly UiOverlay uiOverlay;
internal readonly Renderer renderer;
public static bool ShowUnitPaths = false;
public WorldRenderer(Renderer renderer)
internal WorldRenderer(Renderer renderer)
{
terrainRenderer = new TerrainRenderer(renderer, Rules.Map);

View File

@@ -103,7 +103,6 @@
<Compile Include="Effects\IEffect.cs" />
<Compile Include="Graphics\MappedImage.cs" />
<Compile Include="Graphics\Minimap.cs" />
<Compile Include="Orders\ChronoshiftSelfDestinationOrderGenerator.cs" />
<Compile Include="Orders\ChronosphereSelectOrderGenerator.cs" />
<Compile Include="Orders\IOrderSource.cs" />
<Compile Include="Orders\IronCurtainOrderGenerator.cs" />
@@ -224,7 +223,6 @@
<Compile Include="Traits\Chronosphere.cs" />
<Compile Include="Traits\EngineerCapture.cs" />
<Compile Include="Traits\Explodes.cs" />
<Compile Include="Traits\ChronoshiftDeploy.cs" />
<Compile Include="Traits\Fake.cs" />
<Compile Include="Traits\GeneratesGap.cs" />
<Compile Include="Traits\GpsLaunchSite.cs" />

View File

@@ -1,45 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using OpenRa.Traits;
namespace OpenRa.Orders
{
class ChronoshiftSelfDestinationOrderGenerator : IOrderGenerator
{
public readonly Actor self;
public ChronoshiftSelfDestinationOrderGenerator(Actor self)
{
this.self = self;
}
public IEnumerable<Order> Order(int2 xy, MouseInput mi)
{
if (mi.Button == MouseButton.Left)
{
Game.controller.CancelInputMode();
yield break;
}
yield return new Order("ChronoshiftSelf", self, null, xy, null);
}
public void Tick() { }
public void Render()
{
Game.worldRenderer.DrawSelectionBox(self, Color.White, true);
}
public Cursor GetCursor(int2 xy, MouseInput mi)
{
if (!Game.LocalPlayer.Shroud.IsExplored(xy))
return Cursor.MoveBlocked;
var movement = self.traits.GetOrDefault<IMovement>();
return (movement.CanEnterCell(xy)) ? Cursor.Chronoshift : Cursor.MoveBlocked;
}
}
}

View File

@@ -1,12 +1,11 @@
using IjwFramework.Collections;
using IrrKlang;
using OpenRa.FileFormats;
using OpenRa.GameRules;
using OpenRa.Traits;
namespace OpenRa
{
static class Sound
public static class Sound
{
static ISoundEngine soundEngine;
static Cache<string, ISoundSource> sounds;

View File

@@ -7,7 +7,7 @@ using OpenRa.FileFormats;
namespace OpenRa
{
class SyncAttribute : Attribute { }
public class SyncAttribute : Attribute { }
static class Sync
{

View File

@@ -1,12 +1,7 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using OpenRa.GameRules;
namespace OpenRa.Traits.Activities
{
class Teleport : IActivity
public class Teleport : IActivity
{
public IActivity NextActivity { get; set; }

View File

@@ -1,96 +0,0 @@
using System.Collections.Generic;
using System.Linq;
using OpenRa.Orders;
namespace OpenRa.Traits
{
class ChronoshiftDeployInfo : ITraitInfo
{
public object Create(Actor self) { return new ChronoshiftDeploy(self); }
}
class ChronoshiftDeploy : IIssueOrder, IResolveOrder, ISpeedModifier, ITick, IPips
{
// Recharge logic
[Sync]
int chargeTick = 0; // How long until we can chronoshift again?
readonly int chargeLength = (int)(Rules.Aftermath.ChronoTankDuration * 60 * 25); // How long between shifts?
public ChronoshiftDeploy(Actor self) { }
public void Tick(Actor self)
{
if (chargeTick > 0)
chargeTick--;
}
public Order IssueOrder(Actor self, int2 xy, MouseInput mi, Actor underCursor)
{
if (mi.Button == MouseButton.Right && xy == self.Location && chargeTick <= 0)
return new Order("Deploy", self, null, int2.Zero, null);
return null;
}
public void ResolveOrder(Actor self, Order order)
{
if (order.OrderString == "Deploy")
{
Game.controller.orderGenerator = new ChronoshiftSelfDestinationOrderGenerator(self);
return;
}
var movement = self.traits.GetOrDefault<IMovement>();
if (order.OrderString == "ChronoshiftSelf" && movement.CanEnterCell(order.TargetLocation))
{
// Cannot chronoshift into unexplored location
if (!self.Owner.Shroud.IsExplored(order.TargetLocation))
return;
Game.controller.CancelInputMode();
self.CancelActivity();
self.QueueActivity(new Activities.Teleport(order.TargetLocation));
Sound.Play("chrotnk1.aud");
chargeTick = chargeLength;
foreach (var a in Game.world.Actors.Where(a => a.traits.Contains<ChronoshiftPaletteEffect>()))
a.traits.Get<ChronoshiftPaletteEffect>().DoChronoshift();
}
}
public float GetSpeedModifier()
{
// ARGH! You must not do this, it will desync!
return (Game.controller.orderGenerator is ChronoshiftDestinationOrderGenerator) ? 0f : 1f;
}
// Display 5 pips indicating the current charge status
public IEnumerable<PipType> GetPips(Actor self)
{
const int numPips = 5;
for (int i = 0; i < numPips; i++)
{
if ((1 - chargeTick * 1.0f / chargeLength) * numPips < i + 1)
{
yield return PipType.Transparent;
continue;
}
switch (i)
{
case 0:
case 1:
yield return PipType.Red;
break;
case 2:
case 3:
yield return PipType.Yellow;
break;
case 4:
yield return PipType.Green;
break;
}
}
}
}
}

View File

@@ -5,7 +5,7 @@ namespace OpenRa.Traits
{
class ChronoshiftPaletteEffectInfo : StatelessTraitInfo<ChronoshiftPaletteEffect> { }
class ChronoshiftPaletteEffect : IPaletteModifier, ITick
public class ChronoshiftPaletteEffect : IPaletteModifier, ITick
{
const int chronoEffectLength = 20;
int remainingFrames;

View File

@@ -1,10 +0,0 @@
using OpenRa.Effects;
using OpenRa.Traits;
using System.Collections.Generic;
using System.Linq;
using OpenRa.Orders;
namespace OpenRa.Traits
{
}