IPaletteModifier hooked up; no impls yet
This commit is contained in:
@@ -51,12 +51,15 @@ namespace OpenRa.Game
|
|||||||
static Renderer renderer;
|
static Renderer renderer;
|
||||||
static bool usingAftermath;
|
static bool usingAftermath;
|
||||||
static int2 clientSize;
|
static int2 clientSize;
|
||||||
|
static HardwarePalette palette;
|
||||||
|
|
||||||
public static void ChangeMap(string mapName)
|
public static void ChangeMap(string mapName)
|
||||||
{
|
{
|
||||||
SheetBuilder.Initialize(renderer);
|
SheetBuilder.Initialize(renderer);
|
||||||
|
|
||||||
Rules.LoadRules(mapName, usingAftermath);
|
Rules.LoadRules(mapName, usingAftermath);
|
||||||
|
palette = new HardwarePalette(renderer, Rules.Map);
|
||||||
|
|
||||||
world = new World();
|
world = new World();
|
||||||
|
|
||||||
for (int i = 0; i < 8; i++)
|
for (int i = 0; i < 8; i++)
|
||||||
@@ -163,7 +166,8 @@ namespace OpenRa.Game
|
|||||||
using (new PerfSample("tick_time"))
|
using (new PerfSample("tick_time"))
|
||||||
{
|
{
|
||||||
lastTime += timestep;
|
lastTime += timestep;
|
||||||
|
UpdatePalette(world.Actors.SelectMany(
|
||||||
|
a => a.traits.WithInterface<IPaletteModifier>()));
|
||||||
orderManager.TickImmediate();
|
orderManager.TickImmediate();
|
||||||
|
|
||||||
if (orderManager.IsReadyForNextFrame)
|
if (orderManager.IsReadyForNextFrame)
|
||||||
@@ -202,6 +206,16 @@ namespace OpenRa.Game
|
|||||||
PerfHistory.items["batches"].Tick();
|
PerfHistory.items["batches"].Tick();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void UpdatePalette(IEnumerable<IPaletteModifier> paletteMods)
|
||||||
|
{
|
||||||
|
var b = new Bitmap(palette.Bitmap);
|
||||||
|
foreach (var mod in paletteMods)
|
||||||
|
mod.AdjustPalette(b);
|
||||||
|
|
||||||
|
palette.Texture.SetData(b);
|
||||||
|
renderer.PaletteTexture = palette.Texture;
|
||||||
|
}
|
||||||
|
|
||||||
public static bool IsCellBuildable(int2 a, UnitMovementType umt)
|
public static bool IsCellBuildable(int2 a, UnitMovementType umt)
|
||||||
{
|
{
|
||||||
return IsCellBuildable(a, umt, null);
|
return IsCellBuildable(a, umt, null);
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ namespace OpenRa.Game.Graphics
|
|||||||
const int maxEntries = 16;
|
const int maxEntries = 16;
|
||||||
int allocated = 0;
|
int allocated = 0;
|
||||||
|
|
||||||
public HardwarePalette(Renderer renderer, Map map, int rotate)
|
public HardwarePalette(Renderer renderer, Map map)
|
||||||
: base(renderer,new Size(256, maxEntries))
|
: base(renderer,new Size(256, maxEntries))
|
||||||
{
|
{
|
||||||
Palette pal = new Palette(FileSystem.Open(map.Theater + ".pal"));
|
Palette pal = new Palette(FileSystem.Open(map.Theater + ".pal"));
|
||||||
@@ -19,10 +19,10 @@ namespace OpenRa.Game.Graphics
|
|||||||
|
|
||||||
AddPalette(new Palette(pal, new PaletteRemap(Color.FromArgb(140, 0, 0, 0))));
|
AddPalette(new Palette(pal, new PaletteRemap(Color.FromArgb(140, 0, 0, 0))));
|
||||||
|
|
||||||
using (var bitmapCopy = new Bitmap(bitmap))
|
//using (var bitmapCopy = new Bitmap(bitmap))
|
||||||
for (int j = 0; j < maxEntries; j++)
|
// for (int j = 0; j < maxEntries; j++)
|
||||||
for (int i = 0; i < 7; i++)
|
// for (int i = 0; i < 7; i++)
|
||||||
this[new Point(0x60 + i, j)] = bitmapCopy.GetPixel(0x60 + (rotate + i) % 7, j);
|
// this[new Point(0x60 + i, j)] = bitmapCopy.GetPixel(0x60 + (rotate + i) % 7, j);
|
||||||
}
|
}
|
||||||
|
|
||||||
int AddPalette(Palette p)
|
int AddPalette(Palette p)
|
||||||
|
|||||||
@@ -11,24 +11,16 @@ namespace OpenRa.Game.Graphics
|
|||||||
internal static int SheetSize;
|
internal static int SheetSize;
|
||||||
|
|
||||||
readonly GraphicsDevice device;
|
readonly GraphicsDevice device;
|
||||||
Texture[] palettes;
|
|
||||||
public Shader SpriteShader { get; private set; } /* note: shared shader params */
|
public Shader SpriteShader { get; private set; } /* note: shared shader params */
|
||||||
public Shader LineShader { get; private set; }
|
public Shader LineShader { get; private set; }
|
||||||
public Shader RgbaSpriteShader { get; private set; }
|
public Shader RgbaSpriteShader { get; private set; }
|
||||||
|
|
||||||
|
public Texture PaletteTexture;
|
||||||
|
|
||||||
readonly SpriteHelper sh;
|
readonly SpriteHelper sh;
|
||||||
readonly FontHelper fhDebug, fhTitle;
|
readonly FontHelper fhDebug, fhTitle;
|
||||||
|
|
||||||
public void BuildPalette(Map map)
|
|
||||||
{
|
|
||||||
palettes = Util.MakeArray(7, i => new HardwarePalette(this, map, 6 - i).Texture);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetPalette(HardwarePalette hp)
|
|
||||||
{
|
|
||||||
SpriteShader.SetValue("Palette", hp.Texture);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Renderer(Control host, Size resolution, bool windowed)
|
public Renderer(Control host, Size resolution, bool windowed)
|
||||||
{
|
{
|
||||||
host.ClientSize = resolution;
|
host.ClientSize = resolution;
|
||||||
@@ -49,14 +41,12 @@ namespace OpenRa.Game.Graphics
|
|||||||
|
|
||||||
public GraphicsDevice Device { get { return device; } }
|
public GraphicsDevice Device { get { return device; } }
|
||||||
|
|
||||||
public static float waterFrame = 0.0f;
|
|
||||||
|
|
||||||
public void BeginFrame(float2 r1, float2 r2, float2 scroll)
|
public void BeginFrame(float2 r1, float2 r2, float2 scroll)
|
||||||
{
|
{
|
||||||
device.Begin();
|
device.Begin();
|
||||||
device.Clear(0, Surfaces.Color);
|
device.Clear(0, Surfaces.Color);
|
||||||
|
|
||||||
SpriteShader.SetValue("Palette", palettes[(int)(waterFrame * palettes.Length) % palettes.Length]);
|
SpriteShader.SetValue("Palette", PaletteTexture);
|
||||||
SpriteShader.SetValue("Scroll", scroll);
|
SpriteShader.SetValue("Scroll", scroll);
|
||||||
SpriteShader.SetValue("r1", r1);
|
SpriteShader.SetValue("r1", r1);
|
||||||
SpriteShader.SetValue("r2", r2);
|
SpriteShader.SetValue("r2", r2);
|
||||||
|
|||||||
@@ -64,7 +64,6 @@ namespace OpenRa.Game
|
|||||||
|
|
||||||
SequenceProvider.ForcePrecache();
|
SequenceProvider.ForcePrecache();
|
||||||
|
|
||||||
renderer.BuildPalette( Rules.Map );
|
|
||||||
ShowCursor(false);
|
ShowCursor(false);
|
||||||
Game.ResetTimer();
|
Game.ResetTimer();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ namespace OpenRa.Game
|
|||||||
foreach (var a in actors) a.Tick();
|
foreach (var a in actors) a.Tick();
|
||||||
foreach (var e in effects) e.Tick();
|
foreach (var e in effects) e.Tick();
|
||||||
|
|
||||||
Renderer.waterFrame += 0.00125f * Game.timestep;
|
|
||||||
Game.viewport.Tick();
|
Game.viewport.Tick();
|
||||||
|
|
||||||
var acts = frameEndActions;
|
var acts = frameEndActions;
|
||||||
|
|||||||
Reference in New Issue
Block a user