Merge pull request #4970 from Phrohdoh/LineBuild

Added LineBuildNode trait to filter which structure(s) a LineBuild actor can be attached to.
Closes #2248
This commit is contained in:
Matthias Mailänder
2014-03-29 12:55:07 +01:00
11 changed files with 85 additions and 5 deletions

View File

@@ -40,6 +40,7 @@ NEW:
Added the BLOXXMAS terrain tiles from the 1.06 patch.
Saboteur can now plant C4 on vehicles.
Added concrete plates and building weathering.
Walls will now extend themselves when placed in line with a turret.
Red Alert:
Engineers are now remapped to team colors.
Added some remap to the bottom edge of SAM sites.
@@ -138,6 +139,7 @@ NEW:
Maps can define initial cargo for actors by adding "Cargo: actora, actorb, ..." to the actor reference.
Modified Teleport activity to use the best/closest open cell to the target destination for teleports (for ChronoshiftPower this only applies on the return trip).
Renamed ChronoshiftDeploy trait to PortableChrono.
Added LineBuildNode trait to filter which structure(s) a LineBuild actor can be attached to.
Server:
Message of the day is now shared between all mods and a default motd.txt gets created in the user directory.
Asset Browser:

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
* Copyright 2007-2014 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,
@@ -18,6 +18,9 @@ namespace OpenRA.Mods.RA.Buildings
{
[Desc("The maximum allowed length of the line.")]
public readonly int Range = 5;
[Desc("LineBuildNode 'Types' to attach to.")]
public readonly string[] NodeTypes = { "wall" };
}
public class LineBuild {}

View File

@@ -0,0 +1,24 @@
#region Copyright & License Information
/*
* Copyright 2007-2014 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 OpenRA.FileFormats;
using OpenRA.Traits;
namespace OpenRA.Mods.RA.Buildings
{
[Desc("LineBuild actors attach to LineBuildNodes.")]
public class LineBuildNodeInfo : TraitInfo<LineBuildNode>
{
[Desc("This actor is of LineBuild 'NodeType'...")]
public readonly string[] Types = { "wall" };
}
public class LineBuildNode {}
}

View File

@@ -42,7 +42,7 @@ namespace OpenRA.Mods.RA.Buildings
public static IEnumerable<CPos> GetLineBuildCells(World world, CPos location, string name, BuildingInfo bi)
{
int range = Rules.Info[name].Traits.Get<LineBuildInfo>().Range;
var lbi = Rules.Info[name].Traits.Get<LineBuildInfo>();
var topLeft = location; // 1x1 assumption!
if (world.IsCellBuildable(topLeft, bi))
@@ -54,17 +54,21 @@ namespace OpenRA.Mods.RA.Buildings
int[] dirs = { 0, 0, 0, 0 };
for (int d = 0; d < 4; d++)
{
for (int i = 1; i < range; i++)
for (int i = 1; i < lbi.Range; i++)
{
if (dirs[d] != 0)
continue;
CPos cell = topLeft + i * vecs[d];
var cell = topLeft + i * vecs[d];
if (world.IsCellBuildable(cell, bi))
continue; // Cell is empty; continue search
// Cell contains an actor. Is it the type we want?
if (world.ActorsWithTrait<LineBuild>().Any(a => (a.Actor.Info.Name == name && a.Actor.Location.X == cell.X && a.Actor.Location.Y == cell.Y)))
if (world.ActorsWithTrait<LineBuildNode>().Any(a =>
(
a.Actor.Location == cell &&
a.Actor.Info.Traits.Get<LineBuildNodeInfo>().Types.Intersect(lbi.NodeTypes).Any()
)))
dirs[d] = i; // Cell contains actor of correct type
else
dirs[d] = -1; // Cell is blocked by another actor type

View File

@@ -490,6 +490,7 @@
<Compile Include="Orders\BeaconOrderGenerator.cs" />
<Compile Include="Widgets\LogicKeyListenerWidget.cs" />
<Compile Include="Widgets\Logic\ControlGroupLogic.cs" />
<Compile Include="Buildings\LineBuildNode.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\OpenRA.FileFormats\OpenRA.FileFormats.csproj">

View File

@@ -447,6 +447,9 @@
CrushSound: sandbag2.aud
LineBuild:
Range: 8
NodeTypes: wall
LineBuildNode:
Types: wall
RenderBuildingWall:
HasMakeAnimation: false
Palette: staticterrain

View File

@@ -726,6 +726,11 @@ SBAG:
HP: 100
Armor:
Type: Light
LineBuild:
Range: 8
NodeTypes: sandbag
LineBuildNode:
Types: sandbag
CYCL:
Inherits: ^Wall
@@ -745,6 +750,11 @@ CYCL:
HP: 100
Armor:
Type: Light
LineBuild:
Range: 8
NodeTypes: chain
LineBuildNode:
Types: chain
BRIK:
Inherits: ^Wall
@@ -769,6 +779,11 @@ BRIK:
-CrushSound:
SoundOnDamageTransition:
DestroyedSound: crumble.aud
LineBuild:
Range: 8
NodeTypes: concrete
LineBuildNode:
Types: concrete
BARRACKS:
Tooltip:

View File

@@ -412,6 +412,9 @@ CONCRETEB:
CrushClasses: Concretewall
LineBuild:
Range: 8
NodeTypes: wall, turret
LineBuildNode:
Types: wall
TargetableBuilding:
TargetTypes: Ground
RenderBuildingWall:
@@ -478,6 +481,8 @@ WALL:
DetectCloaked:
Range: 5
-WithCrumbleOverlay:
LineBuildNode:
Types: turret
^ROCKETTOWER:
Inherits: ^Building
@@ -527,6 +532,8 @@ WALL:
DetectCloaked:
Range: 6
-WithCrumbleOverlay:
LineBuildNode:
Types: turret
^REPAIR:
Inherits: ^Building

View File

@@ -287,6 +287,9 @@
CrushClasses: wall
LineBuild:
Range: 8
NodeTypes: wall
LineBuildNode:
Types: wall
TargetableBuilding:
TargetTypes: Ground, DetonateAttack
RenderBuildingWall:

View File

@@ -1355,6 +1355,11 @@ SBAG:
HP: 300
Armor:
Type: Wood
LineBuild:
Range: 8
NodeTypes: sandbag
LineBuildNode:
Types: sandbag
FENC:
Inherits: ^Wall
@@ -1375,6 +1380,11 @@ FENC:
HP: 300
Armor:
Type: Wood
LineBuild:
Range: 8
NodeTypes: fence
LineBuildNode:
Types: fence
BRIK:
Inherits: ^Wall
@@ -1400,6 +1410,11 @@ BRIK:
Type: Concrete
Wall:
CrushClasses: heavywall
LineBuild:
Range: 8
NodeTypes: concrete
LineBuildNode:
Types: concrete
CYCL:
Inherits: ^Wall

View File

@@ -159,6 +159,9 @@
CrushClasses: wall
LineBuild:
Range: 8
NodeTypes: wall
LineBuildNode:
Types: wall
SelectionDecorations:
Selectable:
Priority: 1