Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_FuelManagerComponentSerializer.c
Go to the documentation of this file.
2{
3 int tankId;
4 float fuel;
5}
6
7class SCR_FuelManagerComponentSerializer : ScriptedComponentSerializer
8{
9 //------------------------------------------------------------------------------------------------
10 override static typename GetTargetType()
11 {
13 }
14
15 //------------------------------------------------------------------------------------------------
16 override protected ESerializeResult Serialize(notnull IEntity owner, notnull GenericComponent component, notnull SaveContext context)
17 {
18 const SCR_FuelManagerComponent fuelManager = SCR_FuelManagerComponent.Cast(component);
19
20 array<ref SCR_SerializedFuelNode> saveNodes();
21 array<SCR_FuelNode> outScriptedNodes();
22 fuelManager.GetScriptedFuelNodesList(outScriptedNodes);
23 foreach (SCR_FuelNode fuelNode : outScriptedNodes)
24 {
25 if (float.AlmostEqual(fuelNode.GetFuel(), fuelNode.GetInitialFuelTankState()))
26 continue;
27
28 SCR_SerializedFuelNode saveNode();
29 saveNode.tankId = fuelNode.GetFuelTankID();
30 saveNode.fuel = fuelNode.GetFuel();
31 saveNodes.Insert(saveNode);
32 }
33
34 if (saveNodes.IsEmpty())
35 return ESerializeResult.DEFAULT;
36
37 context.WriteValue("version", 1);
38 const bool prev = context.EnableTypeDiscriminator(false);
39 context.WriteValue("fuelNodes", saveNodes);
40 context.EnableTypeDiscriminator(prev);
41 return ESerializeResult.OK;
42 }
43
44 //------------------------------------------------------------------------------------------------
45 override protected bool Deserialize(notnull IEntity owner, notnull GenericComponent component, notnull LoadContext context)
46 {
47 auto fuelManager = SCR_FuelManagerComponent.Cast(component);
48
49 array<SCR_FuelNode> outScriptedNodes();
50 fuelManager.GetScriptedFuelNodesList(outScriptedNodes);
51
52 int version = -1;
53 context.ReadValue("version", version);
54
55 array<ref SCR_SerializedFuelNode> saveNodes();
56 const bool prev = context.EnableTypeDiscriminator(false);
57 context.ReadValue("fuelNodes", saveNodes);
58 context.EnableTypeDiscriminator(prev);
59
60 foreach (int idx, SCR_SerializedFuelNode savedNode : saveNodes)
61 {
62 // Try direct idx access
63 if (outScriptedNodes.IsIndexValid(idx))
64 {
65 SCR_FuelNode fuelNode = outScriptedNodes[idx];
66 if (fuelNode.GetFuelTankID() == savedNode.tankId)
67 {
68 fuelNode.SetFuel(savedNode.fuel);
69 break;
70 }
71 }
72
73 // Try others and match tank id
74 foreach (int innerIdx, SCR_FuelNode fuelNode : outScriptedNodes)
75 {
76 if (innerIdx == idx)
77 continue; // Already tried via direct access
78
79 if (fuelNode.GetFuelTankID() == savedNode.tankId)
80 {
81 fuelNode.SetFuel(savedNode.fuel);
82 break;
83 }
84 }
85
86 PrintFormat("Failed to apply fuel save-data. Could not locate tankId:%1 on %2", savedNode.tankId, owner, level: LogLevel.DEBUG);
87 }
88
89 return true;
90 }
91}
class SCR_PersistentThreatSector GetTargetType()
void SCR_FuelManagerComponent(IEntityComponentSource src, IEntity ent, IEntity parent)
ESerializeResult Serialize(notnull IEntity owner, notnull GenericComponent component, notnull SaveContext context)
bool Deserialize(notnull IEntity owner, notnull GenericComponent component, notnull LoadContext context)
LogLevel
Enum with severity of the logging message.
Definition LogLevel.c:14
proto void PrintFormat(string fmt, void param1=NULL, void param2=NULL, void param3=NULL, void param4=NULL, void param5=NULL, void param6=NULL, void param7=NULL, void param8=NULL, void param9=NULL, LogLevel level=LogLevel.NORMAL)
ESerializeResult