LUADOC - Farming Simulator 22

CrowsWildlife

Description
Crows Wildlife class
Parent
LightWildlife
Functions

createAnimals

Description
Create animals
Definition
createAnimals(string name, float spawnPosX, float spawnPosY, float spawnPosZ, integer nbAnimals)
Arguments
stringnamename of animals to spawn
floatspawnPosXworld x position
floatspawnPosYworld y position
floatspawnPosZworld z position
integernbAnimalsamount of animals to spawn
Return Values
integeridof the animal group
Code
121function CrowsWildlife:createAnimals(name, spawnPosX, spawnPosY, spawnPosZ, nbAnimals)
122 if #self.animals == 0 then
123 self.soundFSM:changeState(CrowsWildlife.CROW_SOUND_STATES.CALM_GROUND)
124 end
125 local id = CrowsWildlife:superClass().createAnimals(self, name, spawnPosX, spawnPosY, spawnPosZ, nbAnimals)
126 return id
127end

delete

Description
Delete instance
Definition
delete()
Code
61function CrowsWildlife:delete()
62 g_soundManager:deleteSamples(self.samples.flyAway)
63 g_soundManager:deleteSamples(self.samples.calmGround)
64 g_soundManager:deleteSample(self.samples.busy)
65 g_soundManager:deleteSample(self.samples.calmAir)
66
67 CrowsWildlife:superClass().delete(self)
68end

getAverageLocationOfIdleAnimals

Description
Get average location of all idle animals
Definition
getAverageLocationOfIdleAnimals()
Code
169function CrowsWildlife:getAverageLocationOfIdleAnimals()
170 local nbIdleAnimals = 0
171 local accPosX, accPosZ = 0.0, 0.0
172 for _, animal in pairs(self.animals) do
173 local currentState = animal.stateMachine.currentState.id
174 if currentState == "idle_walk" or currentState == "idle_eat" or currentState == "idle_attention" then
175 local posX, _, posZ = getWorldTranslation(animal.i3dNodeId)
176 accPosX, accPosZ = accPosX + posX, accPosZ + posZ
177 nbIdleAnimals = nbIdleAnimals + 1
178 end
179 end
180 if nbIdleAnimals > 0 then
181 accPosX, accPosZ = accPosX / nbIdleAnimals, accPosZ / nbIdleAnimals
182 local terrainHeight = self:getTerrainHeightWithProps(accPosX, accPosZ)
183 return true, accPosX, terrainHeight, accPosZ
184 end
185 return false, 0.0, 0.0, 0.0
186end

load

Description
Load xml file
Definition
load(string xmlFilename)
Arguments
stringxmlFilenamexml filename to load
Return Values
booltrueif load is successful
Code
74function CrowsWildlife:load(xmlFilename)
75 CrowsWildlife:superClass().load(self, xmlFilename)
76
77 local xmlFile = loadXMLFile("TempXML", self.xmlFilename)
78 if xmlFile == 0 then
79 self.xmlFilename = nil
80 return false
81 end
82
83 self.samples = {}
84 self.samples.flyAway = {}
85 local i = 0
86 while true do
87 local sampleFlyAway = g_soundManager:loadSampleFromXML(xmlFile, "wildlifeAnimal.sounds.flyAways", string.format("flyAway(%d)", i), self.baseDirectory, self.soundsNode, 1, AudioGroup.ENVIRONMENT, nil, nil)
88 if sampleFlyAway == nil then
89 break
90 end
91 table.insert(self.samples.flyAway, sampleFlyAway)
92 i = i + 1
93 end
94 self.samples.flyAwayCount = i
95 self.samples.calmGround = {}
96 local j = 0
97 while true do
98 local sampleCalmGround = g_soundManager:loadSampleFromXML(xmlFile, "wildlifeAnimal.sounds.calmGrounds", string.format("calmGround(%d)", j), self.baseDirectory, self.soundsNode, 1, AudioGroup.ENVIRONMENT, nil, nil)
99 if sampleCalmGround == nil then
100 break
101 end
102 table.insert(self.samples.calmGround, sampleCalmGround)
103 j = j + 1
104 end
105 self.samples.calmCount = j
106 self.samples.busy = g_soundManager:loadSampleFromXML(xmlFile, "wildlifeAnimal.sounds", "busy", self.baseDirectory, self.soundsNode, 0, AudioGroup.ENVIRONMENT, nil, nil)
107 self.samples.calmAir = g_soundManager:loadSampleFromXML(xmlFile, "wildlifeAnimal.sounds", "calmAir", self.baseDirectory, self.soundsNode, 0, AudioGroup.ENVIRONMENT, nil, nil)
108 delete(xmlFile)
109
110 return true
111end

