Script v1_7_1_0
- AI
- Animals
- Collections
- Contracts
- Debug
- Economy
- Elements
- EnvironmentalScore
- Errors
- Events
- GUI
- Handtools
- Hud
- I3d
- Input
- Jobs
- Maps
- Materials
- Misc
- Objects
- Parameters
- Placeables
- Placement
- Player
- Shop
- Sounds
- Specialization
- Specializations
- StateMachine
- Statistics
- Tasks
- Triggers
- Utils
- Vehicles
Engine v1_7_1_0
- AI
- Animation
- Camera
- Entity
- Fillplanes
- general
- General
- I3D
- Input
- Lighting
- Math
- Network
- Node
- NoteNode
- Overlays
- Particle System
- Physics
- Rendering
- Scenegraph
- Shape
- Sound
- Spline
- String
- Terrain Detail
- Text Rendering
- Tire Track
- VoiceChat
- XML
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 |
121 | function 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 |
127 | end |
delete
DescriptionDelete instanceDefinition
delete()Code
61 | function 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) |
68 | end |
getAverageLocationOfIdleAnimals
DescriptionGet average location of all idle animalsDefinition
getAverageLocationOfIdleAnimals()Code
169 | function 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 |
186 | end |
load
DescriptionLoad xml fileDefinition
load(string xmlFilename)Arguments
string | xmlFilename | xml filename to load |
bool | true | if load is successful |
74 | function 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 |
111 | end |
new
DescriptionCreating instanceDefinition
new(table customMt)Arguments
table | customMt | custom meta table |
table | instance | Instance of object |
39 | function 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 |
57 | 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 |
148 | function CrowsWildlife:searchTree(x, y, z, radius) |
149 | overlapSphere(x, y, z, radius, "treeSearchCallback", self, CollisionFlag.TREE, false, true, false) |
150 | 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 |
156 | function 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 |
165 | end |
update
DescriptionupdateDefinition
update()Code
131 | function 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 |
139 | end |