-
Notifications
You must be signed in to change notification settings - Fork 20
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Issue #40 update Reduced sight then moving
- Loading branch information
1 parent
f13105c
commit c2d0bd2
Showing
19 changed files
with
212 additions
and
20 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,125 @@ | ||
#region Copyright & License Information | ||
/* | ||
* Copyright 2007-2017 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, either version 3 of | ||
* the License, or (at your option) any later version. For more | ||
* information, see COPYING. | ||
*/ | ||
#endregion | ||
|
||
using System.Linq; | ||
using OpenRA.Traits; | ||
using OpenRA.Mods.Common.Traits; | ||
|
||
namespace OpenRA.Mods.D2.Traits | ||
{ | ||
public abstract class D2AffectsShroudInfo : ConditionalTraitInfo | ||
{ | ||
[Desc("Range applied then idle.")] | ||
public readonly WDist Range = WDist.Zero; | ||
|
||
[Desc("Range applied then moving.")] | ||
public readonly WDist MovingRange = new WDist(1280); | ||
|
||
[Desc("If >= 0, prevent cells that are this much higher than the actor from being revealed.")] | ||
public readonly int MaxHeightDelta = -1; | ||
|
||
[Desc("Possible values are CenterPosition (measure range from the center) and ", | ||
"Footprint (measure range from the footprint)")] | ||
public readonly VisibilityType Type = VisibilityType.Footprint; | ||
} | ||
|
||
public abstract class D2AffectsShroud : ConditionalTrait<D2AffectsShroudInfo>, ITick, ISync, INotifyAddedToWorld, INotifyRemovedFromWorld | ||
{ | ||
static readonly PPos[] NoCells = { }; | ||
|
||
D2AffectsShroudInfo info; | ||
|
||
[Sync] CPos cachedLocation; | ||
[Sync] bool cachedDisabled; | ||
[Sync] bool cachedTraitDisabled; | ||
[Sync] bool cachedIdle; | ||
|
||
protected abstract void AddCellsToPlayerShroud(Actor self, Player player, PPos[] uv); | ||
protected abstract void RemoveCellsFromPlayerShroud(Actor self, Player player); | ||
protected virtual bool IsDisabled(Actor self) { return false; } | ||
|
||
public D2AffectsShroud(Actor self, D2AffectsShroudInfo info) | ||
: base(info) | ||
{ | ||
this.info = info; | ||
} | ||
|
||
PPos[] ProjectedCells(Actor self) | ||
{ | ||
var map = self.World.Map; | ||
var range = self.IsIdle ? Range : info.MovingRange; | ||
if (range == WDist.Zero) | ||
return NoCells; | ||
|
||
if (Info.Type == VisibilityType.Footprint) | ||
return self.OccupiesSpace.OccupiedCells() | ||
.SelectMany(kv => Shroud.ProjectedCellsInRange(map, kv.First, range, Info.MaxHeightDelta)) | ||
.Distinct().ToArray(); | ||
|
||
var pos = self.CenterPosition; | ||
if (Info.Type == VisibilityType.GroundPosition) | ||
pos -= new WVec(WDist.Zero, WDist.Zero, self.World.Map.DistanceAboveTerrain(pos)); | ||
|
||
return Shroud.ProjectedCellsInRange(map, pos, range, Info.MaxHeightDelta) | ||
.ToArray(); | ||
} | ||
|
||
void ITick.Tick(Actor self) | ||
{ | ||
if (!self.IsInWorld) | ||
return; | ||
|
||
var centerPosition = self.CenterPosition; | ||
var projectedPos = centerPosition - new WVec(0, centerPosition.Z, centerPosition.Z); | ||
var projectedLocation = self.World.Map.CellContaining(projectedPos); | ||
var disabled = IsDisabled(self); | ||
var traitDisabled = IsTraitDisabled; | ||
var idle = self.IsIdle; | ||
|
||
if (cachedLocation == projectedLocation && traitDisabled == cachedTraitDisabled && cachedDisabled == disabled && cachedIdle == idle) | ||
return; | ||
|
||
cachedLocation = projectedLocation; | ||
cachedDisabled = disabled; | ||
cachedTraitDisabled = traitDisabled; | ||
cachedIdle = idle; | ||
|
||
var cells = ProjectedCells(self); | ||
foreach (var p in self.World.Players) | ||
{ | ||
RemoveCellsFromPlayerShroud(self, p); | ||
AddCellsToPlayerShroud(self, p, cells); | ||
} | ||
} | ||
|
||
void INotifyAddedToWorld.AddedToWorld(Actor self) | ||
{ | ||
var centerPosition = self.CenterPosition; | ||
var projectedPos = centerPosition - new WVec(0, centerPosition.Z, centerPosition.Z); | ||
cachedLocation = self.World.Map.CellContaining(projectedPos); | ||
cachedDisabled = IsDisabled(self); | ||
cachedTraitDisabled = IsTraitDisabled; | ||
cachedIdle = self.IsIdle; | ||
var cells = ProjectedCells(self); | ||
|
||
foreach (var p in self.World.Players) | ||
AddCellsToPlayerShroud(self, p, cells); | ||
} | ||
|
||
void INotifyRemovedFromWorld.RemovedFromWorld(Actor self) | ||
{ | ||
foreach (var p in self.World.Players) | ||
RemoveCellsFromPlayerShroud(self, p); | ||
} | ||
|
||
public WDist Range { get { return (cachedDisabled || cachedTraitDisabled) ? WDist.Zero : Info.Range; } } | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
#region Copyright & License Information | ||
/* | ||
* Copyright 2007-2017 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, either version 3 of | ||
* the License, or (at your option) any later version. For more | ||
* information, see COPYING. | ||
*/ | ||
#endregion | ||
|
||
using OpenRA.Traits; | ||
using OpenRA.Mods.Common.Traits; | ||
|
||
namespace OpenRA.Mods.D2.Traits | ||
{ | ||
public class D2RevealsShroudInfo : D2AffectsShroudInfo | ||
{ | ||
[Desc("Stance the watching player needs to see the shroud removed.")] | ||
public readonly Stance ValidStances = Stance.Ally; | ||
|
||
[Desc("Can this actor reveal shroud generated by the GeneratesShroud trait?")] | ||
public readonly bool RevealGeneratedShroud = true; | ||
|
||
public override object Create(ActorInitializer init) { return new D2RevealsShroud(init.Self, this); } | ||
} | ||
|
||
public class D2RevealsShroud : D2AffectsShroud | ||
{ | ||
readonly D2RevealsShroudInfo info; | ||
readonly Shroud.SourceType type; | ||
|
||
public D2RevealsShroud(Actor self, D2RevealsShroudInfo info) | ||
: base(self, info) | ||
{ | ||
this.info = info; | ||
type = info.RevealGeneratedShroud ? Shroud.SourceType.Visibility | ||
: Shroud.SourceType.PassiveVisibility; | ||
} | ||
|
||
protected override void AddCellsToPlayerShroud(Actor self, Player p, PPos[] uv) | ||
{ | ||
if (!info.ValidStances.HasStance(p.Stances[self.Owner])) | ||
return; | ||
|
||
p.Shroud.AddSource(this, type, uv); | ||
} | ||
|
||
protected override void RemoveCellsFromPlayerShroud(Actor self, Player p) { p.Shroud.RemoveSource(this); } | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -21,7 +21,7 @@ barracks: | |
Armor: | ||
Type: wood | ||
RevealsShroud: | ||
Range: 3c768 | ||
Range: 2c0 | ||
RallyPoint: | ||
Offset: 1,2 | ||
Exit@1: | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters