Scriptable chronosphere + desaturate effect

This commit is contained in:
Paul Chote
2010-05-26 21:07:13 +12:00
parent 9dc8422adf
commit a35d6207a9
12 changed files with 60 additions and 44 deletions

View File

@@ -27,7 +27,7 @@ using OpenRA.FileFormats.Graphics;
namespace OpenRA.Graphics
{
static class Util
public static class Util
{
public static string[] ReadAllLines(Stream s)
{

View File

@@ -1,4 +1,4 @@
#region Copyright & License Information
#region Copyright & License Information
/*
* Copyright 2007,2009,2010 Chris Forbes, Robert Pepperell, Matthew Bowra-Dean, Paul Chote, Alli Witheford.
* This file is part of OpenRA.
@@ -45,7 +45,7 @@ namespace OpenRA.Mods.Cnc.Effects
public IEnumerable<Renderable> Render()
{
yield return new Renderable(anim.Image,
Util.CenterOfCell(Target) - new float2(.5f * anim.Image.size.X, anim.Image.size.Y - Game.CellSize),
Traits.Util.CenterOfCell(Target) - new float2(.5f * anim.Image.size.X, anim.Image.size.Y - Game.CellSize),
"effect");
}

View File

@@ -1,4 +1,4 @@
#region Copyright & License Information
#region Copyright & License Information
/*
* Copyright 2007,2009,2010 Chris Forbes, Robert Pepperell, Matthew Bowra-Dean, Paul Chote, Alli Witheford.
* This file is part of OpenRA.
@@ -20,6 +20,7 @@
using System.Drawing;
using OpenRA.Traits;
using OpenRA.Graphics;
namespace OpenRA.Mods.RA
{
@@ -45,17 +46,18 @@ namespace OpenRA.Mods.RA
{
if (remainingFrames == 0)
return;
/* TODO: FIX ME
var frac = (float)remainingFrames / chronoEffectLength;
for( var y = 0; y < (int)PaletteType.Chrome; y++ )
// TODO: Fix me to only affect "world" palettes
for( var y = 0; y < b.Height; y++ )
for (var x = 0; x < 256; x++)
{
var orig = b.GetPixel(x, y);
var lum = (int)(255 * orig.GetBrightness());
var desat = Color.FromArgb(orig.A, lum, lum, lum);
b.SetPixel(x, y, Graphics.Util.Lerp(frac, orig, desat));
}
*/
b.SetPixel(x, y, OpenRA.Graphics.Util.Lerp(frac, orig, desat));
}
}
}
}

View File

