-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDroneManager.cpp
More file actions
82 lines (72 loc) · 2.39 KB
/
Copy pathDroneManager.cpp
File metadata and controls
82 lines (72 loc) · 2.39 KB
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
#include "Public/DroneManager.h"
#include "Public/DroneStationBlockLogic.h"
#include "Evospace/Online/Actions/RailNetActions.h"
#include "Public/StationNameUtils.h"
void UDroneManager::RegisterStation(UDroneStationBlockLogic *Station) {
if (!Station) {
return;
}
if (Station->StationName.IsEmpty()) {
Station->StationName = GenerateDefaultStationName();
}
Stations.Add(Station->GetBlockPos(), Station);
}
void UDroneManager::UnregisterStation(UDroneStationBlockLogic *Station) {
if (!Station) {
return;
}
if (UDroneStationBlockLogic **FoundStation = Stations.Find(Station->GetBlockPos())) {
if (*FoundStation == Station) {
Stations.Remove(Station->GetBlockPos());
}
}
}
UDroneStationBlockLogic *UDroneManager::FindStationAt(const Vec3i &Pos) const {
UDroneStationBlockLogic *const *FoundStation = Stations.Find(Pos);
return FoundStation ? *FoundStation : nullptr;
}
void UDroneManager::FindStationsByName(const FString &Name, TArray<UDroneStationBlockLogic *> &Out) const {
Out.Reset();
if (Name.IsEmpty()) {
return;
}
for (const TPair<FQrVector3i, UDroneStationBlockLogic *> &Pair : Stations) {
if (Pair.Value && Pair.Value->StationName == Name) {
Out.Add(Pair.Value);
}
}
Out.Sort([](const UDroneStationBlockLogic &A, const UDroneStationBlockLogic &B) {
return A.GetBlockPos() < B.GetBlockPos();
});
}
bool UDroneManager::RenameStation(APlayerController *Pc, UDroneStationBlockLogic *Station, const FString &NewName) {
if (!Station || FindStationAt(Station->GetBlockPos()) != Station) {
return false;
}
const FString Trimmed = NewName.TrimStartAndEnd();
if (Trimmed.IsEmpty() || Trimmed == Station->StationName) {
return false;
}
Station->StationName = Trimmed;
if (Pc) {
FStationRenameAction Action;
const auto Pos = Station->GetBlockPos();
Action.Pos = FIntVector(Pos.X, Pos.Y, Pos.Z);
Action.NewName = Trimmed;
SubmitNetAction(Pc, Action);
}
return true;
}
FString UDroneManager::GenerateDefaultStationName() const {
return EvoStationName::SmallestFreeDefaultName(GetAllStationNames());
}
TArray<FString> UDroneManager::GetAllStationNames() const {
TArray<FString> Names;
for (const TPair<FQrVector3i, UDroneStationBlockLogic *> &Pair : Stations) {
if (Pair.Value && !Pair.Value->StationName.IsEmpty()) {
Names.AddUnique(Pair.Value->StationName);
}
}
Names.Sort();
return Names;
}