-
Notifications
You must be signed in to change notification settings - Fork 0
/
EnemyFOVController.cs
49 lines (42 loc) · 1.77 KB
/
EnemyFOVController.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/*using System;
using GoRogue.Components.ParentAware;
using GoRogue.FOV;
using GoRogue.GameFramework;
using SadRogue.Integration;
using SadRogue.Integration.Components;
using SadRogue.Primitives;
namespace AsciiGame
{
/// <summary>
/// Component that you can attach to your player object to ensure that it re-calculates the map's FOV whenever the
/// object is moved. This could be also be achieved via a subclass of RogueLikeEntity; however the integration library
/// makes it quick and easy to create custom components that function in both SadConsole's and GoRogue's component systems.
/// </summary>
internal class EnemyFOVController : RogueLikeComponentBase<RogueLikeEntity>
{
/// <summary>
/// The sight radius of the player.
/// </summary>
public int FOVRadius { get; init; } = 8;
public EnemyFOVController()
: base(false, false, false, false)
{
// When the component is attached/detached from an object, set/reset hooks so that FOV is recalculated when
// the object moves
Added += OnAdded;
Removed += OnRemoved;
}
/// <summary>
/// Calculate player FOV if the parent is part of a map.
/// </summary>
public void CalculateFOV()
=> Parent?.CurrentMap?.PlayerFOV.Calculate(Parent.Position, FOVRadius, Parent.CurrentMap.DistanceMeasurement);
private void OnAdded(object s, EventArgs e) => Parent!.Moved += OnMoved;
private void OnRemoved(object s, ParentAwareComponentRemovedEventArgs<RogueLikeEntity> e)
=> e.OldParent.Moved -= OnMoved;
private void OnMoved(object sender, GameObjectPropertyChanged<Point> e)
{
CalculateFOV();
}
}
}*/