@@ -1,4 +1,4 @@
#region Copyright & License Information
#region Copyright & License Information
/*
* Copyright 2007,2009,2010 Chris Forbes, Robert Pepperell, Matthew Bowra-Dean, Paul Chote, Alli Witheford.
* This file is part of OpenRA.
@@ -27,8 +27,6 @@ namespace OpenRA.Mods.RA
{
class ChronoshiftPowerInfo : SupportPowerInfo
{
public readonly float Duration = 0f;
public readonly bool KillCargo = true;
public override object Create(Actor self) { return new ChronoshiftPower(self,this); }
}
@@ -61,23 +59,7 @@ namespace OpenRA.Mods.RA
.WithTrait<Chronosphere>()
.Select(x => x.Actor).FirstOrDefault();
bool success = order.TargetActor.traits.Get<Chronoshiftable>().Activate(order.TargetActor,
order.TargetLocation,
(int)((Info as ChronoshiftPowerInfo).Duration * 25 * 60),
(Info as ChronoshiftPowerInfo).KillCargo,
chronosphere);
if (success)
{
Sound.Play("chrono2.aud", chronosphere.CenterLocation);
// Trigger screen desaturate effect
foreach (var a in self.World.Queries.WithTrait<ChronoshiftPaletteEffect>())
a.Trait.DoChronoshift();
if (chronosphere != null)
chronosphere.traits.Get<RenderBuilding>().PlayCustomAnim(chronosphere, "active");
}
chronosphere.traits.Get<Chronosphere>().Teleport(order.TargetActor, order.TargetLocation);
FinishActivate();
}
@@ -176,7 +158,37 @@ namespace OpenRA.Mods.RA
}
}
// tag trait to identify the building
class ChronosphereInfo : TraitInfo<Chronosphere> { }
public class Chronosphere { }
// tag trait for the building
class ChronosphereInfo : ITraitInfo
{
public readonly int Duration = 30;
public readonly bool KillCargo = true;
public object Create(Actor self) { return new Chronosphere(self); }
}
class Chronosphere
{
Actor self;
public Chronosphere(Actor self)
{
this.self = self;
}
public void Teleport(Actor targetActor, int2 targetLocation)
{
var info = self.Info.Traits.Get<ChronosphereInfo>();
bool success = targetActor.traits.Get<Chronoshiftable>().Activate(targetActor, targetLocation, info.Duration * 25, info.KillCargo, self);
if (success)
{
Sound.Play("chrono2.aud", self.CenterLocation);
Sound.Play("chrono2.aud", targetActor.CenterLocation);
// Trigger screen desaturate effect
foreach (var a in self.World.Queries.WithTrait<ChronoshiftPaletteEffect>())
a.Trait.DoChronoshift();
self.traits.Get<RenderBuilding>().PlayCustomAnim(self, "active");
}
}
}
}

View File

@@ -54,6 +54,8 @@ namespace OpenRA.Mods.RA
int ticks = 0;
public void Tick(Actor self)
{
if (ticks == 250)
MapActors["pdox"].traits.Get<Chronosphere>().Teleport(MapActors["ca1"], new int2(90,70));
if (ticks == 100)
MapActors["mslo1"].traits.Get<NukeSilo>().Attack(new int2(96,53));
if (ticks == 110)

View File

@@ -1,4 +1,4 @@
#region Copyright & License Information
#region Copyright & License Information
/*
* Copyright 2007,2009,2010 Chris Forbes, Robert Pepperell, Matthew Bowra-Dean, Paul Chote, Alli Witheford.
* This file is part of OpenRA.
@@ -72,7 +72,7 @@ namespace OpenRA.Mods.RA.Effects
else
{
cargo.Location = loc;
cargo.CenterLocation = Util.CenterOfCell(loc);
cargo.CenterLocation = Traits.Util.CenterOfCell(loc);
if (cargo.traits.Contains<IOccupySpace>())
world.WorldActor.traits.Get<UnitInfluence>().Add(cargo, cargo.traits.Get<IOccupySpace>());

View File

@@ -1,4 +1,4 @@
#region Copyright & License Information
#region Copyright & License Information
/*
* Copyright 2007,2009,2010 Chris Forbes, Robert Pepperell, Matthew Bowra-Dean, Paul Chote, Alli Witheford.
* This file is part of OpenRA.
@@ -45,7 +45,7 @@ namespace OpenRA.Mods.RA
rotorAnim.PlayRepeating("rotor");
anims.Add( "rotor_1", new AnimationWithOffset(
rotorAnim,
() => Util.GetTurretPosition( self, unit, info.PrimaryOffset, 0 ),
() => Traits.Util.GetTurretPosition( self, unit, info.PrimaryOffset, 0 ),
null ) { ZOffset = 1 } );
if (info.SecondaryOffset == null) return;
@@ -54,7 +54,7 @@ namespace OpenRA.Mods.RA
secondRotorAnim.PlayRepeating( "rotor2" );
anims.Add( "rotor_2", new AnimationWithOffset(
secondRotorAnim,
() => Util.GetTurretPosition(self, unit, info.SecondaryOffset, 0),
() => Traits.Util.GetTurretPosition(self, unit, info.SecondaryOffset, 0),
null) { ZOffset = 1 });
}

View File

@@ -1,4 +1,4 @@
#region Copyright & License Information
#region Copyright & License Information
/*
* Copyright 2007,2009,2010 Chris Forbes, Robert Pepperell, Matthew Bowra-Dean, Paul Chote, Alli Witheford.
* This file is part of OpenRA.
@@ -41,7 +41,7 @@ namespace OpenRA.Mods.RA
spinnerAnim.PlayRepeating( "spinner" );
anims.Add( "spinner", new AnimationWithOffset(
spinnerAnim,
() => Util.GetTurretPosition( self, unit, info.Offset, 0 ),
() => Traits.Util.GetTurretPosition( self, unit, info.Offset, 0 ),
null ) { ZOffset = 1 } );
}
}

View File

@@ -1,4 +1,4 @@
#region Copyright & License Information
#region Copyright & License Information
/*
* Copyright 2007,2009,2010 Chris Forbes, Robert Pepperell, Matthew Bowra-Dean, Paul Chote, Alli Witheford.
* This file is part of OpenRA.
@@ -51,7 +51,7 @@ namespace OpenRA.Mods.RA
if (info != null)
{
alt = 0;
pos = Util.GetTurretPosition(self, self.traits.Get<Unit>(), info.Offset, 0);
pos = Traits.Util.GetTurretPosition(self, self.traits.Get<Unit>(), info.Offset, 0);
var ru = self.traits.Get<RenderUnit>();
v = Game.CosmeticRandom.Gauss2D(1) * info.Spread.RelOffset();

View File

@@ -1963,12 +1963,12 @@ Actors:
Location: 89,84
Owner: Greece
ActorReference@Actor385:
Id: Actor385
Id: ca1
Type: ca
Location: 119,66
Owner: GoodGuy
ActorReference@Actor386:
Id: Actor386
Id: ca2
Type: ca
Location: 120,66
Owner: GoodGuy

View File

@@ -154,6 +154,8 @@ PDOX:
Sight: 10
Bib:
Chronosphere:
Duration: 180
KillCargo: yes
IronCurtainable:
TSLA:

View File

@@ -21,8 +21,6 @@ Player:
LongDesc: Temporarily teleports a vehicle across \nthe map.
Prerequisites: PDOX
TechLevel: 12
Duration: 3
KillCargo: yes
SelectTargetSound: slcttgt1.aud
BeginChargeSound: chrochr1.aud
EndChargeSound: chrordy1.aud