-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMainQuestNobleVM.cs
122 lines (100 loc) · 3.94 KB
/
MainQuestNobleVM.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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
using SandBox.ViewModelCollection.Map;
using System;
using System.Linq;
using TaleWorlds.CampaignSystem;
using TaleWorlds.CampaignSystem.Party;
using TaleWorlds.CampaignSystem.Settlements;
using TaleWorlds.Engine;
using TaleWorlds.Library;
namespace MainQuestNoble
{
public class MainQuestNobleVM : ViewModel
{
private readonly MapMobilePartyTrackerVM _mapMobilePartyTrackerVM;
private readonly Camera _mapCamera;
private readonly Action<Vec2> _fastMoveCameraToPosition;
private MobileParty _partyToTrack;
private Army _armyToTrack;
public MobileParty PartyToTrack
{
get => _partyToTrack;
set
{
if (value != _partyToTrack)
{
_partyToTrack = value;
OnPropertyChangedWithValue(value, "PartyToTrack");
}
}
}
public Army ArmyToTrack
{
get => _armyToTrack;
set
{
if (value != _armyToTrack)
{
_armyToTrack = value;
OnPropertyChangedWithValue(value, "ArmyToTrack");
}
}
}
public MainQuestNobleVM(MapMobilePartyTrackerVM mapMobilePartyTrackerVM, Camera mapCamera, Action<Vec2> fastMoveCameraToPosition)
{
_mapMobilePartyTrackerVM = mapMobilePartyTrackerVM;
_mapCamera = mapCamera;
_fastMoveCameraToPosition = fastMoveCameraToPosition;
CampaignEvents.MobilePartyDestroyed.AddNonSerializedListener(this, new Action<MobileParty, PartyBase>(OnPartyDestroyed));
CampaignEvents.OnPartyDisbandedEvent.AddNonSerializedListener(this, new Action<MobileParty, Settlement>(OnPartyDisbanded));
CampaignEvents.ArmyDispersed.AddNonSerializedListener(this, new Action<Army, Army.ArmyDispersionReason, bool>(OnArmyDispersed));
}
public void SetPartyAndArmyToTrack(MobileParty partyToTrack, Army armyToTrack)
{
PartyToTrack = partyToTrack;
ArmyToTrack = armyToTrack;
Init();
}
private void OnPartyDestroyed(MobileParty mobileParty, PartyBase arg2)
{
if (mobileParty == PartyToTrack)
{
PartyToTrack = null;
Init();
}
}
private void OnPartyDisbanded(MobileParty disbandedParty, Settlement relatedSettlement)
{
if (disbandedParty == PartyToTrack)
{
PartyToTrack = null;
Init();
}
}
private void OnArmyDispersed(Army army, Army.ArmyDispersionReason arg2, bool arg3)
{
if (army == ArmyToTrack)
{
ArmyToTrack = null;
Init();
}
}
private void Init() => RemoveAndAdd(PartyToTrack, ArmyToTrack);
private void RemoveAndAdd(MobileParty party, Army army)
{
MBBindingList<MobilePartyTrackItemVM> trackers = _mapMobilePartyTrackerVM.Trackers;
Clan playerClan = Clan.PlayerClan;
trackers.Remove(trackers.FirstOrDefault(t => (!playerClan.WarPartyComponents.Contains(t.TrackedParty?.WarPartyComponent)) && (playerClan.Kingdom == null || !playerClan.Kingdom.Armies.Contains(t.TrackedArmy))));
if (party != null)
{
if (army == null || !army.DoesLeaderPartyAndAttachedPartiesContain(party))
{
trackers.Add(new MobilePartyTrackItemVM(party, _mapCamera, _fastMoveCameraToPosition));
}
else
{
trackers.Add(new MobilePartyTrackItemVM(army, _mapCamera, _fastMoveCameraToPosition));
}
}
}
}
}