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
SpecializationUtil
DescriptionSpecialization util classFunctions
- hasSpecialization
- raiseEvent
- registerEvent
- registerEventListener
- registerFunction
- registerOverwrittenFunction
- removeEventListener
hasSpecialization
DescriptionDefinitionhasSpecialization()Code
104 | function SpecializationUtil.hasSpecialization(spec, specializations) |
105 | for _,v in pairs(specializations) do |
106 | if v == spec then |
107 | return true |
108 | end |
109 | end |
110 | return false |
111 | end |
raiseEvent
DescriptionDefinitionraiseEvent()Code
13 | function SpecializationUtil.raiseEvent(object, eventName, ...) |
14 | assert(object.eventListeners[eventName] ~= nil, "Error: Event '"..tostring(eventName).."' is not registered for type '"..tostring(object.type.name).."'!") |
15 | for _, spec in ipairs(object.eventListeners[eventName]) do |
16 | --#profile local doProfiling, profileName = Vehicle.PROFILE_EVENTS[eventName], spec.className .. ":" .. eventName |
17 | --#profile if doProfiling then g_remoteProfiler.ZoneBeginN(profileName) end |
18 | spec[eventName](object, ...) |
19 | --#profile if doProfiling then g_remoteProfiler.ZoneEnd() end |
20 | end |
21 | end |
registerEvent
DescriptionDefinitionregisterEvent()Code
25 | function SpecializationUtil.registerEvent(objectType, eventName) |
26 | if objectType.functions[eventName] ~= nil or objectType.events[eventName] ~= nil or (eventName == nil or eventName == "") then |
27 | printCallstack() |
28 | end |
29 | |
30 | assert(objectType.functions[eventName] == nil, "Error: Event '"..tostring(eventName).."' already registered as function in type '"..tostring(objectType.name).."'!") |
31 | assert(objectType.events[eventName] == nil, "Error: Event '"..tostring(eventName).."' already registered as event in type '"..tostring(objectType.name).."'!") |
32 | assert(eventName ~= nil and eventName ~= "", "Error: Event '"..tostring(eventName).."' is 'nil' or empty!") |
33 | |
34 | objectType.events[eventName] = eventName |
35 | objectType.eventListeners[eventName] = {} |
36 | end |
registerEventListener
DescriptionDefinitionregisterEventListener()Code
66 | function SpecializationUtil.registerEventListener(objectType, eventName, spec) |
67 | local className = ClassUtil.getClassName(spec) |
68 | |
69 | assert(objectType.eventListeners ~= nil, "Error: Invalid type for specialization '"..tostring(className).."'!") |
70 | if objectType.eventListeners[eventName] == nil then |
71 | return |
72 | end |
73 | |
74 | assert(spec[eventName] ~= nil, "Error: Event listener function '"..tostring(eventName).."' not defined in specialization '"..tostring(className).."'!") |
75 | |
76 | local found = false |
77 | for _, registeredSpec in pairs(objectType.eventListeners[eventName]) do |
78 | if registeredSpec == spec then |
79 | found = true |
80 | break |
81 | end |
82 | end |
83 | |
84 | assert(not found, "Error: Eventlistener for '"..eventName.."' already registered in specialization '"..tostring(className).."'!") |
85 | |
86 | table.insert(objectType.eventListeners[eventName], spec) |
87 | end |
registerFunction
DescriptionDefinitionregisterFunction()Code
40 | function SpecializationUtil.registerFunction(objectType, funcName, func) |
41 | if objectType.functions[funcName] ~= nil or objectType.events[funcName] ~= nil or func == nil then |
42 | printCallstack() |
43 | end |
44 | |
45 | assert(objectType.functions[funcName] == nil, "Error: Function '"..tostring(funcName).."' already registered as function in type '"..tostring(objectType.name).."'!") |
46 | assert(objectType.events[funcName] == nil, "Error: Function '"..tostring(funcName).."' already registered as event in type '"..tostring(objectType.name).."'!") |
47 | assert(func ~= nil, "Error: Given reference for Function '"..tostring(funcName).."' is 'nil'!") |
48 | |
49 | objectType.functions[funcName] = func |
50 | end |
registerOverwrittenFunction
DescriptionDefinitionregisterOverwrittenFunction()Code
54 | function SpecializationUtil.registerOverwrittenFunction(objectType, funcName, func) |
55 | |
56 | assert(func ~= nil, "Error: Given reference for OverwrittenFunction '"..tostring(funcName).."' is 'nil'!") |
57 | |
58 | -- if function does not exist, we don't need to overwrite anything |
59 | if objectType.functions[funcName] ~= nil then |
60 | objectType.functions[funcName] = Utils.overwrittenFunction(objectType.functions[funcName], func) |
61 | end |
62 | end |
removeEventListener
DescriptionDefinitionremoveEventListener()Code
91 | function SpecializationUtil.removeEventListener(object, eventName, specClass) |
92 | local listeners = object.eventListeners[eventName] |
93 | if listeners ~= nil then |
94 | for i=#listeners, 1, -1 do |
95 | if ClassUtil.getClassName(listeners[i]) == ClassUtil.getClassName(specClass) then |
96 | table.remove(listeners, i) |
97 | end |
98 | end |
99 | end |
100 | end |