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
Horse
DescriptionAnimalParent
RideableAnimalFunctions
- deactivateRiding
- getFitnessScale
- getHealthScale
- getName
- getValueScale
- loadFromXMLFile
- new
- onFitnessChangedCallback
- onLoadedRideable
- readStream
- readUpdateStream
- saveToXMLFile
- setFitnessScale
- setHealthScale
- setName
- updateFitness
- writeStream
- writeUpdateStream
deactivateRiding
DescriptionDefinitiondeactivateRiding()Code
195 | function Horse:deactivateRiding(noEventSend) |
196 | if self.rideableVehicle ~= nil then |
197 | self.rideableVehicle:setFitnessChangedCallback(nil, nil) |
198 | end |
199 | |
200 | Horse:superClass().deactivateRiding(self, noEventSend) |
201 | end |
getFitnessScale
DescriptionDefinitiongetFitnessScale()Code
160 | function Horse:getFitnessScale() |
161 | return self.fitnessScale |
162 | end |
getHealthScale
DescriptionDefinitiongetHealthScale()Code
180 | function Horse:getHealthScale() |
181 | return self.healthScale |
182 | end |
getName
DescriptionDefinitiongetName()Code
133 | function Horse:getName() |
134 | return self.name |
135 | end |
getValueScale
DescriptionDefinitiongetValueScale()Code
139 | function Horse:getValueScale() |
140 | -- dirt scale should only count 1% |
141 | return 0.99 * (self.fitnessScale * self.healthScale) + 0.01 * (1-self.dirtScale) |
142 | end |
loadFromXMLFile
DescriptionDefinitionloadFromXMLFile()Code
101 | function Horse:loadFromXMLFile(xmlFile, key) |
102 | Horse:superClass().loadFromXMLFile(self, xmlFile, key) |
103 | |
104 | self.name = getXMLString(xmlFile, key.."#name") or self.name |
105 | self.fitnessScale = getXMLFloat(xmlFile, key.."#fitnessScale") or self.fitnessScale |
106 | self.healthScale = getXMLFloat(xmlFile, key.."#healthScale") or self.healthScale |
107 | self.ridingTimer = getXMLFloat(xmlFile, key.."#ridingTimer") or self.ridingTimer |
108 | self.ridingScale = self.ridingTimer / Horse.DAILY_TARGET_RIDING_TIME |
109 | end |
new
DescriptionDefinitionnew()Code
21 | function Horse:new(isServer, isClient, owner, fillTypeIndex, customMt) |
22 | local self = RideableAnimal:new(isServer, isClient, owner, fillTypeIndex, customMt or Horse_mt) |
23 | |
24 | self.name = g_animalNameManager:getRandomName() |
25 | |
26 | self.fitnessScale = 0.05 |
27 | self.fitnessScaleSent = 0.0 |
28 | |
29 | self.healthScale = 1.0 |
30 | self.healthScaleSent = 1.0 |
31 | |
32 | self.ridingTimer = 0.0 |
33 | self.ridingTimerSent = 0.0 |
34 | self.ridingScale = 0.0 |
35 | self.ridingScaleSent = 0.0 |
36 | |
37 | self.horseDirtyFlag = self:getNextDirtyFlag() |
38 | |
39 | return self |
40 | end |
onFitnessChangedCallback
DescriptionDefinitiononFitnessChangedCallback()Code
215 | function Horse:onFitnessChangedCallback(deltaTime) |
216 | self.ridingTimer = self.ridingTimer + deltaTime |
217 | self.ridingScale = self.ridingTimer / Horse.DAILY_TARGET_RIDING_TIME |
218 | |
219 | if math.abs(self.ridingScaleSent - self.ridingScale) > 0.01 then |
220 | self.ridingScaleSent = self.ridingScale |
221 | self:raiseDirtyFlags(self.horseDirtyFlag) |
222 | end |
223 | end |
onLoadedRideable
DescriptionDefinitiononLoadedRideable()Code
205 | function Horse:onLoadedRideable(rideableVehicle, vehicleLoadState, arguments) |
206 | Horse:superClass().onLoadedRideable(self, rideableVehicle, vehicleLoadState, arguments) |
207 | |
208 | if self.rideableVehicle ~= nil then |
209 | self.rideableVehicle:setFitnessChangedCallback(self.onFitnessChangedCallback, self) |
210 | end |
211 | end |
readStream
DescriptionDefinitionreadStream()Code
44 | function Horse:readStream(streamId) |
45 | Horse:superClass().readStream(self, streamId) |
46 | |
47 | self.name = streamReadString(streamId) |
48 | self.fitnessScale = streamReadFloat32(streamId) |
49 | self.healthScale = streamReadFloat32(streamId) |
50 | self.ridingScale = streamReadFloat32(streamId) |
51 | end |
readUpdateStream
DescriptionDefinitionreadUpdateStream()Code
71 | function Horse:readUpdateStream(streamId, timestamp, connection) |
72 | Horse:superClass().readUpdateStream(self, streamId, timestamp, connection) |
73 | |
74 | -- server to client only |
75 | if connection:getIsServer() then |
76 | if streamReadBool(streamId) then |
77 | self.fitnessScale = NetworkUtil.readCompressedPercentages(streamId, 7) |
78 | self.healthScale = NetworkUtil.readCompressedPercentages(streamId, 7) |
79 | self.ridingScale = NetworkUtil.readCompressedPercentages(streamId, 7) |
80 | end |
81 | end |
82 | end |
saveToXMLFile
DescriptionDefinitionsaveToXMLFile()Code
113 | function Horse:saveToXMLFile(xmlFile, key, usedModNames) |
114 | Horse:superClass().saveToXMLFile(self, xmlFile, key, usedModNames) |
115 | |
116 | setXMLString(xmlFile, key.."#name", self.name) |
117 | setXMLFloat(xmlFile, key.."#fitnessScale", self.fitnessScale) |
118 | setXMLFloat(xmlFile, key.."#healthScale", self.healthScale) |
119 | setXMLFloat(xmlFile, key.."#ridingTimer", self.ridingTimer) |
120 | end |
setFitnessScale
DescriptionDefinitionsetFitnessScale()Code
146 | function Horse:setFitnessScale(scale, noEventSend) |
147 | self.fitnessScale = scale |
148 | if math.abs(self.fitnessScaleSent - self.fitnessScale) > 0.01 then |
149 | self.fitnessScaleSent = self.fitnessScale |
150 | g_messageCenter:publish(MessageType.HUSBANDRY_ANIMALS_CHANGED, self.owner) |
151 | |
152 | if noEventSend == nil or not noEventSend then |
153 | self:raiseDirtyFlags(self.horseDirtyFlag) |
154 | end |
155 | end |
156 | end |
setHealthScale
DescriptionDefinitionsetHealthScale()Code
166 | function Horse:setHealthScale(scale, noEventSend) |
167 | self.healthScale = scale |
168 | if math.abs(self.healthScaleSent - self.healthScale) > 0.01 then |
169 | self.healthScaleSent = self.healthScale |
170 | g_messageCenter:publish(MessageType.HUSBANDRY_ANIMALS_CHANGED, self.owner) |
171 | |
172 | if noEventSend == nil or not noEventSend then |
173 | self:raiseDirtyFlags(self.horseDirtyFlag) |
174 | end |
175 | end |
176 | end |
setName
DescriptionDefinitionsetName()Code
124 | function Horse:setName(name) |
125 | if self.name ~= nil and self.name ~= name then |
126 | self.name = name |
127 | g_messageCenter:publish(MessageType.HUSBANDRY_ANIMALS_CHANGED, self.owner) |
128 | end |
129 | end |
updateFitness
DescriptionDefinitionupdateFitness()Code
227 | function Horse:updateFitness(productionFactor) |
228 | if self.isServer then |
229 | local fitness = self:getFitnessScale() |
230 | |
231 | if self.ridingTimer < Horse.DAILY_MINIMUM_RIDING_TIME then |
232 | fitness = fitness - 0.02 |
233 | else -- add capped gain |
234 | local fitnessGain = math.min(0.1, 0.1 * self.ridingTimer / Horse.DAILY_TARGET_RIDING_TIME) |
235 | fitnessGain = fitnessGain * productionFactor |
236 | fitness = fitness + fitnessGain |
237 | end |
238 | |
239 | fitness = MathUtil.clamp(fitness, 0.0, 1.0) |
240 | self:setFitnessScale(fitness) |
241 | |
242 | self.ridingTimer = 0.0 |
243 | |
244 | if self.ridingScale ~= 0.0 then |
245 | self.ridingScale = 0.0 |
246 | self.ridingScaleSent = 0.0 |
247 | self:raiseDirtyFlags(self.horseDirtyFlag) |
248 | end |
249 | end |
250 | end |
writeStream
DescriptionDefinitionwriteStream()Code
55 | function Horse:writeStream(streamId) |
56 | Horse:superClass().writeStream(self, streamId) |
57 | |
58 | streamWriteString(streamId, self.name) |
59 | streamWriteFloat32(streamId, self.fitnessScale) |
60 | streamWriteFloat32(streamId, self.healthScale) |
61 | streamWriteFloat32(streamId, self.ridingScale) |
62 | |
63 | -- Set, so when running updateStream the data is not overwritten on the client |
64 | self.fitnessScaleSent = self.fitnessScale |
65 | self.healthScaleSent = self.healthScale |
66 | self.ridingScaleSent = self.ridingScale |
67 | end |
writeUpdateStream
DescriptionDefinitionwriteUpdateStream()Code
86 | function Horse:writeUpdateStream(streamId, connection, dirtyMask) |
87 | Horse:superClass().writeUpdateStream(self, streamId, connection, dirtyMask) |
88 | |
89 | -- server to client only |
90 | if not connection:getIsServer() then |
91 | if streamWriteBool(streamId, bitAND(dirtyMask, self.horseDirtyFlag) ~= 0) then |
92 | NetworkUtil.writeCompressedPercentages(streamId, self.fitnessScaleSent, 7) |
93 | NetworkUtil.writeCompressedPercentages(streamId, self.healthScaleSent, 7) |
94 | NetworkUtil.writeCompressedPercentages(streamId, self.ridingScaleSent, 7) |
95 | end |
96 | end |
97 | end |