OOP: Difference between revisions
No edit summary |
mNo edit summary |
||
Line 62: | Line 62: | ||
* '''[[OOP Introduction]]''' - teaches you about the basics of OOP | * '''[[OOP Introduction]]''' - teaches you about the basics of OOP | ||
* '''[[OOP_client|Function list (client)]]''' and '''[[OOP_server|Function list (server)]]''' - a list of functions implemented | * '''[[OOP_client|Function list (client)]]''' and '''[[OOP_server|Function list (server)]]''' - a list of functions implemented | ||
[[ru:OOP]] | |||
[[Category:OOP]] | [[Category:OOP]] | ||
[[Category:Incomplete]] | [[Category:Incomplete]] | ||
[[Category:Tutorials]] | [[Category:Tutorials]] | ||
Latest revision as of 08:24, 8 June 2024
Object Orientated Programming was introduced in MTA:SA 1.4 and comes with special utility classes like Vector and Matrix. This page contains general information about the OOP functions and provides useful links.
Turning it on
By default, OOP is disabled (however, vectors and matrices are always available) - this is mainly because the vast majority of servers will prefer to stick to what they know - procedural programming. In fact, functions are still available even when OOP is enabled. Enabling OOP is as simple as adding the following line to the resource meta file:
<oop>true</oop>
Vectors and Matrices
Vectors and Matrices make it easier to drop the complex maths and go straight ahead with fun part of maths. As mentioned above, OOP does not have to be enabled in the server config for this to be enabled.
ADVANCED: OOP Metatable Structure
You will understand this if you're proficient with Lua and have a decent understanding of metatables. Understanding this section is not necessary to use OOP.
-- Exposed to global environment Element = { Element = createElement, setPosition = setElementPosition, ... } Vehicle = { Vehicle = createVehicle, setColor = setVehicleColor, ... } -- Hidden in lua registry, applied to userdata ElementMT = { __index = CLuaClassDefs::Index, __newindex = CLuaClassDefs::NewIndex, __class = Element, __call = __class.create, __set = { type = CLuaClassDefs::ReadOnly, health = setElementHealth, ... }, __get = { type = getElementType, health = getElementHealth, ... }, } VehicleMT = { __index = CLuaClassDefs::Index, __newindex = CLuaClassDefs::NewIndex, __class = Vehicle, __parent = ElementMT, __call = __class.create, __set = { damageProof = setVehicleDamageProof ... }, __get = { damageProof = isVehicleDamageProof ... }, }
Useful Links
- OOP Introduction - teaches you about the basics of OOP
- Function list (client) and Function list (server) - a list of functions implemented