new

Description
Creating instance
Definition
new(table customMt)
Arguments
tablecustomMtcustom meta table
Return Values
tableinstanceInstance of object
Code
39function CrowsWildlife.new(customMt)
40 local self = CrowsWildlife:superClass().new(customMt or CrowsWildlife_mt)
41
42 self.animalStates = {}
43 for _, stateEntry in pairs(CrowsWildlife.CROW_STATES) do
44 table.insert(self.animalStates, stateEntry)
45 end
46
47 self.tree = nil
48 self.soundFSM = FSMUtil.create()
49 self.soundFSM:addState(CrowsWildlife.CROW_SOUND_STATES.NONE, CrowSoundStateDefault.new(CrowsWildlife.CROW_SOUND_STATES.NONE, self, self.soundFSM))
50 self.soundFSM:addState(CrowsWildlife.CROW_SOUND_STATES.CALM_GROUND, CrowSoundStateCalmGround.new(CrowsWildlife.CROW_SOUND_STATES.CALM_GROUND, self, self.soundFSM))
51 self.soundFSM:addState(CrowsWildlife.CROW_SOUND_STATES.CALM_AIR, CrowSoundStateCalmAir.new(CrowsWildlife.CROW_SOUND_STATES.CALM_AIR, self, self.soundFSM))
52 self.soundFSM:addState(CrowsWildlife.CROW_SOUND_STATES.BUSY, CrowSoundStateBusy.new(CrowsWildlife.CROW_SOUND_STATES.BUSY, self, self.soundFSM))
53 self.soundFSM:addState(CrowsWildlife.CROW_SOUND_STATES.TAKEOFF, CrowSoundStateTakeOff.new(CrowsWildlife.CROW_SOUND_STATES.TAKEOFF, self, self.soundFSM))
54 self.soundFSM:changeState(CrowsWildlife.CROW_SOUND_STATES.NONE)
55
56 return self
57end

searchTree

Description
Search tree around a radius
Definition
searchTree(float x, float y, float z, radius radius)
Arguments
floatxx world position from which areas are checked
floatyy world position from which areas are checked
floatzz world position from which areas are checked
radiusradiusof the test in m
Return Values
integernumberof trees found
Code
148function CrowsWildlife:searchTree(x, y, z, radius)
149 overlapSphere(x, y, z, radius, "treeSearchCallback", self, CollisionFlag.TREE, false, true, false)
150end

treeSearchCallback

Description
Tree count callback
Definition
treeSearchCallback(integer transformId)
Arguments
integertransformId- transformId of the element detected in the overlap test
Return Values
booltrueto continue counting trees
Code
156function CrowsWildlife:treeSearchCallback(transformId)
157 self.tree = nil
158 if transformId ~= 0 and getHasClassId(transformId, ClassIds.SHAPE) then
159 local object = getParent(transformId)
160 if object ~= nil and getSplitType(transformId) ~= 0 then
161 self.tree = object
162 end
163 end
164 return true
165end

update

Description
update
Definition
update()
Code
131function CrowsWildlife:update(dt)
132 CrowsWildlife:superClass().update(self, dt)
133
134 if #self.animals > 0 then
135 self.soundFSM:update(dt)
136 elseif self.soundFSM.currentState.id ~= CrowsWildlife.CROW_SOUND_STATES.NONE then
137 self.soundFSM:changeState(CrowsWildlife.CROW_SOUND_STATES.NONE)
138 end
139end