LUADOC - Farming Simulator 19

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
115function CrowsWildlife:createAnimals(name, spawnPosX, spawnPosY, spawnPosZ, nbAnimals)
116 if #self.animals == 0 then
117 self.soundFSM:changeState(CrowsWildlife.CROW_SOUND_STATES.CALM_GROUND)
118 end
119 local id = CrowsWildlife:superClass().createAnimals(self, name, spawnPosX, spawnPosY, spawnPosZ, nbAnimals)
120 return id
121end

delete

Description
Delete instance
Definition
delete()
Code
56function CrowsWildlife:delete()
57 g_soundManager:deleteSamples(self.samples.flyAway)
58 g_soundManager:deleteSamples(self.samples.calmGround)
59 g_soundManager:deleteSample(self.samples.busy)
60 g_soundManager:deleteSample(self.samples.calmAir)
61
62 CrowsWildlife:superClass().delete(self)
63end

getAverageLocationOfIdleAnimals

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

load

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

new

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

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
142function CrowsWildlife:searchTree(x, y, z, radius)
143 overlapSphere(x, y, z, radius, "treeSearchCallback", self, 2, false, true, false)
144end

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
150function CrowsWildlife:treeSearchCallback(transformId)
151 self.tree = nil
152 if transformId ~= 0 and getHasClassId(transformId, ClassIds.SHAPE) then
153 local object = getParent(transformId)
154 if object ~= nil and getSplitType(transformId) ~= 0 then
155 self.tree = object
156 end
157 end
158 return true
159end

update

Description
update
Definition
update()
Code
125function CrowsWildlife:update(dt)
126 CrowsWildlife:superClass().update(self, dt)
127
128 if #self.animals > 0 then
129 self.soundFSM:update(dt)
130 elseif self.soundFSM.currentState.id ~= CrowsWildlife.CROW_SOUND_STATES.NONE then
131 self.soundFSM:changeState(CrowsWildlife.CROW_SOUND_STATES.NONE)
132 end
133end