Files
OpenRA/OpenRA.Game/Map/ProjectedCellLayer.cs
let5sne.win10 9cf6ebb986
Some checks failed
Continuous Integration / Linux (.NET 8.0) (push) Has been cancelled
Continuous Integration / Windows (.NET 8.0) (push) Has been cancelled
Initial commit: OpenRA game engine
Fork from OpenRA/OpenRA with one-click launch script (start-ra.cmd)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 21:46:54 +08:00

69 lines
1.5 KiB
C#

#region Copyright & License Information
/*
* Copyright (c) The OpenRA Developers and Contributors
* 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, either version 3 of
* the License, or (at your option) any later version. For more
* information, see COPYING.
*/
#endregion
using System;
using OpenRA.Primitives;
namespace OpenRA
{
public sealed class ProjectedCellLayer<T> : CellLayerBase<T>
{
public int MaxIndex => Size.Width * Size.Height;
public ProjectedCellLayer(Map map)
: base(map) { }
public ProjectedCellLayer(MapGridType gridType, Size size)
: base(gridType, size) { }
// Resolve an array index from map coordinates.
public int Index(PPos uv)
{
return uv.V * Size.Width + uv.U;
}
public PPos PPosFromIndex(int index)
{
return new PPos(index % Size.Width, index / Size.Width);
}
public T this[int index]
{
get => Entries[index];
set => Entries[index] = value;
}
/// <summary>Gets or sets the layer contents using projected map coordinates.</summary>
public T this[PPos uv]
{
get => Entries[Index(uv)];
set => Entries[Index(uv)] = value;
}
public bool Contains(PPos uv)
{
return Bounds.Contains(uv.U, uv.V);
}
public int IndexOf(T value, int startIndex)
{
return Array.IndexOf(Entries, value, startIndex);
}
public void SetAll(T value)
{
Array.Fill(Entries, value);
}
}
}