Script v1.7.1.0
- AI
- Animals
- AnimalFoodManager
- AnimalHusbandryNoMorePall...
- AnimalManager
- AnimalNameManager
- CrowsWildlife
- Dog
- Horse
- HusbandryModuleBase
- HusbandryModuleFood
- HusbandryModuleFoodSpilla...
- HusbandryModuleLiquidManu...
- HusbandryModuleManure
- HusbandryModuleMilk
- HusbandryModulePallets
- HusbandryModuleStraw
- LightWildlife
- RideableAnimal
- Contracts
- Debug
- Economy
- Effects
- Events
- Farms
- GUI
- Handtools
- I3d
- Materials
- Misc
- Objects
- Placeables
- Player
- Shop
- Sounds
- Specializations
- Triggers
- Utils
- Vehicles
- Weather
Engine v1.7.1.0
- AI
- Animation
- Camera
- Entity
- Fillplanes
- General
- I3D
- Input
- Lighting
- Math
- Network
- Node
- Overlays
- Particle System
- Physics
- Rendering
- Scenegraph
- Shape
- Sound
- Spline
- String
- Terrain Detail
- Text Rendering
- Tire Track
- XML
- general
Foundation Reference
CrowsWildlife
DescriptionCrows Wildlife classParent
LightWildlifeFunctions
createAnimals
DescriptionCreate animalsDefinition
createAnimals(string name, float spawnPosX, float spawnPosY, float spawnPosZ, integer nbAnimals)Arguments
string | name | name of animals to spawn |
float | spawnPosX | world x position |
float | spawnPosY | world y position |
float | spawnPosZ | world z position |
integer | nbAnimals | amount of animals to spawn |
integer | id | of the animal group |
115 | function 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 |
121 | end |
delete
DescriptionDelete instanceDefinition
delete()Code
56 | function 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) |
63 | end |
getAverageLocationOfIdleAnimals
DescriptionGet average location of all idle animalsDefinition
getAverageLocationOfIdleAnimals()Code
163 | function 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 |
180 | end |
load
DescriptionLoad xml fileDefinition
load(string xmlFilename)Arguments
string | xmlFilename | xml filename to load |
bool | true | if load is successful |
69 | function 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 |
105 | end |
new
DescriptionCreating instanceDefinition
new(table customMt)Arguments
table | customMt | custom meta table |
table | instance | Instance of object |
36 | function 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 |
52 | end |
searchTree
DescriptionSearch tree around a radiusDefinition
searchTree(float x, float y, float z, radius radius)Arguments
float | x | x world position from which areas are checked |
float | y | y world position from which areas are checked |
float | z | z world position from which areas are checked |
radius | radius | of the test in m |
integer | number | of trees found |
142 | function CrowsWildlife:searchTree(x, y, z, radius) |
143 | overlapSphere(x, y, z, radius, "treeSearchCallback", self, 2, false, true, false) |
144 | end |
treeSearchCallback
DescriptionTree count callbackDefinition
treeSearchCallback(integer transformId)Arguments
integer | transformId | - transformId of the element detected in the overlap test |
bool | true | to continue counting trees |
150 | function 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 |
159 | end |
update
DescriptionupdateDefinition
update()Code
125 | function 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 |
133 | end |