The actor and smudge definitions are now stored as raw MiniYamlNodes in the map. It is now the responsibility of the consumers to parse these into real objects.
52 lines
1.3 KiB
C#
52 lines
1.3 KiB
C#
#region Copyright & License Information
|
|
/*
|
|
* Copyright 2007-2015 The OpenRA Developers (see AUTHORS)
|
|
* This file is part of OpenRA, which is free software. It is made
|
|
* available to you under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation. For more information,
|
|
* see COPYING.
|
|
*/
|
|
#endregion
|
|
|
|
using System.Linq;
|
|
using SGraphics = System.Drawing.Graphics;
|
|
|
|
namespace OpenRA.Editor
|
|
{
|
|
class ActorTool : ITool
|
|
{
|
|
ActorTemplate actorTemplate;
|
|
public ActorTool(ActorTemplate actor) { this.actorTemplate = actor; }
|
|
|
|
public void Preview(Surface surface, SGraphics g)
|
|
{
|
|
surface.DrawActor(g, surface.GetBrushLocation(), actorTemplate,
|
|
surface.GetPaletteForPlayer(surface.NewActorOwner));
|
|
}
|
|
|
|
public void Apply(Surface surface)
|
|
{
|
|
if (surface.Actors.Any(a => a.Value.Location() == surface.GetBrushLocation()))
|
|
return;
|
|
|
|
var owner = surface.NewActorOwner;
|
|
var id = NextActorName(surface);
|
|
surface.Actors[id] = new ActorReference(actorTemplate.Info.Name.ToLowerInvariant())
|
|
{
|
|
new LocationInit(surface.GetBrushLocation()),
|
|
new OwnerInit(owner)
|
|
};
|
|
}
|
|
|
|
static string NextActorName(Surface surface)
|
|
{
|
|
var id = 0;
|
|
for (;;)
|
|
{
|
|
var possible = "Actor{0}".F(id++);
|
|
if (!surface.Actors.ContainsKey(possible)) return possible;
|
|
}
|
|
}
|
|
}
|
|
}
|