hack hack resources

This commit is contained in:
Chris Forbes
2010-05-10 18:59:59 +12:00
parent 8118e022cb
commit 94fdc4abba
4 changed files with 113 additions and 18 deletions

View File

@@ -1,10 +1,6 @@
using System; using System.Drawing;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using OpenRA.GameRules; using OpenRA.GameRules;
using System.Windows.Forms; using OpenRA.Traits;
namespace OpenRA.Editor namespace OpenRA.Editor
{ {
@@ -20,4 +16,10 @@ namespace OpenRA.Editor
public Bitmap Bitmap; public Bitmap Bitmap;
public ushort N; public ushort N;
} }
class ResourceTemplate
{
public Bitmap Bitmap;
public ResourceTypeInfo Info;
}
} }

View File

@@ -36,12 +36,14 @@
this.tabPage1 = new System.Windows.Forms.TabPage(); this.tabPage1 = new System.Windows.Forms.TabPage();
this.tilePalette = new System.Windows.Forms.FlowLayoutPanel(); this.tilePalette = new System.Windows.Forms.FlowLayoutPanel();
this.tabPage2 = new System.Windows.Forms.TabPage(); this.tabPage2 = new System.Windows.Forms.TabPage();
this.surface1 = new OpenRA.Editor.Surface();
this.toolStrip1 = new System.Windows.Forms.ToolStrip(); this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.toolStripButton1 = new System.Windows.Forms.ToolStripButton(); this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
this.toolStripButton2 = new System.Windows.Forms.ToolStripButton(); this.toolStripButton2 = new System.Windows.Forms.ToolStripButton();
this.tt = new System.Windows.Forms.ToolTip(this.components); this.tt = new System.Windows.Forms.ToolTip(this.components);
this.actorPalette = new System.Windows.Forms.FlowLayoutPanel(); this.actorPalette = new System.Windows.Forms.FlowLayoutPanel();
this.surface1 = new OpenRA.Editor.Surface();
this.tabPage3 = new System.Windows.Forms.TabPage();
this.resourcePalette = new System.Windows.Forms.FlowLayoutPanel();
this.toolStripContainer1.ContentPanel.SuspendLayout(); this.toolStripContainer1.ContentPanel.SuspendLayout();
this.toolStripContainer1.TopToolStripPanel.SuspendLayout(); this.toolStripContainer1.TopToolStripPanel.SuspendLayout();
this.toolStripContainer1.SuspendLayout(); this.toolStripContainer1.SuspendLayout();
@@ -52,6 +54,7 @@
this.tabPage1.SuspendLayout(); this.tabPage1.SuspendLayout();
this.tabPage2.SuspendLayout(); this.tabPage2.SuspendLayout();
this.toolStrip1.SuspendLayout(); this.toolStrip1.SuspendLayout();
this.tabPage3.SuspendLayout();
this.SuspendLayout(); this.SuspendLayout();
// //
// toolStripContainer1 // toolStripContainer1
@@ -94,6 +97,7 @@
this.tabControl1.Alignment = System.Windows.Forms.TabAlignment.Left; this.tabControl1.Alignment = System.Windows.Forms.TabAlignment.Left;
this.tabControl1.Controls.Add(this.tabPage1); this.tabControl1.Controls.Add(this.tabPage1);
this.tabControl1.Controls.Add(this.tabPage2); this.tabControl1.Controls.Add(this.tabPage2);
this.tabControl1.Controls.Add(this.tabPage3);
this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tabControl1.Location = new System.Drawing.Point(0, 0); this.tabControl1.Location = new System.Drawing.Point(0, 0);
this.tabControl1.Multiline = true; this.tabControl1.Multiline = true;
@@ -133,16 +137,6 @@
this.tabPage2.Text = "Actors"; this.tabPage2.Text = "Actors";
this.tabPage2.UseVisualStyleBackColor = true; this.tabPage2.UseVisualStyleBackColor = true;
// //
// surface1
//
this.surface1.BackColor = System.Drawing.Color.Black;
this.surface1.Dock = System.Windows.Forms.DockStyle.Fill;
this.surface1.Location = new System.Drawing.Point(0, 0);
this.surface1.Name = "surface1";
this.surface1.Size = new System.Drawing.Size(783, 680);
this.surface1.TabIndex = 2;
this.surface1.Text = "surface1";
//
// toolStrip1 // toolStrip1
// //
this.toolStrip1.Dock = System.Windows.Forms.DockStyle.None; this.toolStrip1.Dock = System.Windows.Forms.DockStyle.None;
@@ -184,6 +178,35 @@
this.actorPalette.Size = new System.Drawing.Size(165, 666); this.actorPalette.Size = new System.Drawing.Size(165, 666);
this.actorPalette.TabIndex = 2; this.actorPalette.TabIndex = 2;
// //
// surface1
//
this.surface1.BackColor = System.Drawing.Color.Black;
this.surface1.Dock = System.Windows.Forms.DockStyle.Fill;
this.surface1.Location = new System.Drawing.Point(0, 0);
this.surface1.Name = "surface1";
this.surface1.Size = new System.Drawing.Size(783, 680);
this.surface1.TabIndex = 2;
this.surface1.Text = "surface1";
//
// tabPage3
//
this.tabPage3.Controls.Add(this.resourcePalette);
this.tabPage3.Location = new System.Drawing.Point(23, 4);
this.tabPage3.Name = "tabPage3";
this.tabPage3.Size = new System.Drawing.Size(171, 672);
this.tabPage3.TabIndex = 2;
this.tabPage3.Text = "Resources";
this.tabPage3.UseVisualStyleBackColor = true;
//
// resourcePalette
//
this.resourcePalette.AutoScroll = true;
this.resourcePalette.Dock = System.Windows.Forms.DockStyle.Fill;
this.resourcePalette.Location = new System.Drawing.Point(0, 0);
this.resourcePalette.Name = "resourcePalette";
this.resourcePalette.Size = new System.Drawing.Size(171, 672);
this.resourcePalette.TabIndex = 3;
//
// Form1 // Form1
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -205,6 +228,7 @@
this.tabPage2.ResumeLayout(false); this.tabPage2.ResumeLayout(false);
this.toolStrip1.ResumeLayout(false); this.toolStrip1.ResumeLayout(false);
this.toolStrip1.PerformLayout(); this.toolStrip1.PerformLayout();
this.tabPage3.ResumeLayout(false);
this.ResumeLayout(false); this.ResumeLayout(false);
} }
@@ -223,6 +247,8 @@
private System.Windows.Forms.TabPage tabPage2; private System.Windows.Forms.TabPage tabPage2;
private System.Windows.Forms.ToolStripButton toolStripButton2; private System.Windows.Forms.ToolStripButton toolStripButton2;
private System.Windows.Forms.FlowLayoutPanel actorPalette; private System.Windows.Forms.FlowLayoutPanel actorPalette;
private System.Windows.Forms.TabPage tabPage3;
private System.Windows.Forms.FlowLayoutPanel resourcePalette;
} }
} }

