-- ########################################## -- # Fuel Consum # -- # version: 1.0 # -- # last update: 28.08.2015 # -- # author: Webby # -- # # -- # Keine Veränderung ohne # -- # meine Erlaubnis! # -- # No modification without # -- # my permission! # -- # # -- # history: # -- # v1.0 Project started # -- ########################################## fuelConsum = {}; function fuelConsum.prerequisitesPresent(specializations) return SpecializationUtil.hasSpecialization(Motorized, specializations); end; function fuelConsum:load(xmlFile) self.fuelConsumState = SpecializationUtil.callSpecializationsFunction("fuelConsumState"); self.orgFuelUsage = getXMLFloat(xmlFile, "vehicle.fuelUsage"); self.isSelectable = true; self.fuelConsumState = false; end; function fuelConsum:delete() end; function fuelConsum:mouseEvent(posX, posY, isDown, isUp, button) end; function fuelConsum:keyEvent(unicode, sym, modifier, isDown) end; function fuelConsum:readStream(streamId, connection) self.fuelConsumState = streamReadBool(streamId); self:fuelConsumState(self.fuelConsumState, true); end; function fuelConsum:writeStream(streamId, connection) streamWriteBool(streamId, self.fuelConsumState); end; function fuelConsum:update(dt) if self:getIsActiveForInput() then if InputBinding.hasEvent(InputBinding.FUELCONSUM) then self.fuelConsumState = not self.fuelConsumState; self:fuelConsumState(self.fuelConsumState); end; end; end; function fuelConsum:fuelConsumState(state, noEventSend) if not noEventSend then fuelConsumEvent.sendEvent(self, state, noEventSend) end; if state then if self.motor.lastMotorRpm > 1100 then local kmhMath = math.max(1, (self.lastSpeed*self.speedDisplayScale*3600)/3); local fuelUsed = 0.10*kmhMath; -- 0.0002 self.fuelUsage = self.fuelUsage + fuelUsed; self.fuelUsage = self.orgFuelUsage + fuelUsed; end; elseif not state then self.fuelUsage = self.orgFuelUsage / (60*60*1000); end; end; function fuelConsum:draw() if self.fuelConsumState then g_currentMission:addHelpButtonText(g_i18n:getText("FUELCOFF"), InputBinding.FUELCONSUM); else g_currentMission:addHelpButtonText(g_i18n:getText("FUELCON"), InputBinding.FUELCONSUM); end; end; function fuelConsum:loadFromAttributesAndNodes(xmlFile, key, resetVehicles) local fuelConsumState = getXMLBool(xmlFile, key.."#fuelConsumState"); if fuelConsumState ~= nil then self.fuelConsumState = fuelConsumState; end; return BaseMission.VEHICLE_LOAD_OK; end; function fuelConsum:getSaveAttributesAndNodes(nodeIdent) local attributes = "" if self.fuelConsumState ~= nil then attributes = ' fuelConsumState="'.. tostring(self.fuelConsumState) ..'"'; end; return attributes, nil; end; function fuelConsum:onLeave() end; -- -- iNet Stuff -- fuelConsumEvent = {}; fuelConsumEvent_mt = Class(fuelConsumEvent, Event); InitEventClass(fuelConsumEvent, "fuelConsumEvent"); function fuelConsumEvent:emptyNew() local self = Event:new(fuelConsumEvent_mt); self.className = "fuelConsumEvent"; return self; end; function fuelConsumEvent:new(object, state) local self = fuelConsumEvent:emptyNew(); self.object = object; self.fuelConsumState = state; return self; end; function fuelConsumEvent:writeStream(streamId, connection) streamWriteInt32(streamId, networkGetObjectId(self.object)); streamWriteBool(streamId, self.fuelConsumState); end; function fuelConsumEvent:readStream(streamId, connection) self.object = networkGetObject(streamReadInt32(streamId)); self.fuelConsumState = streamReadBool(streamId); self:run(connection); end; function fuelConsumEvent:run(connection) self.object:fuelConsumState(self.fuelConsumState, true); if not connection:getIsServer() then g_server:broadcastEvent(fuelConsumEvent:new(self.object, self.fuelConsumState), nil, connection, self.object); end; end; function fuelConsumEvent.sendEvent(object, state, noEventSend) if noEventSend == nil or noEventSend == false then if g_server ~= nil then g_server:broadcastEvent(fuelConsumEvent:new(object, state), nil, nil, object); else g_client:getServerConnection():sendEvent(fuelConsumEvent:new(object, state)); end; end; end;