Copyright (c) 2008-2015 GIANTS Software GmbH, Confidential, All Rights Reserved.
This document is to be published solely by ls-mods.de
1 | -- Copyright (C) GIANTS Software GmbH, Confidential, All Rights Reserved. |
2 | |
3 | FruitPreparerAreaEvent = {}; |
4 | FruitPreparerAreaEvent_mt = Class(FruitPreparerAreaEvent, Event); |
5 | |
6 | InitStaticEventClass(FruitPreparerAreaEvent, "FruitPreparerAreaEvent", EventIds.EVENT_FRUIT_PREPARER_AREA); |
7 | |
8 | function FruitPreparerAreaEvent:emptyNew() |
9 | local self = Event:new(FruitPreparerAreaEvent_mt); |
10 | return self; |
11 | end |
12 | |
13 | function FruitPreparerAreaEvent:new(areas, numAreas, fruitType) |
14 | local self = FruitPreparerAreaEvent:emptyNew() |
15 | self.areas = areas; |
16 | self.numAreas = numAreas; |
17 | self.fruitType = fruitType; |
18 | assert(numAreas <= 8 and numAreas > 0); |
19 | return self; |
20 | end |
21 | |
22 | function FruitPreparerAreaEvent:readStream(streamId, connection) |
23 | local numAreas = streamReadUIntN(streamId, 3)+1; |
24 | local fruitType = streamReadUIntN(streamId, FruitUtil.sendNumBits); |
25 | |
26 | local params = g_currentMission.areaCompressionParams; |
27 | local paramsRelative = g_currentMission.areaRelativeCompressionParams; |
28 | for i=1, numAreas do |
29 | local x = Utils.readCompressedWorldPosition(streamId, params); |
30 | local z = Utils.readCompressedWorldPosition(streamId, params); |
31 | local x1 = x + Utils.readCompressedWorldPosition(streamId, paramsRelative); |
32 | local z1 = z + Utils.readCompressedWorldPosition(streamId, paramsRelative); |
33 | local x2 = x + Utils.readCompressedWorldPosition(streamId, paramsRelative); |
34 | local z2 = z + Utils.readCompressedWorldPosition(streamId, paramsRelative); |
35 | if streamReadBool(streamId) then |
36 | local dx = x + Utils.readCompressedWorldPosition(streamId, paramsRelative); |
37 | local dz = z + Utils.readCompressedWorldPosition(streamId, paramsRelative); |
38 | local dx1 = x + Utils.readCompressedWorldPosition(streamId, paramsRelative); |
39 | local dz1 = z + Utils.readCompressedWorldPosition(streamId, paramsRelative); |
40 | local dx2 = x + Utils.readCompressedWorldPosition(streamId, paramsRelative); |
41 | local dz2 = z + Utils.readCompressedWorldPosition(streamId, paramsRelative); |
42 | Utils.updateFruitPreparerArea(fruitType, x, z, x1, z1, x2, z2, dx, dz, dx1, dz1, dx2, dz2); |
43 | else |
44 | Utils.updateFruitPreparerArea(fruitType, x, z, x1, z1, x2, z2, x, z, x1, z1, x2, z2); |
45 | end |
46 | end |
47 | end |
48 | |
49 | function FruitPreparerAreaEvent:writeStream(streamId, connection) |
50 | streamWriteUIntN(streamId, self.numAreas-1, 3); |
51 | streamWriteUIntN(streamId, self.fruitType, FruitUtil.sendNumBits); |
52 | |
53 | local params = g_currentMission.areaCompressionParams; |
54 | local paramsRelative = g_currentMission.areaRelativeCompressionParams; |
55 | for i=1, self.numAreas do |
56 | local area = self.areas[i]; |
57 | Utils.writeCompressedWorldPosition(streamId, area.x, params); |
58 | Utils.writeCompressedWorldPosition(streamId, area.z, params); |
59 | Utils.writeCompressedWorldPosition(streamId, area.x1 - area.x, paramsRelative); |
60 | Utils.writeCompressedWorldPosition(streamId, area.z1 - area.z, paramsRelative); |
61 | Utils.writeCompressedWorldPosition(streamId, area.x2 - area.x, paramsRelative); |
62 | Utils.writeCompressedWorldPosition(streamId, area.z2 - area.z, paramsRelative); |
63 | if streamWriteBool(streamId, area.hasSeparateDropArea) then |
64 | Utils.writeCompressedWorldPosition(streamId, area.dx - area.x, paramsRelative); |
65 | Utils.writeCompressedWorldPosition(streamId, area.dz - area.z, paramsRelative); |
66 | Utils.writeCompressedWorldPosition(streamId, area.dx1 - area.x, paramsRelative); |
67 | Utils.writeCompressedWorldPosition(streamId, area.dz1 - area.z, paramsRelative); |
68 | Utils.writeCompressedWorldPosition(streamId, area.dx2 - area.x, paramsRelative); |
69 | Utils.writeCompressedWorldPosition(streamId, area.dz2 - area.z, paramsRelative); |
70 | end |
71 | end |
72 | end |
73 | |
74 | function FruitPreparerAreaEvent:run(connection) |
75 | print("Error: Do not run FruitPreparerAreaEvent locally"); |
76 | end |
77 | |
78 | |
79 | function FruitPreparerAreaEvent.runLocally(areas, numAreas, fruitType) |
80 | |
81 | local params = g_currentMission.areaCompressionParams; |
82 | local paramsRelative = g_currentMission.areaRelativeCompressionParams; |
83 | |
84 | local numAreasUsed = 0; |
85 | for i=1, numAreas do |
86 | local area = areas[i]; |
87 | |
88 | local x = Utils.simWriteCompressedWorldPosition(area.x, params); |
89 | local z = Utils.simWriteCompressedWorldPosition(area.z, params); |
90 | local x1 = x + Utils.simWriteCompressedWorldPosition(area.x1 - area.x, paramsRelative); |
91 | local z1 = z + Utils.simWriteCompressedWorldPosition(area.z1 - area.z, paramsRelative); |
92 | local x2 = x + Utils.simWriteCompressedWorldPosition(area.x2 - area.x, paramsRelative); |
93 | local z2 = z + Utils.simWriteCompressedWorldPosition(area.z2 - area.z, paramsRelative); |
94 | |
95 | local areaChanged = 0; |
96 | if area.hasSeparateDropArea then |
97 | local dx = x + Utils.simWriteCompressedWorldPosition(area.dx - area.x, paramsRelative); |
98 | local dz = z + Utils.simWriteCompressedWorldPosition(area.dz - area.z, paramsRelative); |
99 | local dx1 = x + Utils.simWriteCompressedWorldPosition(area.dx1 - area.x, paramsRelative); |
100 | local dz1 = z + Utils.simWriteCompressedWorldPosition(area.dz1 - area.z, paramsRelative); |
101 | local dx2 = x + Utils.simWriteCompressedWorldPosition(area.dx2 - area.x, paramsRelative); |
102 | local dz2 = z + Utils.simWriteCompressedWorldPosition(area.dz2 - area.z, paramsRelative); |
103 | |
104 | areaChanged = Utils.updateFruitPreparerArea(fruitType, x, z, x1, z1, x2, z2, dx, dz, dx1, dz1, dx2, dz2); |
105 | else |
106 | areaChanged = Utils.updateFruitPreparerArea(fruitType, x, z, x1, z1, x2, z2, x, z, x1, z1, x2, z2); |
107 | end |
108 | |
109 | if areaChanged > 0 then |
110 | numAreasUsed = numAreasUsed + 1; |
111 | if numAreasUsed ~= i then |
112 | -- swap the areas so that we have all used areas at the beginning |
113 | areas[numAreasUsed], areas[i] = areas[i], areas[numAreasUsed]; |
114 | end |
115 | end |
116 | end |
117 | return numAreasUsed; |
118 | end
|
Copyright (c) 2008-2015 GIANTS Software GmbH, Confidential, All Rights Reserved.
This document is to be published solely by ls-mods.de