View File

@@ -18,12 +18,14 @@ namespace OpenRA.Editor
AppDomain.CurrentDomain.AssemblyResolve += FileSystem.ResolveAssembly; AppDomain.CurrentDomain.AssemblyResolve += FileSystem.ResolveAssembly;
LocateGameRoot(); LocateGameRoot();
LoadMap("cnc", "scm02ea"); LoadMap("ra", "mjolnir");
} }
void LoadMap(string mod, string mapname) void LoadMap(string mod, string mapname)
{ {
tilePalette.Controls.Clear(); tilePalette.Controls.Clear();
actorPalette.Controls.Clear();
resourcePalette.Controls.Clear();
var mods = new[] { mod }; var mods = new[] { mod };
@@ -110,6 +112,37 @@ namespace OpenRA.Editor
} }
surface1.BindActorTemplates(actorTemplates); surface1.BindActorTemplates(actorTemplates);
var resourceTemplates = new List<ResourceTemplate>();
foreach (var a in Rules.Info["world"].Traits.WithInterface<ResourceTypeInfo>())
{
try
{
var template = RenderResourceType(a, tsinfo.First, palette);
var ibox = new PictureBox
{
Image = template.Bitmap,
Width = template.Bitmap.Width,
Height = template.Bitmap.Height,
SizeMode = PictureBoxSizeMode.StretchImage
};
ibox.Click += (_, e) => surface1.SetResource(template);
resourcePalette.Controls.Add(ibox);
tt.SetToolTip(ibox,
"{0}:{1}cr".F(
template.Info.Name,
template.Info.ValuePerUnit));
resourceTemplates.Add(template);
}
catch { }
}
surface1.BindResourceTemplates(resourceTemplates);
} }
void LocateGameRoot() void LocateGameRoot()
@@ -195,6 +228,33 @@ namespace OpenRA.Editor
} }
} }
static ResourceTemplate RenderResourceType(ResourceTypeInfo info, string ext, Palette p)
{
var image = info.SpriteNames[0];
using (var s = FileSystem.OpenWithExts(image, "." + ext, ".shp"))
{
var shp = new ShpReader(s);
var frame = shp[shp.ImageCount - 1];
var bitmap = new Bitmap(shp.Width, shp.Height);
var data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
unsafe
{
int* q = (int*)data.Scan0.ToPointer();
var stride = data.Stride >> 2;
for (var i = 0; i < shp.Width; i++)
for (var j = 0; j < shp.Height; j++)
q[j * stride + i] = p.GetColor(frame.Image[i + shp.Width * j]).ToArgb();
}
bitmap.UnlockBits(data);
return new ResourceTemplate { Bitmap = bitmap, Info = info };
}
}
void ResizeClicked(object sender, EventArgs e) void ResizeClicked(object sender, EventArgs e)
{ {
using (var rd = new ResizeDialog()) using (var rd = new ResizeDialog())

View File

@@ -18,6 +18,7 @@ namespace OpenRA.Editor
public ActorTemplate Actor; public ActorTemplate Actor;
Dictionary<string, ActorTemplate> ActorTemplates = new Dictionary<string, ActorTemplate>(); Dictionary<string, ActorTemplate> ActorTemplates = new Dictionary<string, ActorTemplate>();
Dictionary<int, ResourceTemplate> ResourceTemplates = new Dictionary<int, ResourceTemplate>();
public void Bind(Map m, TileSet ts, Palette p) public void Bind(Map m, TileSet ts, Palette p)
{ {
@@ -30,12 +31,18 @@ namespace OpenRA.Editor
public void SetBrush(BrushTemplate brush) { Actor = null; Brush = brush; } public void SetBrush(BrushTemplate brush) { Actor = null; Brush = brush; }
public void SetActor(ActorTemplate actor) { Brush = null; Actor = actor; } public void SetActor(ActorTemplate actor) { Brush = null; Actor = actor; }
public void SetResource(ResourceTemplate resource) { Brush = null; Actor = null; /* todo */ }
public void BindActorTemplates(IEnumerable<ActorTemplate> templates) public void BindActorTemplates(IEnumerable<ActorTemplate> templates)
{ {
ActorTemplates = templates.ToDictionary(a => a.Info.Name.ToLowerInvariant()); ActorTemplates = templates.ToDictionary(a => a.Info.Name.ToLowerInvariant());
} }
public void BindResourceTemplates(IEnumerable<ResourceTemplate> templates)
{
/* todo */
}
Dictionary<int2, Bitmap> Chunks = new Dictionary<int2, Bitmap>(); Dictionary<int2, Bitmap> Chunks = new Dictionary<int2, Bitmap>();
public Surface() public Surface()