Просмотр исходного кода

Merge branch 'master' of github.com:ivansafrin/Polycode

Conflicts:
	Core/Contents/Include/PolyEventHandler.h
	Core/Contents/Include/PolyObject.h
Ivan Safrin 14 лет назад
Родитель
Сommit
fe9bb07923
100 измененных файлов с 6249 добавлено и 1585 удалено
  1. 8 2
      Bindings/Contents/LUA/API/Polycode.lua
  2. 50 14
      Bindings/Contents/LUA/API/Polycode/BezierCurve.lua
  3. 17 4
      Bindings/Contents/LUA/API/Polycode/BezierPathTween.lua
  4. 111 21
      Bindings/Contents/LUA/API/Polycode/Bone.lua
  5. 20 7
      Bindings/Contents/LUA/API/Polycode/BoneTrack.lua
  6. 38 19
      Bindings/Contents/LUA/API/Polycode/Camera.lua
  7. 54 12
      Bindings/Contents/LUA/API/Polycode/Color.lua
  8. 32 10
      Bindings/Contents/LUA/API/Polycode/Config.lua
  9. 194 7
      Bindings/Contents/LUA/API/Polycode/Core.lua
  10. 53 14
      Bindings/Contents/LUA/API/Polycode/CoreInput.lua
  11. 115 18
      Bindings/Contents/LUA/API/Polycode/CoreServices.lua
  12. 16 3
      Bindings/Contents/LUA/API/Polycode/Cubemap.lua
  13. 30 8
      Bindings/Contents/LUA/API/Polycode/Data.lua
  14. 265 70
      Bindings/Contents/LUA/API/Polycode/Entity.lua
  15. 32 8
      Bindings/Contents/LUA/API/Polycode/Event.lua
  16. 23 10
      Bindings/Contents/LUA/API/Polycode/EventDispatcher.lua
  17. 18 5
      Bindings/Contents/LUA/API/Polycode/EventHandler.lua
  18. 27 5
      Bindings/Contents/LUA/API/Polycode/FixedShader.lua
  19. 30 8
      Bindings/Contents/LUA/API/Polycode/FixedShaderBinding.lua
  20. 26 5
      Bindings/Contents/LUA/API/Polycode/Font.lua
  21. 25 5
      Bindings/Contents/LUA/API/Polycode/FontManager.lua
  22. 68 31
      Bindings/Contents/LUA/API/Polycode/Image.lua
  23. 46 4
      Bindings/Contents/LUA/API/Polycode/InputEvent.lua
  24. 33 8
      Bindings/Contents/LUA/API/Polycode/Label.lua
  25. 18 5
      Bindings/Contents/LUA/API/Polycode/Logger.lua
  26. 49 12
      Bindings/Contents/LUA/API/Polycode/Material.lua
  27. 103 20
      Bindings/Contents/LUA/API/Polycode/MaterialManager.lua
  28. 53 12
      Bindings/Contents/LUA/API/Polycode/Matrix4.lua
  29. 100 27
      Bindings/Contents/LUA/API/Polycode/Mesh.lua
  30. 28 17
      Bindings/Contents/LUA/API/Polycode/OSBasics.lua
  31. 31 4
      Bindings/Contents/LUA/API/Polycode/OSFILE.lua
  32. 55 3
      Bindings/Contents/LUA/API/Polycode/OSFileEntry.lua
  33. 72 4
      Bindings/Contents/LUA/API/Polycode/ObjectEntry.lua
  34. 24 4
      Bindings/Contents/LUA/API/Polycode/OpenGLCubemap.lua
  35. 58 6
      Bindings/Contents/LUA/API/Polycode/Particle.lua
  36. 146 0
      Bindings/Contents/LUA/API/Polycode/ParticleEmitter.lua
  37. 18 4
      Bindings/Contents/LUA/API/Polycode/Perlin.lua
  38. 20 4
      Bindings/Contents/LUA/API/Polycode/PolycodeModule.lua
  39. 92 18
      Bindings/Contents/LUA/API/Polycode/Polygon.lua
  40. 115 22
      Bindings/Contents/LUA/API/Polycode/Quaternion.lua
  41. 26 6
      Bindings/Contents/LUA/API/Polycode/QuaternionCurve.lua
  42. 17 4
      Bindings/Contents/LUA/API/Polycode/QuaternionTween.lua
  43. 44 4
      Bindings/Contents/LUA/API/Polycode/Rectangle.lua
  44. 419 0
      Bindings/Contents/LUA/API/Polycode/Renderer.lua
  45. 30 8
      Bindings/Contents/LUA/API/Polycode/Resource.lua
  46. 35 14
      Bindings/Contents/LUA/API/Polycode/ResourceManager.lua
  47. 203 0
      Bindings/Contents/LUA/API/Polycode/Scene.lua
  48. 18 4
      Bindings/Contents/LUA/API/Polycode/SceneEntity.lua
  49. 28 7
      Bindings/Contents/LUA/API/Polycode/SceneLabel.lua
  50. 49 15
      Bindings/Contents/LUA/API/Polycode/SceneLight.lua
  51. 17 4
      Bindings/Contents/LUA/API/Polycode/SceneLine.lua
  52. 21 8
      Bindings/Contents/LUA/API/Polycode/SceneManager.lua
  53. 81 17
      Bindings/Contents/LUA/API/Polycode/SceneMesh.lua
  54. 26 6
      Bindings/Contents/LUA/API/Polycode/SceneParticleEmitter.lua
  55. 19 3
      Bindings/Contents/LUA/API/Polycode/ScenePrimitive.lua
  56. 41 7
      Bindings/Contents/LUA/API/Polycode/SceneRenderTexture.lua
  57. 89 24
      Bindings/Contents/LUA/API/Polycode/Screen.lua
  58. 16 3
      Bindings/Contents/LUA/API/Polycode/ScreenCurve.lua
  59. 103 40
      Bindings/Contents/LUA/API/Polycode/ScreenEntity.lua
  60. 20 3
      Bindings/Contents/LUA/API/Polycode/ScreenEvent.lua
  61. 21 6
      Bindings/Contents/LUA/API/Polycode/ScreenImage.lua
  62. 28 7
      Bindings/Contents/LUA/API/Polycode/ScreenLabel.lua
  63. 19 6
      Bindings/Contents/LUA/API/Polycode/ScreenLine.lua
  64. 22 7
      Bindings/Contents/LUA/API/Polycode/ScreenManager.lua
  65. 35 8
      Bindings/Contents/LUA/API/Polycode/ScreenMesh.lua
  66. 26 6
      Bindings/Contents/LUA/API/Polycode/ScreenParticleEmitter.lua
  67. 44 10
      Bindings/Contents/LUA/API/Polycode/ScreenShape.lua
  68. 19 6
      Bindings/Contents/LUA/API/Polycode/ScreenSprite.lua
  69. 37 0
      Bindings/Contents/LUA/API/Polycode/Shader.lua
  70. 116 0
      Bindings/Contents/LUA/API/Polycode/ShaderBinding.lua
  71. 57 15
      Bindings/Contents/LUA/API/Polycode/Skeleton.lua
  72. 23 9
      Bindings/Contents/LUA/API/Polycode/SkeletonAnimation.lua
  73. 45 11
      Bindings/Contents/LUA/API/Polycode/Sound.lua
  74. 17 4
      Bindings/Contents/LUA/API/Polycode/SoundManager.lua
  75. 86 24
      Bindings/Contents/LUA/API/Polycode/String.lua
  76. 88 0
      Bindings/Contents/LUA/API/Polycode/Texture.lua
  77. 28 10
      Bindings/Contents/LUA/API/Polycode/Timer.lua
  78. 19 6
      Bindings/Contents/LUA/API/Polycode/TimerManager.lua
  79. 63 11
      Bindings/Contents/LUA/API/Polycode/Tween.lua
  80. 18 5
      Bindings/Contents/LUA/API/Polycode/TweenManager.lua
  81. 33 3
      Bindings/Contents/LUA/API/Polycode/Vector2.lua
  82. 54 9
      Bindings/Contents/LUA/API/Polycode/Vector3.lua
  83. 50 10
      Bindings/Contents/LUA/API/Polycode/Vertex.lua
  84. 35 4
      Bindings/Contents/LUA/API/Polycode/VertexBuffer.lua
  85. 37 0
      Bindings/Contents/LUA/API/defaults.lua
  86. 2 0
      Bindings/Contents/LUA/Include/PolycodeLUA.h
  87. 806 177
      Bindings/Contents/LUA/Include/PolycodeLUAWrappers.h
  88. 360 27
      Bindings/Contents/LUA/Source/PolycodeLUA.cpp
  89. 138 15
      Bindings/Scripts/create_lua_library/create_lua_library.py
  90. 0 8
      Core/Build/Mac OS X/PolyCore.xcodeproj/project.pbxproj
  91. 239 531
      Core/Build/Mac OS X/PolyCore.xcodeproj/project.xcworkspace/xcuserdata/ivansafrin.xcuserdatad/UserInterfaceState.xcuserstate
  92. 3 4
      Core/Contents/Include/PolyEventHandler.h
  93. 7 0
      Core/Contents/Include/PolyObject.h
  94. 51 3
      Core/Contents/Include/PolyScene.h
  95. 3 2
      Core/Contents/Include/PolySceneMesh.h
  96. 1 1
      Core/Contents/Include/PolyScreen.h
  97. 3 0
      Core/Contents/Include/PolySkeleton.h
  98. 1 1
      Core/Contents/Include/PolyVector3.h
  99. 0 1
      Core/Contents/Include/Poly_iPhone.h
  100. 0 1
      Core/Contents/Include/Polycode.h

+ 8 - 2
Bindings/Contents/LUA/API/Polycode.lua

@@ -6,6 +6,7 @@ require "Polycode/Bone"
 require "Polycode/Camera"
 require "Polycode/Color"
 require "Polycode/Config"
+require "Polycode/Core"
 require "Polycode/CoreInput"
 require "Polycode/CoreServices"
 require "Polycode/Cubemap"
@@ -18,7 +19,6 @@ require "Polycode/FixedShader"
 require "Polycode/FixedShaderBinding"
 require "Polycode/Font"
 require "Polycode/FontManager"
-require "Polycode/GenericScene"
 require "Polycode/OpenGLCubemap"
 require "Polycode/Image"
 require "Polycode/InputEvent"
@@ -34,13 +34,16 @@ require "Polycode/ObjectEntry"
 require "Polycode/Particle"
 require "Polycode/ScreenParticleEmitter"
 require "Polycode/SceneParticleEmitter"
+require "Polycode/ParticleEmitter"
 require "Polycode/Perlin"
 require "Polycode/Polygon"
 require "Polycode/Quaternion"
 require "Polycode/QuaternionCurve"
 require "Polycode/Rectangle"
+require "Polycode/Renderer"
 require "Polycode/Resource"
 require "Polycode/ResourceManager"
+require "Polycode/Scene"
 require "Polycode/SceneEntity"
 require "Polycode/SceneLabel"
 require "Polycode/SceneLight"
@@ -60,12 +63,15 @@ require "Polycode/ScreenManager"
 require "Polycode/ScreenMesh"
 require "Polycode/ScreenShape"
 require "Polycode/ScreenSprite"
+require "Polycode/Shader"
+require "Polycode/ShaderBinding"
 require "Polycode/SkeletonAnimation"
-require "Polycode/Skeleton"
 require "Polycode/BoneTrack"
+require "Polycode/Skeleton"
 require "Polycode/Sound"
 require "Polycode/SoundManager"
 require "Polycode/String"
+require "Polycode/Texture"
 require "Polycode/Timer"
 require "Polycode/TimerManager"
 require "Polycode/Tween"

+ 50 - 14
Bindings/Contents/LUA/API/Polycode/BezierCurve.lua

@@ -1,52 +1,88 @@
 class "BezierCurve"
 
-function BezierCurve:BezierCurve()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.BezierCurve()
+
+
+
+
+
+
+function BezierCurve:BezierCurve(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.BezierCurve(unpack(arg))
 	end
 end
 
 function BezierCurve:getControlPoint(index)
-	return Polycore.BezierCurve_getControlPoint(self.__ptr, index)
+	local retVal = Polycore.BezierCurve_getControlPoint(self.__ptr, index)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = BezierPoint("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function BezierCurve:getNumControlPoints()
-	return Polycore.BezierCurve_getNumControlPoints(self.__ptr)
+	local retVal =  Polycore.BezierCurve_getNumControlPoints(self.__ptr)
+	return retVal
 end
 
 function BezierCurve:addControlPoint(p1x, p1y, p1z, p2x, p2y, p2z, p3x, p3y, p3z)
-	return Polycore.BezierCurve_addControlPoint(self.__ptr, p1x, p1y, p1z, p2x, p2y, p2z, p3x, p3y, p3z)
+	local retVal = Polycore.BezierCurve_addControlPoint(self.__ptr, p1x, p1y, p1z, p2x, p2y, p2z, p3x, p3y, p3z)
 end
 
 function BezierCurve:addControlPoint3dWithHandles(p1x, p1y, p1z, p2x, p2y, p2z, p3x, p3y, p3z)
-	return Polycore.BezierCurve_addControlPoint3dWithHandles(self.__ptr, p1x, p1y, p1z, p2x, p2y, p2z, p3x, p3y, p3z)
+	local retVal = Polycore.BezierCurve_addControlPoint3dWithHandles(self.__ptr, p1x, p1y, p1z, p2x, p2y, p2z, p3x, p3y, p3z)
 end
 
 function BezierCurve:addControlPoint3d(x, y, z)
-	return Polycore.BezierCurve_addControlPoint3d(self.__ptr, x, y, z)
+	local retVal = Polycore.BezierCurve_addControlPoint3d(self.__ptr, x, y, z)
 end
 
 function BezierCurve:addControlPoint2dWithHandles(p1x, p1y, p2x, p2y, p3x, p3y)
-	return Polycore.BezierCurve_addControlPoint2dWithHandles(self.__ptr, p1x, p1y, p2x, p2y, p3x, p3y)
+	local retVal = Polycore.BezierCurve_addControlPoint2dWithHandles(self.__ptr, p1x, p1y, p2x, p2y, p3x, p3y)
 end
 
 function BezierCurve:addControlPoint2d(x, y)
-	return Polycore.BezierCurve_addControlPoint2d(self.__ptr, x, y)
+	local retVal = Polycore.BezierCurve_addControlPoint2d(self.__ptr, x, y)
 end
 
 function BezierCurve:getHeightAt(a)
-	return Polycore.BezierCurve_getHeightAt(self.__ptr, a)
+	local retVal = Polycore.BezierCurve_getHeightAt(self.__ptr, a)
+	return retVal
 end
 
 function BezierCurve:getPointAt(a)
-	return Polycore.BezierCurve_getPointAt(self.__ptr, a)
+	local retVal = Polycore.BezierCurve_getPointAt(self.__ptr, a)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Vector3("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function BezierCurve:getPointBetween(a, bp1, bp2)
-	return Polycore.BezierCurve_getPointBetween(self.__ptr, a, bp1.__ptr, bp2.__ptr)
+	local retVal = Polycore.BezierCurve_getPointBetween(self.__ptr, a, bp1.__ptr, bp2.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Vector3("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function BezierCurve:rebuildBuffers()
-	return Polycore.BezierCurve_rebuildBuffers(self.__ptr)
+	local retVal =  Polycore.BezierCurve_rebuildBuffers(self.__ptr)
 end
 

+ 17 - 4
Bindings/Contents/LUA/API/Polycode/BezierPathTween.lua

@@ -2,13 +2,26 @@ require "Polycode/Tween"
 
 class "BezierPathTween" (Tween)
 
-function BezierPathTween:BezierPathTween(target, curve, easeType, time, _repeat)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.BezierPathTween(target, curve, easeType, time, _repeat)
+
+
+
+
+
+
+function BezierPathTween:BezierPathTween(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.BezierPathTween(unpack(arg))
 	end
 end
 
 function BezierPathTween:updateCustomTween()
-	return Polycore.BezierPathTween_updateCustomTween(self.__ptr)
+	local retVal =  Polycore.BezierPathTween_updateCustomTween(self.__ptr)
 end
 

+ 111 - 21
Bindings/Contents/LUA/API/Polycode/Bone.lua

@@ -2,81 +2,171 @@ require "Polycode/SceneEntity"
 
 class "Bone" (SceneEntity)
 
-function Bone:Bone(boneName)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Bone(boneName)
+
+
+function Bone:__index__(name)
+	if name == "parentBoneId" then
+		return Polycore.Bone_get_parentBoneId(self.__ptr)
+	end
+end
+
+
+function Bone:__set_callback(name,value)
+	if name == "parentBoneId" then
+		Polycore.Bone_set_parentBoneId(self.__ptr, value)
+		return true
+	end
+	return false
+end
+
+
+function Bone:Bone(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Bone(unpack(arg))
 	end
 end
 
 function Bone:enableBoneLabel(labelFont, size, scale, labelColor)
-	return Polycore.Bone_enableBoneLabel(self.__ptr, labelFont, size, scale, labelColor.__ptr)
+	local retVal = Polycore.Bone_enableBoneLabel(self.__ptr, labelFont, size, scale, labelColor.__ptr)
 end
 
 function Bone:getName()
-	return Polycore.Bone_getName(self.__ptr)
+	local retVal =  Polycore.Bone_getName(self.__ptr)
+	return retVal
 end
 
 function Bone:Render()
-	return Polycore.Bone_Render(self.__ptr)
+	local retVal =  Polycore.Bone_Render(self.__ptr)
 end
 
 function Bone:setParentBone(bone)
-	return Polycore.Bone_setParentBone(self.__ptr, bone.__ptr)
+	local retVal = Polycore.Bone_setParentBone(self.__ptr, bone.__ptr)
 end
 
 function Bone:addChildBone(bone)
-	return Polycore.Bone_addChildBone(self.__ptr, bone.__ptr)
+	local retVal = Polycore.Bone_addChildBone(self.__ptr, bone.__ptr)
 end
 
 function Bone:getParentBone()
-	return Polycore.Bone_getParentBone(self.__ptr)
+	local retVal =  Polycore.Bone_getParentBone(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Bone("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Bone:getNumChildBones()
-	return Polycore.Bone_getNumChildBones(self.__ptr)
+	local retVal =  Polycore.Bone_getNumChildBones(self.__ptr)
+	return retVal
 end
 
 function Bone:getChildBone(index)
-	return Polycore.Bone_getChildBone(self.__ptr, index)
+	local retVal = Polycore.Bone_getChildBone(self.__ptr, index)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Bone("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Bone:getBoneMatrix()
-	return Polycore.Bone_getBoneMatrix(self.__ptr)
+	local retVal =  Polycore.Bone_getBoneMatrix(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Matrix4("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Bone:setBoneMatrix(matrix)
-	return Polycore.Bone_setBoneMatrix(self.__ptr, matrix.__ptr)
+	local retVal = Polycore.Bone_setBoneMatrix(self.__ptr, matrix.__ptr)
 end
 
 function Bone:getRestMatrix()
-	return Polycore.Bone_getRestMatrix(self.__ptr)
+	local retVal =  Polycore.Bone_getRestMatrix(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Matrix4("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Bone:getFullRestMatrix()
-	return Polycore.Bone_getFullRestMatrix(self.__ptr)
+	local retVal =  Polycore.Bone_getFullRestMatrix(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Matrix4("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Bone:getParentRestMatrix()
-	return Polycore.Bone_getParentRestMatrix(self.__ptr)
+	local retVal =  Polycore.Bone_getParentRestMatrix(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Matrix4("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Bone:getFinalMatrix()
-	return Polycore.Bone_getFinalMatrix(self.__ptr)
+	local retVal =  Polycore.Bone_getFinalMatrix(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Matrix4("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Bone:setRestMatrix(matrix)
-	return Polycore.Bone_setRestMatrix(self.__ptr, matrix.__ptr)
+	local retVal = Polycore.Bone_setRestMatrix(self.__ptr, matrix.__ptr)
 end
 
 function Bone:setBaseMatrix(matrix)
-	return Polycore.Bone_setBaseMatrix(self.__ptr, matrix.__ptr)
+	local retVal = Polycore.Bone_setBaseMatrix(self.__ptr, matrix.__ptr)
 end
 
 function Bone:getBaseMatrix()
-	return Polycore.Bone_getBaseMatrix(self.__ptr)
+	local retVal =  Polycore.Bone_getBaseMatrix(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Matrix4("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Bone:getFullBaseMatrix()
-	return Polycore.Bone_getFullBaseMatrix(self.__ptr)
+	local retVal =  Polycore.Bone_getFullBaseMatrix(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Matrix4("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 

+ 20 - 7
Bindings/Contents/LUA/API/Polycode/BoneTrack.lua

@@ -1,24 +1,37 @@
 class "BoneTrack"
 
-function BoneTrack:BoneTrack(bone, length)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.BoneTrack(bone, length)
+
+
+
+
+
+
+function BoneTrack:BoneTrack(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.BoneTrack(unpack(arg))
 	end
 end
 
 function BoneTrack:Play()
-	return Polycore.BoneTrack_Play(self.__ptr)
+	local retVal =  Polycore.BoneTrack_Play(self.__ptr)
 end
 
 function BoneTrack:Stop()
-	return Polycore.BoneTrack_Stop(self.__ptr)
+	local retVal =  Polycore.BoneTrack_Stop(self.__ptr)
 end
 
 function BoneTrack:Update()
-	return Polycore.BoneTrack_Update(self.__ptr)
+	local retVal =  Polycore.BoneTrack_Update(self.__ptr)
 end
 
 function BoneTrack:setSpeed(speed)
-	return Polycore.BoneTrack_setSpeed(self.__ptr, speed)
+	local retVal = Polycore.BoneTrack_setSpeed(self.__ptr, speed)
 end
 

+ 38 - 19
Bindings/Contents/LUA/API/Polycode/Camera.lua

@@ -2,73 +2,92 @@ require "Polycode/SceneEntity"
 
 class "Camera" (SceneEntity)
 
-function Camera:Camera(parentScene)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Camera(parentScene)
+
+
+
+
+
+
+function Camera:Camera(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Camera(unpack(arg))
 	end
 end
 
 function Camera:buildFrustrumPlanes()
-	return Polycore.Camera_buildFrustrumPlanes(self.__ptr)
+	local retVal =  Polycore.Camera_buildFrustrumPlanes(self.__ptr)
 end
 
 function Camera:isSphereInFrustrum(pos, fRadius)
-	return Polycore.Camera_isSphereInFrustrum(self.__ptr, pos.__ptr, fRadius)
+	local retVal = Polycore.Camera_isSphereInFrustrum(self.__ptr, pos.__ptr, fRadius)
+	return retVal
 end
 
 function Camera:canSee(entity)
-	return Polycore.Camera_canSee(self.__ptr, entity.__ptr)
+	local retVal = Polycore.Camera_canSee(self.__ptr, entity.__ptr)
+	return retVal
 end
 
 function Camera:setOrthoMode(mode)
-	return Polycore.Camera_setOrthoMode(self.__ptr, mode)
+	local retVal = Polycore.Camera_setOrthoMode(self.__ptr, mode)
 end
 
 function Camera:getOrthoMode()
-	return Polycore.Camera_getOrthoMode(self.__ptr)
+	local retVal =  Polycore.Camera_getOrthoMode(self.__ptr)
+	return retVal
 end
 
 function Camera:setFOV(fov)
-	return Polycore.Camera_setFOV(self.__ptr, fov)
+	local retVal = Polycore.Camera_setFOV(self.__ptr, fov)
 end
 
 function Camera:getFOV()
-	return Polycore.Camera_getFOV(self.__ptr)
+	local retVal =  Polycore.Camera_getFOV(self.__ptr)
+	return retVal
 end
 
 function Camera:doCameraTransform()
-	return Polycore.Camera_doCameraTransform(self.__ptr)
+	local retVal =  Polycore.Camera_doCameraTransform(self.__ptr)
 end
 
 function Camera:setLightDepthTexture(texture)
-	return Polycore.Camera_setLightDepthTexture(self.__ptr, texture.__ptr)
+	local retVal = Polycore.Camera_setLightDepthTexture(self.__ptr, texture.__ptr)
 end
 
 function Camera:setParentScene(parentScene)
-	return Polycore.Camera_setParentScene(self.__ptr, parentScene.__ptr)
+	local retVal = Polycore.Camera_setParentScene(self.__ptr, parentScene.__ptr)
 end
 
 function Camera:hasFilterShader()
-	return Polycore.Camera_hasFilterShader(self.__ptr)
+	local retVal =  Polycore.Camera_hasFilterShader(self.__ptr)
+	return retVal
 end
 
 function Camera:drawFilter()
-	return Polycore.Camera_drawFilter(self.__ptr)
+	local retVal =  Polycore.Camera_drawFilter(self.__ptr)
 end
 
 function Camera:setExposureLevel(level)
-	return Polycore.Camera_setExposureLevel(self.__ptr, level)
+	local retVal = Polycore.Camera_setExposureLevel(self.__ptr, level)
 end
 
 function Camera:getExposureLevel()
-	return Polycore.Camera_getExposureLevel(self.__ptr)
+	local retVal =  Polycore.Camera_getExposureLevel(self.__ptr)
+	return retVal
 end
 
 function Camera:createPostFilter(shaderMaterial)
-	return Polycore.Camera_createPostFilter(self.__ptr, shaderMaterial.__ptr)
+	local retVal = Polycore.Camera_createPostFilter(self.__ptr, shaderMaterial.__ptr)
 end
 
 function Camera:setPostFilter(shaderName)
-	return Polycore.Camera_setPostFilter(self.__ptr, shaderName)
+	local retVal = Polycore.Camera_setPostFilter(self.__ptr, shaderName)
 end
 

+ 54 - 12
Bindings/Contents/LUA/API/Polycode/Color.lua

@@ -1,44 +1,86 @@
 class "Color"
 
-function Color:Color()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Color()
+
+
+function Color:__index__(name)
+	if name == "r" then
+		return Polycore.Color_get_r(self.__ptr)
+	elseif name == "g" then
+		return Polycore.Color_get_g(self.__ptr)
+	elseif name == "b" then
+		return Polycore.Color_get_b(self.__ptr)
+	elseif name == "a" then
+		return Polycore.Color_get_a(self.__ptr)
+	end
+end
+
+
+function Color:__set_callback(name,value)
+	if name == "r" then
+		Polycore.Color_set_r(self.__ptr, value)
+		return true
+	elseif name == "g" then
+		Polycore.Color_set_g(self.__ptr, value)
+		return true
+	elseif name == "b" then
+		Polycore.Color_set_b(self.__ptr, value)
+		return true
+	elseif name == "a" then
+		Polycore.Color_set_a(self.__ptr, value)
+		return true
+	end
+	return false
+end
+
+
+function Color:Color(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Color(unpack(arg))
 	end
 end
 
 function Color:setColorHex(hex)
-	return Polycore.Color_setColorHex(self.__ptr, hex)
+	local retVal = Polycore.Color_setColorHex(self.__ptr, hex)
 end
 
 function Color:setColorHexRGB(hex)
-	return Polycore.Color_setColorHexRGB(self.__ptr, hex)
+	local retVal = Polycore.Color_setColorHexRGB(self.__ptr, hex)
 end
 
 function Color:setColorHSV(h, s, v)
-	return Polycore.Color_setColorHSV(self.__ptr, h, s, v)
+	local retVal = Polycore.Color_setColorHSV(self.__ptr, h, s, v)
 end
 
 function Color:setColorRGBA(r, g, b, a)
-	return Polycore.Color_setColorRGBA(self.__ptr, r, g, b, a)
+	local retVal = Polycore.Color_setColorRGBA(self.__ptr, r, g, b, a)
 end
 
 function Color:setColorRGB(r, g, b)
-	return Polycore.Color_setColorRGB(self.__ptr, r, g, b)
+	local retVal = Polycore.Color_setColorRGB(self.__ptr, r, g, b)
 end
 
 function Color:setColor(r, g, b, a)
-	return Polycore.Color_setColor(self.__ptr, r, g, b, a)
+	local retVal = Polycore.Color_setColor(self.__ptr, r, g, b, a)
 end
 
 function Color:Random()
-	return Polycore.Color_Random(self.__ptr)
+	local retVal =  Polycore.Color_Random(self.__ptr)
 end
 
 function Color:getBrightness()
-	return Polycore.Color_getBrightness(self.__ptr)
+	local retVal =  Polycore.Color_getBrightness(self.__ptr)
+	return retVal
 end
 
 function Color:getUint()
-	return Polycore.Color_getUint(self.__ptr)
+	local retVal =  Polycore.Color_getUint(self.__ptr)
+	return retVal
 end
 

+ 32 - 10
Bindings/Contents/LUA/API/Polycode/Config.lua

@@ -1,36 +1,58 @@
 class "Config"
 
-function Config:Config()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Config()
+
+
+
+
+
+
+function Config:Config(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Config(unpack(arg))
 	end
 end
 
 function Config:loadConfig(configNamespace, fileName)
-	return Polycore.Config_loadConfig(self.__ptr, configNamespace, fileName)
+	local retVal = Polycore.Config_loadConfig(self.__ptr, configNamespace, fileName)
 end
 
 function Config:saveConfig(configNamespace, fileName)
-	return Polycore.Config_saveConfig(self.__ptr, configNamespace, fileName)
+	local retVal = Polycore.Config_saveConfig(self.__ptr, configNamespace, fileName)
 end
 
 function Config:getEntry(configNamespace, key)
-	return Polycore.Config_getEntry(self.__ptr, configNamespace, key)
+	local retVal = Polycore.Config_getEntry(self.__ptr, configNamespace, key)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = ConfigEntry("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Config:setStringValue(configNamespace, key, value)
-	return Polycore.Config_setStringValue(self.__ptr, configNamespace, key, value)
+	local retVal = Polycore.Config_setStringValue(self.__ptr, configNamespace, key, value)
 end
 
 function Config:setNumericValue(configNamespace, key, value)
-	return Polycore.Config_setNumericValue(self.__ptr, configNamespace, key, value)
+	local retVal = Polycore.Config_setNumericValue(self.__ptr, configNamespace, key, value)
 end
 
 function Config:getNumericValue(configNamespace, key)
-	return Polycore.Config_getNumericValue(self.__ptr, configNamespace, key)
+	local retVal = Polycore.Config_getNumericValue(self.__ptr, configNamespace, key)
+	return retVal
 end
 
 function Config:getStringValue(configNamespace, key)
-	return Polycore.Config_getStringValue(self.__ptr, configNamespace, key)
+	local retVal = Polycore.Config_getStringValue(self.__ptr, configNamespace, key)
+	return retVal
 end
 

+ 194 - 7
Bindings/Contents/LUA/API/Polycode/Core.lua

@@ -1,10 +1,197 @@
+require "Polycode/EventDispatcher"
 
-class "Core"
-	
-	function Core:Core()
---		self.__ptr = Polycore.CoreServices()
+class "Core" (EventDispatcher)
+
+
+
+EVENT_CORE_RESIZE = 0
+
+
+
+
+function Core:Update()
+	local retVal =  Polycore.Core_Update(self.__ptr)
+	return retVal
+end
+
+function Core:getTicks()
+	local retVal =  Polycore.Core_getTicks(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = unsignedint("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+
+function Core:enableMouse(newval)
+	local retVal = Polycore.Core_enableMouse(self.__ptr, newval)
+end
+
+function Core:setCursor(cursorType)
+	local retVal = Polycore.Core_setCursor(self.__ptr, cursorType)
+end
+
+function Core:createThread(target)
+	local retVal = Polycore.Core_createThread(self.__ptr, target.__ptr)
+end
+
+function Core:lockMutex(mutex)
+	local retVal = Polycore.Core_lockMutex(self.__ptr, mutex.__ptr)
+end
+
+function Core:unlockMutex(mutex)
+	local retVal = Polycore.Core_unlockMutex(self.__ptr, mutex.__ptr)
+end
+
+function Core:createMutex()
+	local retVal =  Polycore.Core_createMutex(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = CoreMutex("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+
+function Core:copyStringToClipboard(str)
+	local retVal = Polycore.Core_copyStringToClipboard(self.__ptr, str)
+end
+
+function Core:getClipboardString()
+	local retVal =  Polycore.Core_getClipboardString(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = String("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+
+function Core:getServices()
+	local retVal =  Polycore.Core_getServices(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = CoreServices("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+
+function Core:getFPS()
+	local retVal =  Polycore.Core_getFPS(self.__ptr)
+	return retVal
+end
+
+function Core:Shutdown()
+	local retVal =  Polycore.Core_Shutdown(self.__ptr)
+end
+
+function Core:isFullscreen()
+	local retVal =  Polycore.Core_isFullscreen(self.__ptr)
+	return retVal
+end
+
+function Core:getAALevel()
+	local retVal =  Polycore.Core_getAALevel(self.__ptr)
+	return retVal
+end
+
+function Core:getInput()
+	local retVal =  Polycore.Core_getInput(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = CoreInput("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+
+function Core:getXRes()
+	local retVal =  Polycore.Core_getXRes(self.__ptr)
+	return retVal
+end
+
+function Core:getYRes()
+	local retVal =  Polycore.Core_getYRes(self.__ptr)
+	return retVal
+end
+
+function Core:getNumVideoModes()
+	local retVal =  Polycore.Core_getNumVideoModes(self.__ptr)
+	return retVal
+end
+
+function Core:createFolder(folderPath)
+	local retVal = Polycore.Core_createFolder(self.__ptr, folderPath)
+end
+
+function Core:copyDiskItem(itemPath, destItemPath)
+	local retVal = Polycore.Core_copyDiskItem(self.__ptr, itemPath, destItemPath)
+end
+
+function Core:moveDiskItem(itemPath, destItemPath)
+	local retVal = Polycore.Core_moveDiskItem(self.__ptr, itemPath, destItemPath)
+end
+
+function Core:removeDiskItem(itemPath)
+	local retVal = Polycore.Core_removeDiskItem(self.__ptr, itemPath)
+end
+
+function Core:openFolderPicker()
+	local retVal =  Polycore.Core_openFolderPicker(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = String("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
 	end
-	
-	function Core:Update()
---		self.__ptr
+end
+
+function Core:setVideoModeIndex(index, fullScreen, aaLevel)
+	local retVal = Polycore.Core_setVideoModeIndex(self.__ptr, index, fullScreen, aaLevel)
+end
+
+function Core:setVideoMode(xRes, yRes, fullScreen, aaLevel)
+	local retVal = Polycore.Core_setVideoMode(self.__ptr, xRes, yRes, fullScreen, aaLevel)
+end
+
+function Core:resizeTo(xRes, yRes)
+	local retVal = Polycore.Core_resizeTo(self.__ptr, xRes, yRes)
+end
+
+function Core:doSleep()
+	local retVal =  Polycore.Core_doSleep(self.__ptr)
+end
+
+function Core:getElapsed()
+	local retVal =  Polycore.Core_getElapsed(self.__ptr)
+	return retVal
+end
+
+function Core:getTicksFloat()
+	local retVal =  Polycore.Core_getTicksFloat(self.__ptr)
+	return retVal
+end
+
+function Core:setUserPointer(ptr)
+	local retVal = Polycore.Core_setUserPointer(self.__ptr, ptr.__ptr)
+end
+
+function Core:getUserPointer()
+	local retVal =  Polycore.Core_getUserPointer(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = void("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
 	end
+end
+

+ 53 - 14
Bindings/Contents/LUA/API/Polycode/CoreInput.lua

@@ -2,53 +2,92 @@ require "Polycode/EventDispatcher"
 
 class "CoreInput" (EventDispatcher)
 
-function CoreInput:CoreInput()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.CoreInput()
+
+
+MOUSE_BUTTON1 = 0
+MOUSE_BUTTON2 = 1
+MOUSE_BUTTON3 = 2
+
+
+
+
+function CoreInput:CoreInput(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.CoreInput(unpack(arg))
 	end
 end
 
 function CoreInput:mouseWheelUp(ticks)
-	return Polycore.CoreInput_mouseWheelUp(self.__ptr, ticks)
+	local retVal = Polycore.CoreInput_mouseWheelUp(self.__ptr, ticks)
 end
 
 function CoreInput:mouseWheelDown(ticks)
-	return Polycore.CoreInput_mouseWheelDown(self.__ptr, ticks)
+	local retVal = Polycore.CoreInput_mouseWheelDown(self.__ptr, ticks)
 end
 
 function CoreInput:getMouseButtonState(mouseButton)
-	return Polycore.CoreInput_getMouseButtonState(self.__ptr, mouseButton)
+	local retVal = Polycore.CoreInput_getMouseButtonState(self.__ptr, mouseButton)
+	return retVal
 end
 
 function CoreInput:setMouseButtonState(mouseButton, state, ticks)
-	return Polycore.CoreInput_setMouseButtonState(self.__ptr, mouseButton, state, ticks)
+	local retVal = Polycore.CoreInput_setMouseButtonState(self.__ptr, mouseButton, state, ticks)
 end
 
 function CoreInput:setMousePosition(x, y, ticks)
-	return Polycore.CoreInput_setMousePosition(self.__ptr, x, y, ticks)
+	local retVal = Polycore.CoreInput_setMousePosition(self.__ptr, x, y, ticks)
 end
 
 function CoreInput:getMousePosition()
-	return Polycore.CoreInput_getMousePosition(self.__ptr)
+	local retVal =  Polycore.CoreInput_getMousePosition(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Vector2("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function CoreInput:setKeyState(keyCode, code, newState, ticks)
-	return Polycore.CoreInput_setKeyState(self.__ptr, keyCode.__ptr, code.__ptr, newState, ticks)
+	local retVal = Polycore.CoreInput_setKeyState(self.__ptr, keyCode.__ptr, code.__ptr, newState, ticks)
 end
 
 function CoreInput:getKeyState(keyCode)
-	return Polycore.CoreInput_getKeyState(self.__ptr, keyCode.__ptr)
+	local retVal = Polycore.CoreInput_getKeyState(self.__ptr, keyCode.__ptr)
+	return retVal
 end
 
 function CoreInput:getMouseDelta()
-	return Polycore.CoreInput_getMouseDelta(self.__ptr)
+	local retVal =  Polycore.CoreInput_getMouseDelta(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Vector2("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function CoreInput:setDeltaPosition(x, y)
-	return Polycore.CoreInput_setDeltaPosition(self.__ptr, x, y)
+	local retVal = Polycore.CoreInput_setDeltaPosition(self.__ptr, x, y)
 end
 
 function CoreInput:createEvent(event)
-	return Polycore.CoreInput_createEvent(self.__ptr, event.__ptr)
+	local retVal = Polycore.CoreInput_createEvent(event.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = InputEvent("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 

+ 115 - 18
Bindings/Contents/LUA/API/Polycode/CoreServices.lua

@@ -2,75 +2,172 @@ require "Polycode/EventDispatcher"
 
 class "CoreServices" (EventDispatcher)
 
+
+
+
+
+
+
 function CoreServices:getInstance()
-	return Polycore.CoreServices_getInstance(self.__ptr)
+	local retVal =  Polycore.CoreServices_getInstance()
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = CoreServices("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function CoreServices:getRenderMutex()
-	return Polycore.CoreServices_getRenderMutex(self.__ptr)
+	local retVal =  Polycore.CoreServices_getRenderMutex()
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = CoreMutex("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function CoreServices:setRenderer(r_enderer)
-	return Polycore.CoreServices_setRenderer(self.__ptr, r_enderer.__ptr)
+	local retVal = Polycore.CoreServices_setRenderer(self.__ptr, r_enderer.__ptr)
 end
 
 function CoreServices:getRenderer()
-	return Polycore.CoreServices_getRenderer(self.__ptr)
+	local retVal =  Polycore.CoreServices_getRenderer(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Renderer("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function CoreServices:Update(elapsed)
-	return Polycore.CoreServices_Update(self.__ptr, elapsed)
+	local retVal = Polycore.CoreServices_Update(self.__ptr, elapsed)
 end
 
 function CoreServices:setCore(core)
-	return Polycore.CoreServices_setCore(self.__ptr, core.__ptr)
+	local retVal = Polycore.CoreServices_setCore(self.__ptr, core.__ptr)
 end
 
 function CoreServices:getCore()
-	return Polycore.CoreServices_getCore(self.__ptr)
+	local retVal =  Polycore.CoreServices_getCore(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Core("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function CoreServices:handleEvent(event)
-	return Polycore.CoreServices_handleEvent(self.__ptr, event.__ptr)
+	local retVal = Polycore.CoreServices_handleEvent(self.__ptr, event.__ptr)
 end
 
 function CoreServices:installModule(module)
-	return Polycore.CoreServices_installModule(self.__ptr, module.__ptr)
+	local retVal = Polycore.CoreServices_installModule(self.__ptr, module.__ptr)
 end
 
 function CoreServices:getMaterialManager()
-	return Polycore.CoreServices_getMaterialManager(self.__ptr)
+	local retVal =  Polycore.CoreServices_getMaterialManager(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = MaterialManager("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function CoreServices:getScreenManager()
-	return Polycore.CoreServices_getScreenManager(self.__ptr)
+	local retVal =  Polycore.CoreServices_getScreenManager(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = ScreenManager("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function CoreServices:getSceneManager()
-	return Polycore.CoreServices_getSceneManager(self.__ptr)
+	local retVal =  Polycore.CoreServices_getSceneManager(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = SceneManager("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function CoreServices:getTimerManager()
-	return Polycore.CoreServices_getTimerManager(self.__ptr)
+	local retVal =  Polycore.CoreServices_getTimerManager(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = TimerManager("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function CoreServices:getTweenManager()
-	return Polycore.CoreServices_getTweenManager(self.__ptr)
+	local retVal =  Polycore.CoreServices_getTweenManager(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = TweenManager("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function CoreServices:getResourceManager()
-	return Polycore.CoreServices_getResourceManager(self.__ptr)
+	local retVal =  Polycore.CoreServices_getResourceManager(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = ResourceManager("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function CoreServices:getSoundManager()
-	return Polycore.CoreServices_getSoundManager(self.__ptr)
+	local retVal =  Polycore.CoreServices_getSoundManager(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = SoundManager("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function CoreServices:getFontManager()
-	return Polycore.CoreServices_getFontManager(self.__ptr)
+	local retVal =  Polycore.CoreServices_getFontManager(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = FontManager("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function CoreServices:getConfig()
-	return Polycore.CoreServices_getConfig(self.__ptr)
+	local retVal =  Polycore.CoreServices_getConfig(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Config("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 

+ 16 - 3
Bindings/Contents/LUA/API/Polycode/Cubemap.lua

@@ -2,9 +2,22 @@ require "Polycode/Resource"
 
 class "Cubemap" (Resource)
 
-function Cubemap:Cubemap(t0, t1, t2, t3, t4, t5)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Cubemap(t0, t1, t2, t3, t4, t5)
+
+
+
+
+
+
+function Cubemap:Cubemap(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Cubemap(unpack(arg))
 	end
 end
 

+ 30 - 8
Bindings/Contents/LUA/API/Polycode/Data.lua

@@ -1,28 +1,50 @@
 class "Data"
 
-function Data:Data()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Data()
+
+
+
+
+
+
+function Data:Data(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Data(unpack(arg))
 	end
 end
 
 function Data:loadFromFile(fileName)
-	return Polycore.Data_loadFromFile(self.__ptr, fileName)
+	local retVal = Polycore.Data_loadFromFile(self.__ptr, fileName)
 end
 
 function Data:getAsString(encoding)
-	return Polycore.Data_getAsString(self.__ptr, encoding)
+	local retVal = Polycore.Data_getAsString(self.__ptr, encoding)
+	return retVal
 end
 
 function Data:setFromString(str, encoding)
-	return Polycore.Data_setFromString(self.__ptr, str, encoding)
+	local retVal = Polycore.Data_setFromString(self.__ptr, str, encoding)
 end
 
 function Data:saveToFile(fileName)
-	return Polycore.Data_saveToFile(self.__ptr, fileName)
+	local retVal = Polycore.Data_saveToFile(self.__ptr, fileName)
+	return retVal
 end
 
 function Data:getData()
-	return Polycore.Data_getData(self.__ptr)
+	local retVal =  Polycore.Data_getData(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = char("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 

+ 265 - 70
Bindings/Contents/LUA/API/Polycode/Entity.lua

@@ -1,276 +1,471 @@
 class "Entity"
 
-function Entity:Entity()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Entity()
+
+
+function Entity:__index__(name)
+	if name == "custEntityType" then
+		return Polycore.Entity_get_custEntityType(self.__ptr)
+	elseif name == "billboardMode" then
+		return Polycore.Entity_get_billboardMode(self.__ptr)
+	elseif name == "billboardRoll" then
+		return Polycore.Entity_get_billboardRoll(self.__ptr)
+	elseif name == "alphaTest" then
+		return Polycore.Entity_get_alphaTest(self.__ptr)
+	elseif name == "backfaceCulled" then
+		return Polycore.Entity_get_backfaceCulled(self.__ptr)
+	elseif name == "renderWireframe" then
+		return Polycore.Entity_get_renderWireframe(self.__ptr)
+	elseif name == "enabled" then
+		return Polycore.Entity_get_enabled(self.__ptr)
+	elseif name == "visible" then
+		return Polycore.Entity_get_visible(self.__ptr)
+	elseif name == "depthWrite" then
+		return Polycore.Entity_get_depthWrite(self.__ptr)
+	elseif name == "depthTest" then
+		return Polycore.Entity_get_depthTest(self.__ptr)
+	elseif name == "colorAffectsChildren" then
+		return Polycore.Entity_get_colorAffectsChildren(self.__ptr)
+	elseif name == "depthOnly" then
+		return Polycore.Entity_get_depthOnly(self.__ptr)
+	elseif name == "ignoreParentMatrix" then
+		return Polycore.Entity_get_ignoreParentMatrix(self.__ptr)
+	elseif name == "maskByZbuffer" then
+		return Polycore.Entity_get_maskByZbuffer(self.__ptr)
+	elseif name == "isMask" then
+		return Polycore.Entity_get_isMask(self.__ptr)
+	end
+end
+
+
+function Entity:__set_callback(name,value)
+	if name == "custEntityType" then
+		Polycore.Entity_set_custEntityType(self.__ptr, value)
+		return true
+	elseif name == "billboardMode" then
+		Polycore.Entity_set_billboardMode(self.__ptr, value)
+		return true
+	elseif name == "billboardRoll" then
+		Polycore.Entity_set_billboardRoll(self.__ptr, value)
+		return true
+	elseif name == "alphaTest" then
+		Polycore.Entity_set_alphaTest(self.__ptr, value)
+		return true
+	elseif name == "backfaceCulled" then
+		Polycore.Entity_set_backfaceCulled(self.__ptr, value)
+		return true
+	elseif name == "renderWireframe" then
+		Polycore.Entity_set_renderWireframe(self.__ptr, value)
+		return true
+	elseif name == "enabled" then
+		Polycore.Entity_set_enabled(self.__ptr, value)
+		return true
+	elseif name == "visible" then
+		Polycore.Entity_set_visible(self.__ptr, value)
+		return true
+	elseif name == "depthWrite" then
+		Polycore.Entity_set_depthWrite(self.__ptr, value)
+		return true
+	elseif name == "depthTest" then
+		Polycore.Entity_set_depthTest(self.__ptr, value)
+		return true
+	elseif name == "colorAffectsChildren" then
+		Polycore.Entity_set_colorAffectsChildren(self.__ptr, value)
+		return true
+	elseif name == "depthOnly" then
+		Polycore.Entity_set_depthOnly(self.__ptr, value)
+		return true
+	elseif name == "ignoreParentMatrix" then
+		Polycore.Entity_set_ignoreParentMatrix(self.__ptr, value)
+		return true
+	elseif name == "maskByZbuffer" then
+		Polycore.Entity_set_maskByZbuffer(self.__ptr, value)
+		return true
+	elseif name == "isMask" then
+		Polycore.Entity_set_isMask(self.__ptr, value)
+		return true
+	end
+	return false
+end
+
+
+function Entity:Entity(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Entity(unpack(arg))
 	end
 end
 
 function Entity:Render()
-	return Polycore.Entity_Render(self.__ptr)
+	local retVal =  Polycore.Entity_Render(self.__ptr)
 end
 
 function Entity:Update()
-	return Polycore.Entity_Update(self.__ptr)
+	local retVal =  Polycore.Entity_Update(self.__ptr)
 end
 
 function Entity:transformAndRender()
-	return Polycore.Entity_transformAndRender(self.__ptr)
+	local retVal =  Polycore.Entity_transformAndRender(self.__ptr)
 end
 
 function Entity:setMatrix(matrix)
-	return Polycore.Entity_setMatrix(self.__ptr, matrix.__ptr)
+	local retVal = Polycore.Entity_setMatrix(self.__ptr, matrix.__ptr)
 end
 
 function Entity:rebuildTransformMatrix()
-	return Polycore.Entity_rebuildTransformMatrix(self.__ptr)
+	local retVal =  Polycore.Entity_rebuildTransformMatrix(self.__ptr)
 end
 
 function Entity:addEntity(newChild)
-	return Polycore.Entity_addEntity(self.__ptr, newChild.__ptr)
+	local retVal = Polycore.Entity_addEntity(self.__ptr, newChild.__ptr)
 end
 
 function Entity:addChild(newChild)
-	return Polycore.Entity_addChild(self.__ptr, newChild.__ptr)
+	local retVal = Polycore.Entity_addChild(self.__ptr, newChild.__ptr)
 end
 
 function Entity:removeChild(entityToRemove)
-	return Polycore.Entity_removeChild(self.__ptr, entityToRemove.__ptr)
+	local retVal = Polycore.Entity_removeChild(self.__ptr, entityToRemove.__ptr)
 end
 
 function Entity:updateEntityMatrix()
-	return Polycore.Entity_updateEntityMatrix(self.__ptr)
+	local retVal =  Polycore.Entity_updateEntityMatrix(self.__ptr)
 end
 
 function Entity:renderChildren()
-	return Polycore.Entity_renderChildren(self.__ptr)
+	local retVal =  Polycore.Entity_renderChildren(self.__ptr)
 end
 
 function Entity:getPosition()
-	return Polycore.Entity_getPosition(self.__ptr)
+	local retVal =  Polycore.Entity_getPosition(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Vector3("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Entity:setPosition(x, y, z)
-	return Polycore.Entity_setPosition(self.__ptr, x, y, z)
+	local retVal = Polycore.Entity_setPosition(self.__ptr, x, y, z)
 end
 
 function Entity:setPositionX(x)
-	return Polycore.Entity_setPositionX(self.__ptr, x)
+	local retVal = Polycore.Entity_setPositionX(self.__ptr, x)
 end
 
 function Entity:setPositionY(y)
-	return Polycore.Entity_setPositionY(self.__ptr, y)
+	local retVal = Polycore.Entity_setPositionY(self.__ptr, y)
 end
 
 function Entity:setPositionZ(z)
-	return Polycore.Entity_setPositionZ(self.__ptr, z)
+	local retVal = Polycore.Entity_setPositionZ(self.__ptr, z)
 end
 
 function Entity:setScaleX(x)
-	return Polycore.Entity_setScaleX(self.__ptr, x)
+	local retVal = Polycore.Entity_setScaleX(self.__ptr, x)
 end
 
 function Entity:setScaleY(y)
-	return Polycore.Entity_setScaleY(self.__ptr, y)
+	local retVal = Polycore.Entity_setScaleY(self.__ptr, y)
 end
 
 function Entity:setScaleZ(z)
-	return Polycore.Entity_setScaleZ(self.__ptr, z)
+	local retVal = Polycore.Entity_setScaleZ(self.__ptr, z)
 end
 
 function Entity:Translate(x, y, z)
-	return Polycore.Entity_Translate(self.__ptr, x, y, z)
+	local retVal = Polycore.Entity_Translate(self.__ptr, x, y, z)
 end
 
 function Entity:Scale(x, y, z)
-	return Polycore.Entity_Scale(self.__ptr, x, y, z)
+	local retVal = Polycore.Entity_Scale(self.__ptr, x, y, z)
 end
 
 function Entity:setScale(x, y, z)
-	return Polycore.Entity_setScale(self.__ptr, x, y, z)
+	local retVal = Polycore.Entity_setScale(self.__ptr, x, y, z)
 end
 
 function Entity:getScale()
-	return Polycore.Entity_getScale(self.__ptr)
+	local retVal =  Polycore.Entity_getScale(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Vector3("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Entity:getCombinedPosition()
-	return Polycore.Entity_getCombinedPosition(self.__ptr)
+	local retVal =  Polycore.Entity_getCombinedPosition(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Vector3("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Entity:getCombinedPitch()
-	return Polycore.Entity_getCombinedPitch(self.__ptr)
+	local retVal =  Polycore.Entity_getCombinedPitch(self.__ptr)
+	return retVal
 end
 
 function Entity:getCombinedYaw()
-	return Polycore.Entity_getCombinedYaw(self.__ptr)
+	local retVal =  Polycore.Entity_getCombinedYaw(self.__ptr)
+	return retVal
 end
 
 function Entity:getCombinedRoll()
-	return Polycore.Entity_getCombinedRoll(self.__ptr)
+	local retVal =  Polycore.Entity_getCombinedRoll(self.__ptr)
+	return retVal
 end
 
 function Entity:setParentEntity(entity)
-	return Polycore.Entity_setParentEntity(self.__ptr, entity.__ptr)
+	local retVal = Polycore.Entity_setParentEntity(self.__ptr, entity.__ptr)
 end
 
 function Entity:getParentEntity()
-	return Polycore.Entity_getParentEntity(self.__ptr)
+	local retVal =  Polycore.Entity_getParentEntity(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Entity("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Entity:rebuildRotation()
-	return Polycore.Entity_rebuildRotation(self.__ptr)
+	local retVal =  Polycore.Entity_rebuildRotation(self.__ptr)
 end
 
 function Entity:dirtyMatrix(val)
-	return Polycore.Entity_dirtyMatrix(self.__ptr, val)
+	local retVal = Polycore.Entity_dirtyMatrix(self.__ptr, val)
 end
 
 function Entity:setPitch(pitch)
-	return Polycore.Entity_setPitch(self.__ptr, pitch)
+	local retVal = Polycore.Entity_setPitch(self.__ptr, pitch)
 end
 
 function Entity:setYaw(yaw)
-	return Polycore.Entity_setYaw(self.__ptr, yaw)
+	local retVal = Polycore.Entity_setYaw(self.__ptr, yaw)
 end
 
 function Entity:setRoll(roll)
-	return Polycore.Entity_setRoll(self.__ptr, roll)
+	local retVal = Polycore.Entity_setRoll(self.__ptr, roll)
 end
 
 function Entity:Roll(roll)
-	return Polycore.Entity_Roll(self.__ptr, roll)
+	local retVal = Polycore.Entity_Roll(self.__ptr, roll)
 end
 
 function Entity:Yaw(roll)
-	return Polycore.Entity_Yaw(self.__ptr, roll)
+	local retVal = Polycore.Entity_Yaw(self.__ptr, roll)
 end
 
 function Entity:Pitch(roll)
-	return Polycore.Entity_Pitch(self.__ptr, roll)
+	local retVal = Polycore.Entity_Pitch(self.__ptr, roll)
 end
 
 function Entity:getPitch()
-	return Polycore.Entity_getPitch(self.__ptr)
+	local retVal =  Polycore.Entity_getPitch(self.__ptr)
+	return retVal
 end
 
 function Entity:getYaw()
-	return Polycore.Entity_getYaw(self.__ptr)
+	local retVal =  Polycore.Entity_getYaw(self.__ptr)
+	return retVal
 end
 
 function Entity:getRoll()
-	return Polycore.Entity_getRoll(self.__ptr)
+	local retVal =  Polycore.Entity_getRoll(self.__ptr)
+	return retVal
 end
 
 function Entity:setRotationQuat(w, x, y, z)
-	return Polycore.Entity_setRotationQuat(self.__ptr, w, x, y, z)
+	local retVal = Polycore.Entity_setRotationQuat(self.__ptr, w, x, y, z)
 end
 
 function Entity:getRotationQuat()
-	return Polycore.Entity_getRotationQuat(self.__ptr)
+	local retVal =  Polycore.Entity_getRotationQuat(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Quaternion("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Entity:getTransformMatrix()
-	return Polycore.Entity_getTransformMatrix(self.__ptr)
+	local retVal =  Polycore.Entity_getTransformMatrix(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Matrix4("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Entity:getConcatenatedMatrix()
-	return Polycore.Entity_getConcatenatedMatrix(self.__ptr)
+	local retVal =  Polycore.Entity_getConcatenatedMatrix(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Matrix4("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Entity:getConcatenatedRollMatrix()
-	return Polycore.Entity_getConcatenatedRollMatrix(self.__ptr)
+	local retVal =  Polycore.Entity_getConcatenatedRollMatrix(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Matrix4("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Entity:setTransformByMatrix(matrix)
-	return Polycore.Entity_setTransformByMatrix(self.__ptr, matrix.__ptr)
+	local retVal = Polycore.Entity_setTransformByMatrix(self.__ptr, matrix.__ptr)
 end
 
 function Entity:setTransformByMatrixPure(matrix)
-	return Polycore.Entity_setTransformByMatrixPure(self.__ptr, matrix.__ptr)
+	local retVal = Polycore.Entity_setTransformByMatrixPure(self.__ptr, matrix.__ptr)
 end
 
 function Entity:setRenderer(r_enderer)
-	return Polycore.Entity_setRenderer(self.__ptr, r_enderer.__ptr)
+	local retVal = Polycore.Entity_setRenderer(self.__ptr, r_enderer.__ptr)
 end
 
 function Entity:getCombinedColor()
-	return Polycore.Entity_getCombinedColor(self.__ptr)
+	local retVal =  Polycore.Entity_getCombinedColor(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Color("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Entity:setColor(r, g, b, a)
-	return Polycore.Entity_setColor(self.__ptr, r, g, b, a)
+	local retVal = Polycore.Entity_setColor(self.__ptr, r, g, b, a)
 end
 
 function Entity:setColorInt(r, g, b, a)
-	return Polycore.Entity_setColorInt(self.__ptr, r, g, b, a)
+	local retVal = Polycore.Entity_setColorInt(self.__ptr, r, g, b, a)
 end
 
 function Entity:recalculateBBox()
-	return Polycore.Entity_recalculateBBox(self.__ptr)
+	local retVal =  Polycore.Entity_recalculateBBox(self.__ptr)
 end
 
 function Entity:getBBoxRadius()
-	return Polycore.Entity_getBBoxRadius(self.__ptr)
+	local retVal =  Polycore.Entity_getBBoxRadius(self.__ptr)
+	return retVal
 end
 
 function Entity:getCompoundBBoxRadius()
-	return Polycore.Entity_getCompoundBBoxRadius(self.__ptr)
+	local retVal =  Polycore.Entity_getCompoundBBoxRadius(self.__ptr)
+	return retVal
 end
 
 function Entity:setBBoxRadius(rad)
-	return Polycore.Entity_setBBoxRadius(self.__ptr, rad)
+	local retVal = Polycore.Entity_setBBoxRadius(self.__ptr, rad)
 end
 
 function Entity:setBlendingMode(newBl_endingMode)
-	return Polycore.Entity_setBlendingMode(self.__ptr, newBl_endingMode)
+	local retVal = Polycore.Entity_setBlendingMode(self.__ptr, newBl_endingMode)
 end
 
 function Entity:getChildCenter()
-	return Polycore.Entity_getChildCenter(self.__ptr)
+	local retVal =  Polycore.Entity_getChildCenter(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Vector3("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Entity:setDepthWrite(val)
-	return Polycore.Entity_setDepthWrite(self.__ptr, val)
+	local retVal = Polycore.Entity_setDepthWrite(self.__ptr, val)
 end
 
 function Entity:doUpdates()
-	return Polycore.Entity_doUpdates(self.__ptr)
+	local retVal =  Polycore.Entity_doUpdates(self.__ptr)
 end
 
 function Entity:lookAt(loc, upVector)
-	return Polycore.Entity_lookAt(self.__ptr, loc.__ptr, upVector.__ptr)
+	local retVal = Polycore.Entity_lookAt(self.__ptr, loc.__ptr, upVector.__ptr)
 end
 
 function Entity:lookAtEntity(entity, upVector)
-	return Polycore.Entity_lookAtEntity(self.__ptr, entity.__ptr, upVector.__ptr)
+	local retVal = Polycore.Entity_lookAtEntity(self.__ptr, entity.__ptr, upVector.__ptr)
 end
 
 function Entity:getLookAtMatrix(loc, upVector)
-	return Polycore.Entity_getLookAtMatrix(self.__ptr, loc.__ptr, upVector.__ptr)
+	local retVal = Polycore.Entity_getLookAtMatrix(self.__ptr, loc.__ptr, upVector.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Matrix4("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Entity:buildPositionMatrix()
-	return Polycore.Entity_buildPositionMatrix(self.__ptr)
+	local retVal =  Polycore.Entity_buildPositionMatrix(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Matrix4("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Entity:adjustMatrixForChildren()
-	return Polycore.Entity_adjustMatrixForChildren(self.__ptr)
+	local retVal =  Polycore.Entity_adjustMatrixForChildren(self.__ptr)
 end
 
 function Entity:setMask(mask)
-	return Polycore.Entity_setMask(self.__ptr, mask.__ptr)
+	local retVal = Polycore.Entity_setMask(self.__ptr, mask.__ptr)
 end
 
 function Entity:clearMask()
-	return Polycore.Entity_clearMask(self.__ptr)
+	local retVal =  Polycore.Entity_clearMask(self.__ptr)
 end
 
 function Entity:getCompoundScale()
-	return Polycore.Entity_getCompoundScale(self.__ptr)
+	local retVal =  Polycore.Entity_getCompoundScale(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Vector3("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Entity:getEntityProp(propName)
-	return Polycore.Entity_getEntityProp(self.__ptr, propName)
+	local retVal = Polycore.Entity_getEntityProp(self.__ptr, propName)
+	return retVal
 end
 

+ 32 - 8
Bindings/Contents/LUA/API/Polycode/Event.lua

@@ -1,28 +1,52 @@
 class "Event"
 
-function Event:Event()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Event()
+
+
+COMPLETE_EVENT = 0
+CHANGE_EVENT = 1
+
+
+
+
+function Event:Event(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Event(unpack(arg))
 	end
 end
 
 function Event:getEventCode()
-	return Polycore.Event_getEventCode(self.__ptr)
+	local retVal =  Polycore.Event_getEventCode(self.__ptr)
+	return retVal
 end
 
 function Event:setEventCode(eventCode)
-	return Polycore.Event_setEventCode(self.__ptr, eventCode)
+	local retVal = Polycore.Event_setEventCode(self.__ptr, eventCode)
 end
 
 function Event:getDispatcher()
-	return Polycore.Event_getDispatcher(self.__ptr)
+	local retVal =  Polycore.Event_getDispatcher(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = EventDispatcher("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Event:setDispatcher(dispatcher)
-	return Polycore.Event_setDispatcher(self.__ptr, dispatcher.__ptr)
+	local retVal = Polycore.Event_setDispatcher(self.__ptr, dispatcher.__ptr)
 end
 
 function Event:getEventType()
-	return Polycore.Event_getEventType(self.__ptr)
+	local retVal =  Polycore.Event_getEventType(self.__ptr)
+	return retVal
 end
 

+ 23 - 10
Bindings/Contents/LUA/API/Polycode/EventDispatcher.lua

@@ -2,37 +2,50 @@ require "Polycode/EventHandler"
 
 class "EventDispatcher" (EventHandler)
 
-function EventDispatcher:EventDispatcher()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.EventDispatcher()
+
+
+
+
+
+
+function EventDispatcher:EventDispatcher(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.EventDispatcher(unpack(arg))
 	end
 end
 
 function EventDispatcher:removeAllHandlers()
-	return Polycore.EventDispatcher_removeAllHandlers(self.__ptr)
+	local retVal =  Polycore.EventDispatcher_removeAllHandlers(self.__ptr)
 end
 
 function EventDispatcher:removeAllHandlersForListener(listener)
-	return Polycore.EventDispatcher_removeAllHandlersForListener(self.__ptr, listener.__ptr)
+	local retVal = Polycore.EventDispatcher_removeAllHandlersForListener(self.__ptr, listener.__ptr)
 end
 
 function EventDispatcher:addEventListener(handler, eventCode)
-	return Polycore.EventDispatcher_addEventListener(self.__ptr, handler.__ptr, eventCode)
+	local retVal = Polycore.EventDispatcher_addEventListener(self.__ptr, handler.__ptr, eventCode)
 end
 
 function EventDispatcher:removeEventListener(handler, eventCode)
-	return Polycore.EventDispatcher_removeEventListener(self.__ptr, handler.__ptr, eventCode)
+	local retVal = Polycore.EventDispatcher_removeEventListener(self.__ptr, handler.__ptr, eventCode)
 end
 
 function EventDispatcher:__dispatchEvent(event, eventCode)
-	return Polycore.EventDispatcher___dispatchEvent(self.__ptr, event.__ptr, eventCode)
+	local retVal = Polycore.EventDispatcher___dispatchEvent(self.__ptr, event.__ptr, eventCode)
 end
 
 function EventDispatcher:dispatchEvent(event, eventCode)
-	return Polycore.EventDispatcher_dispatchEvent(self.__ptr, event.__ptr, eventCode)
+	local retVal = Polycore.EventDispatcher_dispatchEvent(self.__ptr, event.__ptr, eventCode)
 end
 
 function EventDispatcher:dispatchEventNoDelete(event, eventCode)
-	return Polycore.EventDispatcher_dispatchEventNoDelete(self.__ptr, event.__ptr, eventCode)
+	local retVal = Polycore.EventDispatcher_dispatchEventNoDelete(self.__ptr, event.__ptr, eventCode)
 end
 

+ 18 - 5
Bindings/Contents/LUA/API/Polycode/EventHandler.lua

@@ -1,16 +1,29 @@
 class "EventHandler"
 
-function EventHandler:EventHandler()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.EventHandler()
+
+
+
+
+
+
+function EventHandler:EventHandler(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.EventHandler(unpack(arg))
 	end
 end
 
 function EventHandler:secondaryHandler(event)
-	return Polycore.EventHandler_secondaryHandler(self.__ptr, event.__ptr)
+	local retVal = Polycore.EventHandler_secondaryHandler(self.__ptr, event.__ptr)
 end
 
 function EventHandler:handleEvent(event)
-	return Polycore.EventHandler_handleEvent(self.__ptr, event.__ptr)
+	local retVal = Polycore.EventHandler_handleEvent(self.__ptr, event.__ptr)
 end
 

+ 27 - 5
Bindings/Contents/LUA/API/Polycode/FixedShader.lua

@@ -1,12 +1,34 @@
-class "FixedShader"
+require "Polycode/Shader"
 
-function FixedShader:FixedShader()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.FixedShader()
+class "FixedShader" (Shader)
+
+
+
+
+
+
+
+function FixedShader:FixedShader(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.FixedShader(unpack(arg))
 	end
 end
 
 function FixedShader:createBinding()
-	return Polycore.FixedShader_createBinding(self.__ptr)
+	local retVal =  Polycore.FixedShader_createBinding(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = ShaderBinding("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 

+ 30 - 8
Bindings/Contents/LUA/API/Polycode/FixedShaderBinding.lua

@@ -1,24 +1,46 @@
-class "FixedShaderBinding"
+require "Polycode/ShaderBinding"
 
-function FixedShaderBinding:FixedShaderBinding(shader)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.FixedShaderBinding(shader)
+class "FixedShaderBinding" (ShaderBinding)
+
+
+
+
+
+
+
+function FixedShaderBinding:FixedShaderBinding(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.FixedShaderBinding(unpack(arg))
 	end
 end
 
 function FixedShaderBinding:addTexture(name, texture)
-	return Polycore.FixedShaderBinding_addTexture(self.__ptr, name, texture.__ptr)
+	local retVal = Polycore.FixedShaderBinding_addTexture(self.__ptr, name, texture.__ptr)
 end
 
 function FixedShaderBinding:addCubemap(name, cubemap)
-	return Polycore.FixedShaderBinding_addCubemap(self.__ptr, name, cubemap.__ptr)
+	local retVal = Polycore.FixedShaderBinding_addCubemap(self.__ptr, name, cubemap.__ptr)
 end
 
 function FixedShaderBinding:addParam(type, name, value)
-	return Polycore.FixedShaderBinding_addParam(self.__ptr, type, name, value)
+	local retVal = Polycore.FixedShaderBinding_addParam(self.__ptr, type, name, value)
 end
 
 function FixedShaderBinding:getDiffuseTexture()
-	return Polycore.FixedShaderBinding_getDiffuseTexture(self.__ptr)
+	local retVal =  Polycore.FixedShaderBinding_getDiffuseTexture(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Texture("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 

+ 26 - 5
Bindings/Contents/LUA/API/Polycode/Font.lua

@@ -1,16 +1,37 @@
 class "Font"
 
-function Font:Font(fileName)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Font(fileName)
+
+
+
+
+
+
+function Font:Font(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Font(unpack(arg))
 	end
 end
 
 function Font:getFace()
-	return Polycore.Font_getFace(self.__ptr)
+	local retVal =  Polycore.Font_getFace(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = FT_Face("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Font:isValid()
-	return Polycore.Font_isValid(self.__ptr)
+	local retVal =  Polycore.Font_isValid(self.__ptr)
+	return retVal
 end
 

+ 25 - 5
Bindings/Contents/LUA/API/Polycode/FontManager.lua

@@ -1,16 +1,36 @@
 class "FontManager"
 
-function FontManager:FontManager()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.FontManager()
+
+
+
+
+
+
+function FontManager:FontManager(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.FontManager(unpack(arg))
 	end
 end
 
 function FontManager:registerFont(fontName, fontPath)
-	return Polycore.FontManager_registerFont(self.__ptr, fontName, fontPath)
+	local retVal = Polycore.FontManager_registerFont(self.__ptr, fontName, fontPath)
 end
 
 function FontManager:getFontByName(fontName)
-	return Polycore.FontManager_getFontByName(self.__ptr, fontName)
+	local retVal = Polycore.FontManager_getFontByName(self.__ptr, fontName)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Font("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 

+ 68 - 31
Bindings/Contents/LUA/API/Polycode/Image.lua

@@ -1,120 +1,157 @@
 class "Image"
 
-function Image:Image(fileName)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Image(fileName)
+
+
+IMAGE_RGB = 0
+IMAGE_RGBA = 1
+
+
+
+
+function Image:Image(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Image(unpack(arg))
 	end
 end
 
 function Image:loadImage(fileName)
-	return Polycore.Image_loadImage(self.__ptr, fileName)
+	local retVal = Polycore.Image_loadImage(self.__ptr, fileName)
+	return retVal
 end
 
 function Image:loadPNG(fileName)
-	return Polycore.Image_loadPNG(self.__ptr, fileName)
+	local retVal = Polycore.Image_loadPNG(self.__ptr, fileName)
+	return retVal
 end
 
 function Image:createEmpty(width, height)
-	return Polycore.Image_createEmpty(self.__ptr, width, height)
+	local retVal = Polycore.Image_createEmpty(self.__ptr, width, height)
 end
 
 function Image:fill(r, g, b, a)
-	return Polycore.Image_fill(self.__ptr, r, g, b, a)
+	local retVal = Polycore.Image_fill(self.__ptr, r, g, b, a)
 end
 
 function Image:setPixel(x, y, r, g, b, a)
-	return Polycore.Image_setPixel(self.__ptr, x, y, r, g, b, a)
+	local retVal = Polycore.Image_setPixel(self.__ptr, x, y, r, g, b, a)
 end
 
 function Image:getPixel(x, y)
-	return Polycore.Image_getPixel(self.__ptr, x, y)
+	local retVal = Polycore.Image_getPixel(self.__ptr, x, y)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Color("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Image:setAAPixel(x, y, col)
-	return Polycore.Image_setAAPixel(self.__ptr, x, y, col.__ptr)
+	local retVal = Polycore.Image_setAAPixel(self.__ptr, x, y, col.__ptr)
 end
 
 function Image:swap(v1, v2)
-	return Polycore.Image_swap(self.__ptr, v1.__ptr, v2.__ptr)
+	local retVal = Polycore.Image_swap(self.__ptr, v1.__ptr, v2.__ptr)
 end
 
 function Image:line(x0, y0, x1, y1, col)
-	return Polycore.Image_line(self.__ptr, x0, y0, x1, y1, col.__ptr)
+	local retVal = Polycore.Image_line(self.__ptr, x0, y0, x1, y1, col.__ptr)
 end
 
 function Image:moveTo(x, y)
-	return Polycore.Image_moveTo(self.__ptr, x, y)
+	local retVal = Polycore.Image_moveTo(self.__ptr, x, y)
 end
 
 function Image:move(x, y)
-	return Polycore.Image_move(self.__ptr, x, y)
+	local retVal = Polycore.Image_move(self.__ptr, x, y)
 end
 
 function Image:lineTo(x, y, col)
-	return Polycore.Image_lineTo(self.__ptr, x, y, col.__ptr)
+	local retVal = Polycore.Image_lineTo(self.__ptr, x, y, col.__ptr)
 end
 
 function Image:drawRect(x, y, w, h, col)
-	return Polycore.Image_drawRect(self.__ptr, x, y, w, h, col.__ptr)
+	local retVal = Polycore.Image_drawRect(self.__ptr, x, y, w, h, col.__ptr)
 end
 
 function Image:perlinNoise(seed, alpha)
-	return Polycore.Image_perlinNoise(self.__ptr, seed, alpha)
+	local retVal = Polycore.Image_perlinNoise(self.__ptr, seed, alpha)
 end
 
 function Image:fastBlur(blurSize)
-	return Polycore.Image_fastBlur(self.__ptr, blurSize)
+	local retVal = Polycore.Image_fastBlur(self.__ptr, blurSize)
 end
 
 function Image:fastBlurVert(blurSize)
-	return Polycore.Image_fastBlurVert(self.__ptr, blurSize)
+	local retVal = Polycore.Image_fastBlurVert(self.__ptr, blurSize)
 end
 
 function Image:fastBlurHor(blurSize)
-	return Polycore.Image_fastBlurHor(self.__ptr, blurSize)
+	local retVal = Polycore.Image_fastBlurHor(self.__ptr, blurSize)
 end
 
 function Image:darken(amt, color, alpha)
-	return Polycore.Image_darken(self.__ptr, amt, color, alpha)
+	local retVal = Polycore.Image_darken(self.__ptr, amt, color, alpha)
 end
 
 function Image:lighten(amt, color, alpha)
-	return Polycore.Image_lighten(self.__ptr, amt, color, alpha)
+	local retVal = Polycore.Image_lighten(self.__ptr, amt, color, alpha)
 end
 
 function Image:multiply(amt, color, alpha)
-	return Polycore.Image_multiply(self.__ptr, amt, color, alpha)
+	local retVal = Polycore.Image_multiply(self.__ptr, amt, color, alpha)
 end
 
 function Image:getBrushX()
-	return Polycore.Image_getBrushX(self.__ptr)
+	local retVal =  Polycore.Image_getBrushX(self.__ptr)
+	return retVal
 end
 
 function Image:getBrushY()
-	return Polycore.Image_getBrushY(self.__ptr)
+	local retVal =  Polycore.Image_getBrushY(self.__ptr)
+	return retVal
 end
 
 function Image:isLoaded()
-	return Polycore.Image_isLoaded(self.__ptr)
+	local retVal =  Polycore.Image_isLoaded(self.__ptr)
+	return retVal
 end
 
 function Image:getType()
-	return Polycore.Image_getType(self.__ptr)
+	local retVal =  Polycore.Image_getType(self.__ptr)
+	return retVal
 end
 
 function Image:writeBMP(fileName)
-	return Polycore.Image_writeBMP(self.__ptr, fileName)
+	local retVal = Polycore.Image_writeBMP(self.__ptr, fileName)
 end
 
 function Image:getWidth()
-	return Polycore.Image_getWidth(self.__ptr)
+	local retVal =  Polycore.Image_getWidth(self.__ptr)
+	return retVal
 end
 
 function Image:getHeight()
-	return Polycore.Image_getHeight(self.__ptr)
+	local retVal =  Polycore.Image_getHeight(self.__ptr)
+	return retVal
 end
 
 function Image:getPixels()
-	return Polycore.Image_getPixels(self.__ptr)
+	local retVal =  Polycore.Image_getPixels(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = char("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 

+ 46 - 4
Bindings/Contents/LUA/API/Polycode/InputEvent.lua

@@ -2,13 +2,55 @@ require "Polycode/Event"
 
 class "InputEvent" (Event)
 
-function InputEvent:InputEvent(mousePosition, timestamp)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.InputEvent(mousePosition, timestamp)
+
+
+EVENT_MOUSEDOWN = 0
+EVENT_MOUSEUP = 1
+EVENT_MOUSEMOVE = 2
+EVENT_MOUSEOVER = 3
+EVENT_MOUSEOUT = 4
+EVENT_DOUBLECLICK = 5
+EVENT_MOUSEUP_OUTSIDE = 6
+EVENT_MOUSEWHEEL_UP = 7
+EVENT_MOUSEWHEEL_DOWN = 8
+EVENT_KEYDOWN = 13
+EVENT_KEYUP = 14
+function InputEvent:__index__(name)
+	if name == "mouseButton" then
+		return Polycore.InputEvent_get_mouseButton(self.__ptr)
+	elseif name == "timestamp" then
+		return Polycore.InputEvent_get_timestamp(self.__ptr)
+	end
+end
+
+
+function InputEvent:__set_callback(name,value)
+	if name == "mouseButton" then
+		Polycore.InputEvent_set_mouseButton(self.__ptr, value)
+		return true
+	elseif name == "timestamp" then
+		Polycore.InputEvent_set_timestamp(self.__ptr, value)
+		return true
+	end
+	return false
+end
+
+
+function InputEvent:InputEvent(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.InputEvent(unpack(arg))
 	end
 end
 
 function InputEvent:keyCode()
-	return Polycore.InputEvent_keyCode(self.__ptr)
+	local retVal =  Polycore.InputEvent_keyCode(self.__ptr)
+	return retVal
 end
 

+ 33 - 8
Bindings/Contents/LUA/API/Polycode/Label.lua

@@ -2,29 +2,54 @@ require "Polycode/Image"
 
 class "Label" (Image)
 
-function Label:Label(font, text, size, antiAliasMode)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Label(font, text, size, antiAliasMode)
+
+
+ANTIALIAS_FULL = 0
+ANTIALIAS_NONE = 1
+
+
+
+
+function Label:Label(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Label(unpack(arg))
 	end
 end
 
 function Label:setText(text)
-	return Polycore.Label_setText(self.__ptr, text)
+	local retVal = Polycore.Label_setText(self.__ptr, text)
 end
 
 function Label:getText()
-	return Polycore.Label_getText(self.__ptr)
+	local retVal =  Polycore.Label_getText(self.__ptr)
+	return retVal
 end
 
 function Label:getTextWidth(font, text, size)
-	return Polycore.Label_getTextWidth(self.__ptr, font.__ptr, text, size)
+	local retVal = Polycore.Label_getTextWidth(self.__ptr, font.__ptr, text, size)
+	return retVal
 end
 
 function Label:getTextHeight(font, text, size)
-	return Polycore.Label_getTextHeight(self.__ptr, font.__ptr, text, size)
+	local retVal = Polycore.Label_getTextHeight(self.__ptr, font.__ptr, text, size)
+	return retVal
 end
 
 function Label:getFont()
-	return Polycore.Label_getFont(self.__ptr)
+	local retVal =  Polycore.Label_getFont(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Font("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 

+ 18 - 5
Bindings/Contents/LUA/API/Polycode/Logger.lua

@@ -1,16 +1,29 @@
 class "Logger"
 
-function Logger:Logger()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Logger()
+
+
+
+
+
+
+function Logger:Logger(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Logger(unpack(arg))
 	end
 end
 
 function Logger:log(format)
-	return Polycore.Logger_log(self.__ptr, format.__ptr)
+	local retVal = Polycore.Logger_log(format.__ptr)
 end
 
 function Logger:logw(str)
-	return Polycore.Logger_logw(self.__ptr, str.__ptr)
+	local retVal = Polycore.Logger_logw(str.__ptr)
 end
 

+ 49 - 12
Bindings/Contents/LUA/API/Polycode/Material.lua

@@ -2,45 +2,82 @@ require "Polycode/Resource"
 
 class "Material" (Resource)
 
-function Material:Material(name)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Material(name)
+
+
+
+
+
+
+function Material:Material(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Material(unpack(arg))
 	end
 end
 
 function Material:addShader(shader, shaderBinding)
-	return Polycore.Material_addShader(self.__ptr, shader.__ptr, shaderBinding.__ptr)
+	local retVal = Polycore.Material_addShader(self.__ptr, shader.__ptr, shaderBinding.__ptr)
 end
 
 function Material:getNumShaders()
-	return Polycore.Material_getNumShaders(self.__ptr)
+	local retVal =  Polycore.Material_getNumShaders(self.__ptr)
+	return retVal
 end
 
 function Material:addShaderRenderTarget(newTarget)
-	return Polycore.Material_addShaderRenderTarget(self.__ptr, newTarget.__ptr)
+	local retVal = Polycore.Material_addShaderRenderTarget(self.__ptr, newTarget.__ptr)
 end
 
 function Material:getNumShaderRenderTargets()
-	return Polycore.Material_getNumShaderRenderTargets(self.__ptr)
+	local retVal =  Polycore.Material_getNumShaderRenderTargets(self.__ptr)
+	return retVal
 end
 
 function Material:getShaderRenderTarget(index)
-	return Polycore.Material_getShaderRenderTarget(self.__ptr, index)
+	local retVal = Polycore.Material_getShaderRenderTarget(self.__ptr, index)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = ShaderRenderTarget("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Material:getName()
-	return Polycore.Material_getName(self.__ptr)
+	local retVal =  Polycore.Material_getName(self.__ptr)
+	return retVal
 end
 
 function Material:getShader(index)
-	return Polycore.Material_getShader(self.__ptr, index)
+	local retVal = Polycore.Material_getShader(self.__ptr, index)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Shader("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Material:getShaderBinding(index)
-	return Polycore.Material_getShaderBinding(self.__ptr, index)
+	local retVal = Polycore.Material_getShaderBinding(self.__ptr, index)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = ShaderBinding("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Material:loadMaterial(fileName)
-	return Polycore.Material_loadMaterial(self.__ptr, fileName)
+	local retVal = Polycore.Material_loadMaterial(self.__ptr, fileName)
 end
 

+ 103 - 20
Bindings/Contents/LUA/API/Polycode/MaterialManager.lua

@@ -1,76 +1,159 @@
 class "MaterialManager"
 
-function MaterialManager:MaterialManager()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.MaterialManager()
+
+
+
+
+
+
+function MaterialManager:MaterialManager(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.MaterialManager(unpack(arg))
 	end
 end
 
 function MaterialManager:Update(elapsed)
-	return Polycore.MaterialManager_Update(self.__ptr, elapsed)
+	local retVal = Polycore.MaterialManager_Update(self.__ptr, elapsed)
 end
 
 function MaterialManager:createFramebufferTexture(width, height, type)
-	return Polycore.MaterialManager_createFramebufferTexture(self.__ptr, width, height, type)
+	local retVal = Polycore.MaterialManager_createFramebufferTexture(self.__ptr, width, height, type)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Texture("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function MaterialManager:createTexture(width, height, imageData, clamp, type)
-	return Polycore.MaterialManager_createTexture(self.__ptr, width, height, imageData.__ptr, clamp, type)
+	local retVal = Polycore.MaterialManager_createTexture(self.__ptr, width, height, imageData.__ptr, clamp, type)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Texture("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function MaterialManager:createNewTexture(width, height, clamp, type)
-	return Polycore.MaterialManager_createNewTexture(self.__ptr, width, height, clamp, type)
+	local retVal = Polycore.MaterialManager_createNewTexture(self.__ptr, width, height, clamp, type)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Texture("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function MaterialManager:createTextureFromImage(image, clamp)
-	return Polycore.MaterialManager_createTextureFromImage(self.__ptr, image.__ptr, clamp)
+	local retVal = Polycore.MaterialManager_createTextureFromImage(self.__ptr, image.__ptr, clamp)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Texture("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function MaterialManager:createTextureFromFile(fileName, clamp)
-	return Polycore.MaterialManager_createTextureFromFile(self.__ptr, fileName, clamp)
+	local retVal = Polycore.MaterialManager_createTextureFromFile(self.__ptr, fileName, clamp)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Texture("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function MaterialManager:deleteTexture(texture)
-	return Polycore.MaterialManager_deleteTexture(self.__ptr, texture.__ptr)
+	local retVal = Polycore.MaterialManager_deleteTexture(self.__ptr, texture.__ptr)
 end
 
 function MaterialManager:reloadTextures()
-	return Polycore.MaterialManager_reloadTextures(self.__ptr)
+	local retVal =  Polycore.MaterialManager_reloadTextures(self.__ptr)
 end
 
 function MaterialManager:reloadProgramsAndTextures()
-	return Polycore.MaterialManager_reloadProgramsAndTextures(self.__ptr)
+	local retVal =  Polycore.MaterialManager_reloadProgramsAndTextures(self.__ptr)
 end
 
 function MaterialManager:reloadPrograms()
-	return Polycore.MaterialManager_reloadPrograms(self.__ptr)
+	local retVal =  Polycore.MaterialManager_reloadPrograms(self.__ptr)
 end
 
 function MaterialManager:addShaderModule(module)
-	return Polycore.MaterialManager_addShaderModule(self.__ptr, module.__ptr)
+	local retVal = Polycore.MaterialManager_addShaderModule(self.__ptr, module.__ptr)
 end
 
 function MaterialManager:getTextureByResourcePath(resourcePath)
-	return Polycore.MaterialManager_getTextureByResourcePath(self.__ptr, resourcePath)
+	local retVal = Polycore.MaterialManager_getTextureByResourcePath(self.__ptr, resourcePath)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Texture("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function MaterialManager:cubemapFromXMLNode(node)
-	return Polycore.MaterialManager_cubemapFromXMLNode(self.__ptr, node.__ptr)
+	local retVal = Polycore.MaterialManager_cubemapFromXMLNode(self.__ptr, node.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Cubemap("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function MaterialManager:loadMaterialsFromFile(fileName)
-	return Polycore.MaterialManager_loadMaterialsFromFile(self.__ptr, fileName)
+	local retVal = Polycore.MaterialManager_loadMaterialsFromFile(self.__ptr, fileName)
 end
 
 function MaterialManager:materialFromXMLNode(node)
-	return Polycore.MaterialManager_materialFromXMLNode(self.__ptr, node.__ptr)
+	local retVal = Polycore.MaterialManager_materialFromXMLNode(self.__ptr, node.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Material("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function MaterialManager:setShaderFromXMLNode(node)
-	return Polycore.MaterialManager_setShaderFromXMLNode(self.__ptr, node.__ptr)
+	local retVal = Polycore.MaterialManager_setShaderFromXMLNode(self.__ptr, node.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Shader("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function MaterialManager:createShaderFromXMLNode(node)
-	return Polycore.MaterialManager_createShaderFromXMLNode(self.__ptr, node.__ptr)
+	local retVal = Polycore.MaterialManager_createShaderFromXMLNode(self.__ptr, node.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Shader("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 

+ 53 - 12
Bindings/Contents/LUA/API/Polycode/Matrix4.lua

@@ -1,44 +1,85 @@
 class "Matrix4"
 
-function Matrix4:Matrix4()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Matrix4()
+
+
+
+
+
+
+function Matrix4:Matrix4(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Matrix4(unpack(arg))
 	end
 end
 
 function Matrix4:init()
-	return Polycore.Matrix4_init(self.__ptr)
+	local retVal =  Polycore.Matrix4_init(self.__ptr)
 end
 
 function Matrix4:identity()
-	return Polycore.Matrix4_identity(self.__ptr)
+	local retVal =  Polycore.Matrix4_identity(self.__ptr)
 end
 
 function Matrix4:rotateVector(v2)
-	return Polycore.Matrix4_rotateVector(self.__ptr, v2.__ptr)
+	local retVal = Polycore.Matrix4_rotateVector(self.__ptr, v2.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Vector3("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Matrix4:getPosition()
-	return Polycore.Matrix4_getPosition(self.__ptr)
+	local retVal =  Polycore.Matrix4_getPosition(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Vector3("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Matrix4:setPosition(x, y, z)
-	return Polycore.Matrix4_setPosition(self.__ptr, x, y, z)
+	local retVal = Polycore.Matrix4_setPosition(self.__ptr, x, y, z)
 end
 
 function Matrix4:setScale(scale)
-	return Polycore.Matrix4_setScale(self.__ptr, scale.__ptr)
+	local retVal = Polycore.Matrix4_setScale(self.__ptr, scale.__ptr)
 end
 
 function Matrix4:getEulerAngles(ax, ay, az)
-	return Polycore.Matrix4_getEulerAngles(self.__ptr, ax.__ptr, ay.__ptr, az.__ptr)
+	local retVal = Polycore.Matrix4_getEulerAngles(self.__ptr, ax.__ptr, ay.__ptr, az.__ptr)
 end
 
 function Matrix4:inverse()
-	return Polycore.Matrix4_inverse(self.__ptr)
+	local retVal =  Polycore.Matrix4_inverse(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Matrix4("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Matrix4:inverseAffine()
-	return Polycore.Matrix4_inverseAffine(self.__ptr)
+	local retVal =  Polycore.Matrix4_inverseAffine(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Matrix4("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 

+ 100 - 27
Bindings/Contents/LUA/API/Polycode/Mesh.lua

@@ -1,104 +1,177 @@
 class "Mesh"
 
-function Mesh:Mesh(fileName)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Mesh(fileName)
+
+
+QUAD_MESH = 0
+TRI_MESH = 1
+TRIFAN_MESH = 2
+TRISTRIP_MESH = 3
+LINE_MESH = 4
+POINT_MESH = 5
+function Mesh:__index__(name)
+	if name == "useVertexColors" then
+		return Polycore.Mesh_get_useVertexColors(self.__ptr)
+	end
+end
+
+
+function Mesh:__set_callback(name,value)
+	if name == "useVertexColors" then
+		Polycore.Mesh_set_useVertexColors(self.__ptr, value)
+		return true
+	end
+	return false
+end
+
+
+function Mesh:Mesh(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Mesh(unpack(arg))
 	end
 end
 
 function Mesh:addPolygon(newPolygon)
-	return Polycore.Mesh_addPolygon(self.__ptr, newPolygon.__ptr)
+	local retVal = Polycore.Mesh_addPolygon(self.__ptr, newPolygon.__ptr)
 end
 
 function Mesh:loadMesh(fileName)
-	return Polycore.Mesh_loadMesh(self.__ptr, fileName)
+	local retVal = Polycore.Mesh_loadMesh(self.__ptr, fileName)
 end
 
 function Mesh:loadFromFile(inFile)
-	return Polycore.Mesh_loadFromFile(self.__ptr, inFile.__ptr)
+	local retVal = Polycore.Mesh_loadFromFile(self.__ptr, inFile.__ptr)
 end
 
 function Mesh:saveToFile(outFile)
-	return Polycore.Mesh_saveToFile(self.__ptr, outFile.__ptr)
+	local retVal = Polycore.Mesh_saveToFile(self.__ptr, outFile.__ptr)
 end
 
 function Mesh:getPolygonCount()
-	return Polycore.Mesh_getPolygonCount(self.__ptr)
+	local retVal =  Polycore.Mesh_getPolygonCount(self.__ptr)
+	return retVal
 end
 
 function Mesh:getPolygon(index)
-	return Polycore.Mesh_getPolygon(self.__ptr, index)
+	local retVal = Polycore.Mesh_getPolygon(self.__ptr, index)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Polygon("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Mesh:createPlane(w, h)
-	return Polycore.Mesh_createPlane(self.__ptr, w, h)
+	local retVal = Polycore.Mesh_createPlane(self.__ptr, w, h)
 end
 
 function Mesh:createBox(w, d, h)
-	return Polycore.Mesh_createBox(self.__ptr, w, d, h)
+	local retVal = Polycore.Mesh_createBox(self.__ptr, w, d, h)
 end
 
 function Mesh:createSphere(radius, numRings, numSegments)
-	return Polycore.Mesh_createSphere(self.__ptr, radius, numRings, numSegments)
+	local retVal = Polycore.Mesh_createSphere(self.__ptr, radius, numRings, numSegments)
 end
 
 function Mesh:addVertex(vertex)
-	return Polycore.Mesh_addVertex(self.__ptr, vertex.__ptr)
+	local retVal = Polycore.Mesh_addVertex(self.__ptr, vertex.__ptr)
 end
 
 function Mesh:getVertex(index)
-	return Polycore.Mesh_getVertex(self.__ptr, index)
+	local retVal = Polycore.Mesh_getVertex(self.__ptr, index)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Vertex("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Mesh:getNumVertices()
-	return Polycore.Mesh_getNumVertices(self.__ptr)
+	local retVal =  Polycore.Mesh_getNumVertices(self.__ptr)
+	return retVal
 end
 
 function Mesh:recenterMesh()
-	return Polycore.Mesh_recenterMesh(self.__ptr)
+	local retVal =  Polycore.Mesh_recenterMesh(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Vector3("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Mesh:useVertexNormals(val)
-	return Polycore.Mesh_useVertexNormals(self.__ptr, val)
+	local retVal = Polycore.Mesh_useVertexNormals(self.__ptr, val)
 end
 
 function Mesh:getVertexIndex(vertex)
-	return Polycore.Mesh_getVertexIndex(self.__ptr, vertex.__ptr)
+	local retVal = Polycore.Mesh_getVertexIndex(self.__ptr, vertex.__ptr)
+	return retVal
 end
 
 function Mesh:setVertexBuffer(buffer)
-	return Polycore.Mesh_setVertexBuffer(self.__ptr, buffer.__ptr)
+	local retVal = Polycore.Mesh_setVertexBuffer(self.__ptr, buffer.__ptr)
 end
 
 function Mesh:getVertexBuffer()
-	return Polycore.Mesh_getVertexBuffer(self.__ptr)
+	local retVal =  Polycore.Mesh_getVertexBuffer(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = VertexBuffer("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Mesh:usesFaceUV()
-	return Polycore.Mesh_usesFaceUV(self.__ptr)
+	local retVal =  Polycore.Mesh_usesFaceUV(self.__ptr)
+	return retVal
 end
 
 function Mesh:getRadius()
-	return Polycore.Mesh_getRadius(self.__ptr)
+	local retVal =  Polycore.Mesh_getRadius(self.__ptr)
+	return retVal
 end
 
 function Mesh:calculateNormals()
-	return Polycore.Mesh_calculateNormals(self.__ptr)
+	local retVal =  Polycore.Mesh_calculateNormals(self.__ptr)
 end
 
 function Mesh:getMeshType()
-	return Polycore.Mesh_getMeshType(self.__ptr)
+	local retVal =  Polycore.Mesh_getMeshType(self.__ptr)
+	return retVal
 end
 
 function Mesh:setMeshType(newType)
-	return Polycore.Mesh_setMeshType(self.__ptr, newType)
+	local retVal = Polycore.Mesh_setMeshType(self.__ptr, newType)
 end
 
 function Mesh:calculateBBox()
-	return Polycore.Mesh_calculateBBox(self.__ptr)
+	local retVal =  Polycore.Mesh_calculateBBox(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Vector3("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Mesh:hasVertexBuffer()
-	return Polycore.Mesh_hasVertexBuffer(self.__ptr)
+	local retVal =  Polycore.Mesh_hasVertexBuffer(self.__ptr)
+	return retVal
 end
 

+ 28 - 17
Bindings/Contents/LUA/API/Polycode/OSBasics.lua

@@ -1,46 +1,57 @@
 class "OSBasics"
 
+
+
+
+
+
+
 function OSBasics:open(filename, opts)
-	return Polycore.OSBasics_open(self.__ptr, filename, opts)
+	local retVal = Polycore.OSBasics_open(filename, opts)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = OSFILE("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function OSBasics:close(file)
-	return Polycore.OSBasics_close(self.__ptr, file.__ptr)
+	local retVal = Polycore.OSBasics_close(file.__ptr)
+	return retVal
 end
 
 function OSBasics:read(ptr, size, count, stream)
-	return Polycore.OSBasics_read(self.__ptr, ptr.__ptr, size.__ptr, count.__ptr, stream.__ptr)
+	local retVal = Polycore.OSBasics_read(ptr.__ptr, size.__ptr, count.__ptr, stream.__ptr)
+	return retVal
 end
 
 function OSBasics:write(ptr, size, count, stream)
-	return Polycore.OSBasics_write(self.__ptr, ptr.__ptr, size.__ptr, count.__ptr, stream.__ptr)
+	local retVal = Polycore.OSBasics_write(ptr.__ptr, size.__ptr, count.__ptr, stream.__ptr)
+	return retVal
 end
 
 function OSBasics:seek(stream, offset, origin)
-	return Polycore.OSBasics_seek(self.__ptr, stream.__ptr, offset.__ptr, origin)
+	local retVal = Polycore.OSBasics_seek(stream.__ptr, offset.__ptr, origin)
+	return retVal
 end
 
 function OSBasics:tell(stream)
-	return Polycore.OSBasics_tell(self.__ptr, stream.__ptr)
-end
-
-function OSBasics:parsePhysFSFolder(pathString, showHidden)
-	return Polycore.OSBasics_parsePhysFSFolder(self.__ptr, pathString, showHidden)
-end
-
-function OSBasics:parseFolder(pathString, showHidden)
-	return Polycore.OSBasics_parseFolder(self.__ptr, pathString, showHidden)
+	local retVal = Polycore.OSBasics_tell(stream.__ptr)
+	return retVal
 end
 
 function OSBasics:isFolder(pathString)
-	return Polycore.OSBasics_isFolder(self.__ptr, pathString)
+	local retVal = Polycore.OSBasics_isFolder(pathString)
+	return retVal
 end
 
 function OSBasics:createFolder(pathString)
-	return Polycore.OSBasics_createFolder(self.__ptr, pathString)
+	local retVal = Polycore.OSBasics_createFolder(pathString)
 end
 
 function OSBasics:removeItem(pathString)
-	return Polycore.OSBasics_removeItem(self.__ptr, pathString)
+	local retVal = Polycore.OSBasics_removeItem(pathString)
 end
 

+ 31 - 4
Bindings/Contents/LUA/API/Polycode/OSFILE.lua

@@ -1,12 +1,39 @@
 class "OSFILE"
 
-function OSFILE:OSFILE()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.OSFILE()
+
+
+TYPE_FILE = 0
+TYPE_ARCHIVE_FILE = 1
+function OSFILE:__index__(name)
+	if name == "fileType" then
+		return Polycore.OSFILE_get_fileType(self.__ptr)
+	end
+end
+
+
+function OSFILE:__set_callback(name,value)
+	if name == "fileType" then
+		Polycore.OSFILE_set_fileType(self.__ptr, value)
+		return true
+	end
+	return false
+end
+
+
+function OSFILE:OSFILE(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.OSFILE(unpack(arg))
 	end
 end
 
 function OSFILE:debugDump()
-	return Polycore.OSFILE_debugDump(self.__ptr)
+	local retVal =  Polycore.OSFILE_debugDump(self.__ptr)
 end
 

+ 55 - 3
Bindings/Contents/LUA/API/Polycode/OSFileEntry.lua

@@ -1,8 +1,60 @@
 class "OSFileEntry"
 
-function OSFileEntry:OSFileEntry()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.OSFileEntry()
+
+
+TYPE_FILE = 0
+TYPE_FOLDER = 1
+function OSFileEntry:__index__(name)
+	if name == "name" then
+		return Polycore.OSFileEntry_get_name(self.__ptr)
+	elseif name == "extension" then
+		return Polycore.OSFileEntry_get_extension(self.__ptr)
+	elseif name == "nameWithoutExtension" then
+		return Polycore.OSFileEntry_get_nameWithoutExtension(self.__ptr)
+	elseif name == "basePath" then
+		return Polycore.OSFileEntry_get_basePath(self.__ptr)
+	elseif name == "fullPath" then
+		return Polycore.OSFileEntry_get_fullPath(self.__ptr)
+	elseif name == "type" then
+		return Polycore.OSFileEntry_get_type(self.__ptr)
+	end
+end
+
+
+function OSFileEntry:__set_callback(name,value)
+	if name == "name" then
+		Polycore.OSFileEntry_set_name(self.__ptr, value)
+		return true
+	elseif name == "extension" then
+		Polycore.OSFileEntry_set_extension(self.__ptr, value)
+		return true
+	elseif name == "nameWithoutExtension" then
+		Polycore.OSFileEntry_set_nameWithoutExtension(self.__ptr, value)
+		return true
+	elseif name == "basePath" then
+		Polycore.OSFileEntry_set_basePath(self.__ptr, value)
+		return true
+	elseif name == "fullPath" then
+		Polycore.OSFileEntry_set_fullPath(self.__ptr, value)
+		return true
+	elseif name == "type" then
+		Polycore.OSFileEntry_set_type(self.__ptr, value)
+		return true
+	end
+	return false
+end
+
+
+function OSFileEntry:OSFileEntry(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.OSFileEntry(unpack(arg))
 	end
 end
 

+ 72 - 4
Bindings/Contents/LUA/API/Polycode/ObjectEntry.lua

@@ -1,12 +1,80 @@
 class "ObjectEntry"
 
-function ObjectEntry:ObjectEntry()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.ObjectEntry()
+
+
+FLOAT_ENTRY = 0
+INT_ENTRY = 1
+BOOL_ENTRY = 2
+ARRAY_ENTRY = 3
+STRING_ENTRY = 4
+CONTAINER_ENTRY = 5
+function ObjectEntry:__index__(name)
+	if name == "type" then
+		return Polycore.ObjectEntry_get_type(self.__ptr)
+	elseif name == "name" then
+		return Polycore.ObjectEntry_get_name(self.__ptr)
+	elseif name == "NumberVal" then
+		return Polycore.ObjectEntry_get_NumberVal(self.__ptr)
+	elseif name == "intVal" then
+		return Polycore.ObjectEntry_get_intVal(self.__ptr)
+	elseif name == "stringVal" then
+		return Polycore.ObjectEntry_get_stringVal(self.__ptr)
+	elseif name == "boolVal" then
+		return Polycore.ObjectEntry_get_boolVal(self.__ptr)
+	elseif name == "length" then
+		return Polycore.ObjectEntry_get_length(self.__ptr)
+	end
+end
+
+
+function ObjectEntry:__set_callback(name,value)
+	if name == "type" then
+		Polycore.ObjectEntry_set_type(self.__ptr, value)
+		return true
+	elseif name == "name" then
+		Polycore.ObjectEntry_set_name(self.__ptr, value)
+		return true
+	elseif name == "NumberVal" then
+		Polycore.ObjectEntry_set_NumberVal(self.__ptr, value)
+		return true
+	elseif name == "intVal" then
+		Polycore.ObjectEntry_set_intVal(self.__ptr, value)
+		return true
+	elseif name == "stringVal" then
+		Polycore.ObjectEntry_set_stringVal(self.__ptr, value)
+		return true
+	elseif name == "boolVal" then
+		Polycore.ObjectEntry_set_boolVal(self.__ptr, value)
+		return true
+	elseif name == "length" then
+		Polycore.ObjectEntry_set_length(self.__ptr, value)
+		return true
+	end
+	return false
+end
+
+
+function ObjectEntry:ObjectEntry(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.ObjectEntry(unpack(arg))
 	end
 end
 
 function ObjectEntry:addChild(name)
-	return Polycore.ObjectEntry_addChild(self.__ptr, name)
+	local retVal = Polycore.ObjectEntry_addChild(self.__ptr, name)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = ObjectEntry("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 

+ 24 - 4
Bindings/Contents/LUA/API/Polycode/OpenGLCubemap.lua

@@ -2,13 +2,33 @@ require "Polycode/Cubemap"
 
 class "OpenGLCubemap" (Cubemap)
 
-function OpenGLCubemap:OpenGLCubemap(t0, t1, t2, t3, t4, t5)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.OpenGLCubemap(t0, t1, t2, t3, t4, t5)
+
+
+
+
+
+
+function OpenGLCubemap:OpenGLCubemap(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.OpenGLCubemap(unpack(arg))
 	end
 end
 
 function OpenGLCubemap:getTextureID()
-	return Polycore.OpenGLCubemap_getTextureID(self.__ptr)
+	local retVal =  Polycore.OpenGLCubemap_getTextureID(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = GLuint("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 

+ 58 - 6
Bindings/Contents/LUA/API/Polycode/Particle.lua

@@ -1,20 +1,72 @@
 class "Particle"
 
-function Particle:Particle(particleType, isScreenParticle, material, texture, particleMesh)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Particle(particleType, isScreenParticle, material, texture, particleMesh)
+
+
+BILLBOARD_PARTICLE = 0
+MESH_PARTICLE = 1
+function Particle:__index__(name)
+	if name == "life" then
+		return Polycore.Particle_get_life(self.__ptr)
+	elseif name == "lifespan" then
+		return Polycore.Particle_get_lifespan(self.__ptr)
+	elseif name == "brightnessDeviation" then
+		return Polycore.Particle_get_brightnessDeviation(self.__ptr)
+	elseif name == "perlinPosX" then
+		return Polycore.Particle_get_perlinPosX(self.__ptr)
+	elseif name == "perlinPosY" then
+		return Polycore.Particle_get_perlinPosY(self.__ptr)
+	elseif name == "perlinPosZ" then
+		return Polycore.Particle_get_perlinPosZ(self.__ptr)
+	end
+end
+
+
+function Particle:__set_callback(name,value)
+	if name == "life" then
+		Polycore.Particle_set_life(self.__ptr, value)
+		return true
+	elseif name == "lifespan" then
+		Polycore.Particle_set_lifespan(self.__ptr, value)
+		return true
+	elseif name == "brightnessDeviation" then
+		Polycore.Particle_set_brightnessDeviation(self.__ptr, value)
+		return true
+	elseif name == "perlinPosX" then
+		Polycore.Particle_set_perlinPosX(self.__ptr, value)
+		return true
+	elseif name == "perlinPosY" then
+		Polycore.Particle_set_perlinPosY(self.__ptr, value)
+		return true
+	elseif name == "perlinPosZ" then
+		Polycore.Particle_set_perlinPosZ(self.__ptr, value)
+		return true
+	end
+	return false
+end
+
+
+function Particle:Particle(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Particle(unpack(arg))
 	end
 end
 
 function Particle:Reset(continuious)
-	return Polycore.Particle_Reset(self.__ptr, continuious)
+	local retVal = Polycore.Particle_Reset(self.__ptr, continuious)
 end
 
 function Particle:createSceneParticle(particleType, texture, particleMesh)
-	return Polycore.Particle_createSceneParticle(self.__ptr, particleType, texture.__ptr, particleMesh.__ptr)
+	local retVal = Polycore.Particle_createSceneParticle(self.__ptr, particleType, texture.__ptr, particleMesh.__ptr)
 end
 
 function Particle:createScreenParticle(particleType, texture, particleMesh)
-	return Polycore.Particle_createScreenParticle(self.__ptr, particleType, texture.__ptr, particleMesh.__ptr)
+	local retVal = Polycore.Particle_createScreenParticle(self.__ptr, particleType, texture.__ptr, particleMesh.__ptr)
 end
 

+ 146 - 0
Bindings/Contents/LUA/API/Polycode/ParticleEmitter.lua

@@ -0,0 +1,146 @@
+class "ParticleEmitter"
+
+
+
+CONTINUOUS_EMITTER = 0
+TRIGGERED_EMITTER = 1
+CLOUD_EMITTER = 2
+function ParticleEmitter:__index__(name)
+	if name == "particleSpeedMod" then
+		return Polycore.ParticleEmitter_get_particleSpeedMod(self.__ptr)
+	elseif name == "brightnessDeviation" then
+		return Polycore.ParticleEmitter_get_brightnessDeviation(self.__ptr)
+	elseif name == "lifespan" then
+		return Polycore.ParticleEmitter_get_lifespan(self.__ptr)
+	elseif name == "rotationFollowsPath" then
+		return Polycore.ParticleEmitter_get_rotationFollowsPath(self.__ptr)
+	end
+end
+
+
+function ParticleEmitter:__set_callback(name,value)
+	if name == "particleSpeedMod" then
+		Polycore.ParticleEmitter_set_particleSpeedMod(self.__ptr, value)
+		return true
+	elseif name == "brightnessDeviation" then
+		Polycore.ParticleEmitter_set_brightnessDeviation(self.__ptr, value)
+		return true
+	elseif name == "lifespan" then
+		Polycore.ParticleEmitter_set_lifespan(self.__ptr, value)
+		return true
+	elseif name == "rotationFollowsPath" then
+		Polycore.ParticleEmitter_set_rotationFollowsPath(self.__ptr, value)
+		return true
+	end
+	return false
+end
+
+
+function ParticleEmitter:createParticles()
+	local retVal =  Polycore.ParticleEmitter_createParticles(self.__ptr)
+end
+
+function ParticleEmitter:setRotationSpeed(speed)
+	local retVal = Polycore.ParticleEmitter_setRotationSpeed(self.__ptr, speed)
+end
+
+function ParticleEmitter:setStartingColor(c)
+	local retVal = Polycore.ParticleEmitter_setStartingColor(self.__ptr, c.__ptr)
+end
+
+function ParticleEmitter:setEndingColor(c)
+	local retVal = Polycore.ParticleEmitter_setEndingColor(self.__ptr, c.__ptr)
+end
+
+function ParticleEmitter:setParticleBlendingMode(mode)
+	local retVal = Polycore.ParticleEmitter_setParticleBlendingMode(self.__ptr, mode)
+end
+
+function ParticleEmitter:setDepthWrite(val)
+	local retVal = Polycore.ParticleEmitter_setDepthWrite(self.__ptr, val)
+end
+
+function ParticleEmitter:setDepthTest(val)
+	local retVal = Polycore.ParticleEmitter_setDepthTest(self.__ptr, val)
+end
+
+function ParticleEmitter:setAlphaTest(val)
+	local retVal = Polycore.ParticleEmitter_setAlphaTest(self.__ptr, val)
+end
+
+function ParticleEmitter:enablePerlin(val)
+	local retVal = Polycore.ParticleEmitter_enablePerlin(self.__ptr, val)
+end
+
+function ParticleEmitter:setBillboardMode(mode)
+	local retVal = Polycore.ParticleEmitter_setBillboardMode(self.__ptr, mode)
+end
+
+function ParticleEmitter:enableEmitter(val)
+	local retVal = Polycore.ParticleEmitter_enableEmitter(self.__ptr, val)
+end
+
+function ParticleEmitter:emitterEnabled()
+	local retVal =  Polycore.ParticleEmitter_emitterEnabled(self.__ptr)
+	return retVal
+end
+
+function ParticleEmitter:setEmitterRadius(rad)
+	local retVal = Polycore.ParticleEmitter_setEmitterRadius(self.__ptr, rad)
+end
+
+function ParticleEmitter:setStartingScaleModifier(mod)
+	local retVal = Polycore.ParticleEmitter_setStartingScaleModifier(self.__ptr, mod)
+end
+
+function ParticleEmitter:setEndingScaleModifier(mod)
+	local retVal = Polycore.ParticleEmitter_setEndingScaleModifier(self.__ptr, mod)
+end
+
+function ParticleEmitter:setEmitRotationVector(rotVector)
+	local retVal = Polycore.ParticleEmitter_setEmitRotationVector(self.__ptr, rotVector.__ptr)
+end
+
+function ParticleEmitter:setEmitRotationDeviance(rotVector)
+	local retVal = Polycore.ParticleEmitter_setEmitRotationDeviance(self.__ptr, rotVector.__ptr)
+end
+
+function ParticleEmitter:setAllAtOnce(val)
+	local retVal = Polycore.ParticleEmitter_setAllAtOnce(self.__ptr, val)
+end
+
+function ParticleEmitter:Trigger()
+	local retVal =  Polycore.ParticleEmitter_Trigger(self.__ptr)
+end
+
+function ParticleEmitter:resetParticle(particle)
+	local retVal = Polycore.ParticleEmitter_resetParticle(self.__ptr, particle.__ptr)
+end
+
+function ParticleEmitter:setPerlinModSize(size)
+	local retVal = Polycore.ParticleEmitter_setPerlinModSize(self.__ptr, size)
+end
+
+function ParticleEmitter:setParticleCount(count)
+	local retVal = Polycore.ParticleEmitter_setParticleCount(self.__ptr, count)
+end
+
+function ParticleEmitter:addParticleBody(particleBody)
+	local retVal = Polycore.ParticleEmitter_addParticleBody(self.__ptr, particleBody.__ptr)
+end
+
+function ParticleEmitter:getBaseMatrix()
+	local retVal =  Polycore.ParticleEmitter_getBaseMatrix(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Matrix4("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+
+function ParticleEmitter:updateEmitter()
+	local retVal =  Polycore.ParticleEmitter_updateEmitter(self.__ptr)
+end
+

+ 18 - 4
Bindings/Contents/LUA/API/Polycode/Perlin.lua

@@ -1,12 +1,26 @@
 class "Perlin"
 
-function Perlin:Perlin(octaves, freq, amp, seed)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Perlin(octaves, freq, amp, seed)
+
+
+
+
+
+
+function Perlin:Perlin(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Perlin(unpack(arg))
 	end
 end
 
 function Perlin:Get(x, y)
-	return Polycore.Perlin_Get(self.__ptr, x, y)
+	local retVal = Polycore.Perlin_Get(self.__ptr, x, y)
+	return retVal
 end
 

+ 20 - 4
Bindings/Contents/LUA/API/Polycode/PolycodeModule.lua

@@ -1,12 +1,28 @@
 class "PolycodeModule"
 
-function PolycodeModule:PolycodeModule()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.PolycodeModule()
+
+
+TYPE_GENERIC = 0
+TYPE_SHADER = 0
+
+
+
+
+function PolycodeModule:PolycodeModule(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.PolycodeModule(unpack(arg))
 	end
 end
 
 function PolycodeModule:getType()
-	return Polycore.PolycodeModule_getType(self.__ptr)
+	local retVal =  Polycore.PolycodeModule_getType(self.__ptr)
+	return retVal
 end
 

+ 92 - 18
Bindings/Contents/LUA/API/Polycode/Polygon.lua

@@ -1,68 +1,142 @@
 class "Polygon"
 
-function Polygon:Polygon()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Polygon()
+
+
+function Polygon:__index__(name)
+	if name == "useVertexNormals" then
+		return Polycore.Polygon_get_useVertexNormals(self.__ptr)
+	elseif name == "hasSecUVs" then
+		return Polycore.Polygon_get_hasSecUVs(self.__ptr)
+	end
+end
+
+
+function Polygon:__set_callback(name,value)
+	if name == "useVertexNormals" then
+		Polycore.Polygon_set_useVertexNormals(self.__ptr, value)
+		return true
+	elseif name == "hasSecUVs" then
+		Polycore.Polygon_set_hasSecUVs(self.__ptr, value)
+		return true
+	end
+	return false
+end
+
+
+function Polygon:Polygon(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Polygon(unpack(arg))
 	end
 end
 
 function Polygon:getVertexCount()
-	return Polycore.Polygon_getVertexCount(self.__ptr)
+	local retVal =  Polycore.Polygon_getVertexCount(self.__ptr)
+	return retVal
 end
 
 function Polygon:getVertex(index)
-	return Polycore.Polygon_getVertex(self.__ptr, index)
+	local retVal = Polycore.Polygon_getVertex(self.__ptr, index)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Vertex("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Polygon:addVertex(x, y, z)
-	return Polycore.Polygon_addVertex(self.__ptr, x, y, z)
+	local retVal = Polycore.Polygon_addVertex(self.__ptr, x, y, z)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Vertex("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Polygon:removeVertex(index)
-	return Polycore.Polygon_removeVertex(self.__ptr, index)
+	local retVal = Polycore.Polygon_removeVertex(self.__ptr, index)
 end
 
 function Polygon:addTexCoord(u, v)
-	return Polycore.Polygon_addTexCoord(self.__ptr, u, v)
+	local retVal = Polycore.Polygon_addTexCoord(self.__ptr, u, v)
 end
 
 function Polygon:addTexCoord2(u, v)
-	return Polycore.Polygon_addTexCoord2(self.__ptr, u, v)
+	local retVal = Polycore.Polygon_addTexCoord2(self.__ptr, u, v)
 end
 
 function Polygon:getTexCoord(index)
-	return Polycore.Polygon_getTexCoord(self.__ptr, index)
+	local retVal = Polycore.Polygon_getTexCoord(self.__ptr, index)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Vector2("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Polygon:getTexCoord2(index)
-	return Polycore.Polygon_getTexCoord2(self.__ptr, index)
+	local retVal = Polycore.Polygon_getTexCoord2(self.__ptr, index)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Vector2("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Polygon:calculateNormal()
-	return Polycore.Polygon_calculateNormal(self.__ptr)
+	local retVal =  Polycore.Polygon_calculateNormal(self.__ptr)
 end
 
 function Polygon:getFaceNormal()
-	return Polycore.Polygon_getFaceNormal(self.__ptr)
+	local retVal =  Polycore.Polygon_getFaceNormal(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Vector3("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Polygon:getBounds2D()
-	return Polycore.Polygon_getBounds2D(self.__ptr)
+	local retVal =  Polycore.Polygon_getBounds2D(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Rectangle("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Polygon:setNormal(normal)
-	return Polycore.Polygon_setNormal(self.__ptr, normal.__ptr)
+	local retVal = Polycore.Polygon_setNormal(self.__ptr, normal.__ptr)
 end
 
 function Polygon:flipUVY()
-	return Polycore.Polygon_flipUVY(self.__ptr)
+	local retVal =  Polycore.Polygon_flipUVY(self.__ptr)
 end
 
 function Polygon:setUseFaceUV(val)
-	return Polycore.Polygon_setUseFaceUV(self.__ptr, val)
+	local retVal = Polycore.Polygon_setUseFaceUV(self.__ptr, val)
 end
 
 function Polygon:usesFaceUV()
-	return Polycore.Polygon_usesFaceUV(self.__ptr)
+	local retVal =  Polycore.Polygon_usesFaceUV(self.__ptr)
+	return retVal
 end
 

+ 115 - 22
Bindings/Contents/LUA/API/Polycode/Quaternion.lua

@@ -1,84 +1,177 @@
 class "Quaternion"
 
-function Quaternion:Quaternion(w, x, y, z)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Quaternion(w, x, y, z)
+
+
+function Quaternion:__index__(name)
+	if name == "x" then
+		return Polycore.Quaternion_get_x(self.__ptr)
+	elseif name == "y" then
+		return Polycore.Quaternion_get_y(self.__ptr)
+	elseif name == "z" then
+		return Polycore.Quaternion_get_z(self.__ptr)
+	elseif name == "w" then
+		return Polycore.Quaternion_get_w(self.__ptr)
+	end
+end
+
+
+function Quaternion:__set_callback(name,value)
+	if name == "x" then
+		Polycore.Quaternion_set_x(self.__ptr, value)
+		return true
+	elseif name == "y" then
+		Polycore.Quaternion_set_y(self.__ptr, value)
+		return true
+	elseif name == "z" then
+		Polycore.Quaternion_set_z(self.__ptr, value)
+		return true
+	elseif name == "w" then
+		Polycore.Quaternion_set_w(self.__ptr, value)
+		return true
+	end
+	return false
+end
+
+
+function Quaternion:Quaternion(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Quaternion(unpack(arg))
 	end
 end
 
 function Quaternion:setFromMatrix(kRot)
-	return Polycore.Quaternion_setFromMatrix(self.__ptr, kRot.__ptr)
+	local retVal = Polycore.Quaternion_setFromMatrix(self.__ptr, kRot.__ptr)
 end
 
 function Quaternion:Slerp(fT, rkP, rkQ, shortestPath)
-	return Polycore.Quaternion_Slerp(self.__ptr, fT, rkP.__ptr, rkQ.__ptr, shortestPath)
+	local retVal = Polycore.Quaternion_Slerp(fT, rkP.__ptr, rkQ.__ptr, shortestPath)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Quaternion("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Quaternion:Dot(rkQ)
-	return Polycore.Quaternion_Dot(self.__ptr, rkQ.__ptr)
+	local retVal = Polycore.Quaternion_Dot(self.__ptr, rkQ.__ptr)
+	return retVal
 end
 
 function Quaternion:Log()
-	return Polycore.Quaternion_Log(self.__ptr)
+	local retVal =  Polycore.Quaternion_Log(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Quaternion("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Quaternion:Exp()
-	return Polycore.Quaternion_Exp(self.__ptr)
+	local retVal =  Polycore.Quaternion_Exp(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Quaternion("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Quaternion:Norm()
-	return Polycore.Quaternion_Norm(self.__ptr)
+	local retVal =  Polycore.Quaternion_Norm(self.__ptr)
+	return retVal
 end
 
 function Quaternion:normalise()
-	return Polycore.Quaternion_normalise(self.__ptr)
+	local retVal =  Polycore.Quaternion_normalise(self.__ptr)
+	return retVal
 end
 
 function Quaternion:lookAt(D, upVector)
-	return Polycore.Quaternion_lookAt(self.__ptr, D.__ptr, upVector.__ptr)
+	local retVal = Polycore.Quaternion_lookAt(self.__ptr, D.__ptr, upVector.__ptr)
 end
 
 function Quaternion:createFromMatrix(matrix)
-	return Polycore.Quaternion_createFromMatrix(self.__ptr, matrix.__ptr)
+	local retVal = Polycore.Quaternion_createFromMatrix(self.__ptr, matrix.__ptr)
 end
 
 function Quaternion:Squad(fT, rkP, rkA, rkB, rkQ, shortestPath)
-	return Polycore.Quaternion_Squad(self.__ptr, fT, rkP.__ptr, rkA.__ptr, rkB.__ptr, rkQ.__ptr, shortestPath)
+	local retVal = Polycore.Quaternion_Squad(fT, rkP.__ptr, rkA.__ptr, rkB.__ptr, rkQ.__ptr, shortestPath)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Quaternion("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Quaternion:Inverse()
-	return Polycore.Quaternion_Inverse(self.__ptr)
+	local retVal =  Polycore.Quaternion_Inverse(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Quaternion("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Quaternion:set(w, x, y, z)
-	return Polycore.Quaternion_set(self.__ptr, w, x, y, z)
+	local retVal = Polycore.Quaternion_set(self.__ptr, w, x, y, z)
 end
 
 function Quaternion:inverse()
-	return Polycore.Quaternion_inverse(self.__ptr)
+	local retVal =  Polycore.Quaternion_inverse(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Quaternion("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Quaternion:InvSqrt(x)
-	return Polycore.Quaternion_InvSqrt(self.__ptr, x)
+	local retVal = Polycore.Quaternion_InvSqrt(self.__ptr, x)
+	return retVal
 end
 
 function Quaternion:fromAxes(az, ay, ax)
-	return Polycore.Quaternion_fromAxes(self.__ptr, az, ay, ax)
+	local retVal = Polycore.Quaternion_fromAxes(self.__ptr, az, ay, ax)
 end
 
 function Quaternion:FromAngleAxis(rfAngle, rkAxis)
-	return Polycore.Quaternion_FromAngleAxis(self.__ptr, rfAngle.__ptr, rkAxis.__ptr)
+	local retVal = Polycore.Quaternion_FromAngleAxis(self.__ptr, rfAngle.__ptr, rkAxis.__ptr)
 end
 
 function Quaternion:ToAngleAxis(rfAngle, rkAxis)
-	return Polycore.Quaternion_ToAngleAxis(self.__ptr, rfAngle.__ptr, rkAxis.__ptr)
+	local retVal = Polycore.Quaternion_ToAngleAxis(self.__ptr, rfAngle.__ptr, rkAxis.__ptr)
 end
 
 function Quaternion:createFromAxisAngle(x, y, z, degrees)
-	return Polycore.Quaternion_createFromAxisAngle(self.__ptr, x, y, z, degrees)
+	local retVal = Polycore.Quaternion_createFromAxisAngle(self.__ptr, x, y, z, degrees)
 end
 
 function Quaternion:createMatrix()
-	return Polycore.Quaternion_createMatrix(self.__ptr)
+	local retVal =  Polycore.Quaternion_createMatrix(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Matrix4("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 

+ 26 - 6
Bindings/Contents/LUA/API/Polycode/QuaternionCurve.lua

@@ -1,20 +1,40 @@
 class "QuaternionCurve"
 
-function QuaternionCurve:QuaternionCurve(wCurve, xCurve, yCurve, zCurve)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.QuaternionCurve(wCurve, xCurve, yCurve, zCurve)
+
+
+
+
+
+
+function QuaternionCurve:QuaternionCurve(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.QuaternionCurve(unpack(arg))
 	end
 end
 
 function QuaternionCurve:interpolate(t, useShortestPath)
-	return Polycore.QuaternionCurve_interpolate(self.__ptr, t, useShortestPath)
+	local retVal = Polycore.QuaternionCurve_interpolate(self.__ptr, t, useShortestPath)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Quaternion("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function QuaternionCurve:generatePointsFromCurves(wCurve, xCurve, yCurve, zCurve)
-	return Polycore.QuaternionCurve_generatePointsFromCurves(self.__ptr, wCurve.__ptr, xCurve.__ptr, yCurve.__ptr, zCurve.__ptr)
+	local retVal = Polycore.QuaternionCurve_generatePointsFromCurves(self.__ptr, wCurve.__ptr, xCurve.__ptr, yCurve.__ptr, zCurve.__ptr)
 end
 
 function QuaternionCurve:recalcTangents()
-	return Polycore.QuaternionCurve_recalcTangents(self.__ptr)
+	local retVal =  Polycore.QuaternionCurve_recalcTangents(self.__ptr)
 end
 

+ 17 - 4
Bindings/Contents/LUA/API/Polycode/QuaternionTween.lua

@@ -2,13 +2,26 @@ require "Polycode/Tween"
 
 class "QuaternionTween" (Tween)
 
-function QuaternionTween:QuaternionTween(target, wCurve, xCurve, yCurve, zCurve, easeType, time, _repeat)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.QuaternionTween(target, wCurve, xCurve, yCurve, zCurve, easeType, time, _repeat)
+
+
+
+
+
+
+function QuaternionTween:QuaternionTween(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.QuaternionTween(unpack(arg))
 	end
 end
 
 function QuaternionTween:updateCustomTween()
-	return Polycore.QuaternionTween_updateCustomTween(self.__ptr)
+	local retVal =  Polycore.QuaternionTween_updateCustomTween(self.__ptr)
 end
 

+ 44 - 4
Bindings/Contents/LUA/API/Polycode/Rectangle.lua

@@ -1,12 +1,52 @@
 class "Rectangle"
 
-function Rectangle:Rectangle()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Rectangle()
+
+
+function Rectangle:__index__(name)
+	if name == "x" then
+		return Polycore.Rectangle_get_x(self.__ptr)
+	elseif name == "y" then
+		return Polycore.Rectangle_get_y(self.__ptr)
+	elseif name == "w" then
+		return Polycore.Rectangle_get_w(self.__ptr)
+	elseif name == "h" then
+		return Polycore.Rectangle_get_h(self.__ptr)
+	end
+end
+
+
+function Rectangle:__set_callback(name,value)
+	if name == "x" then
+		Polycore.Rectangle_set_x(self.__ptr, value)
+		return true
+	elseif name == "y" then
+		Polycore.Rectangle_set_y(self.__ptr, value)
+		return true
+	elseif name == "w" then
+		Polycore.Rectangle_set_w(self.__ptr, value)
+		return true
+	elseif name == "h" then
+		Polycore.Rectangle_set_h(self.__ptr, value)
+		return true
+	end
+	return false
+end
+
+
+function Rectangle:Rectangle(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Rectangle(unpack(arg))
 	end
 end
 
 function Rectangle:setRect(x, y, w, h)
-	return Polycore.Rectangle_setRect(self.__ptr, x, y, w, h)
+	local retVal = Polycore.Rectangle_setRect(self.__ptr, x, y, w, h)
 end
 

+ 419 - 0
Bindings/Contents/LUA/API/Polycode/Renderer.lua

@@ -0,0 +1,419 @@
+class "Renderer"
+
+
+
+RENDER_MODE_NORMAL = 0
+RENDER_MODE_WIREFRAME = 1
+BLEND_MODE_NORMAL = 0
+BLEND_MODE_LIGHTEN = 1
+BLEND_MODE_COLOR = 2
+FOG_LINEAR = 0
+FOG_EXP = 1
+FOG_EXP2 = 2
+DEPTH_FUNCTION_GREATER = 0
+DEPTH_FUNCTION_LEQUAL = 1
+TEX_FILTERING_NEAREST = 0
+TEX_FILTERING_LINEAR = 1
+function Renderer:__index__(name)
+	if name == "exposureLevel" then
+		return Polycore.Renderer_get_exposureLevel(self.__ptr)
+	end
+end
+
+
+function Renderer:__set_callback(name,value)
+	if name == "exposureLevel" then
+		Polycore.Renderer_set_exposureLevel(self.__ptr, value)
+		return true
+	end
+	return false
+end
+
+
+function Renderer:Resize(xRes, yRes)
+	local retVal = Polycore.Renderer_Resize(self.__ptr, xRes, yRes)
+end
+
+function Renderer:BeginRender()
+	local retVal =  Polycore.Renderer_BeginRender(self.__ptr)
+end
+
+function Renderer:EndRender()
+	local retVal =  Polycore.Renderer_EndRender(self.__ptr)
+end
+
+function Renderer:createCubemap(t0, t1, t2, t3, t4, t5)
+	local retVal = Polycore.Renderer_createCubemap(self.__ptr, t0.__ptr, t1.__ptr, t2.__ptr, t3.__ptr, t4.__ptr, t5.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Cubemap("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+
+function Renderer:createTexture(width, height, textureData, clamp, type)
+	local retVal = Polycore.Renderer_createTexture(self.__ptr, width, height, textureData.__ptr, clamp, type)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Texture("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+
+function Renderer:createRenderTextures(colorBuffer, depthBuffer, width, height)
+	local retVal = Polycore.Renderer_createRenderTextures(self.__ptr, colorBuffer.__ptr, depthBuffer.__ptr, width, height)
+end
+
+function Renderer:createFramebufferTexture(width, height)
+	local retVal = Polycore.Renderer_createFramebufferTexture(self.__ptr, width, height)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Texture("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+
+function Renderer:bindFrameBufferTexture(texture)
+	local retVal = Polycore.Renderer_bindFrameBufferTexture(self.__ptr, texture.__ptr)
+end
+
+function Renderer:unbindFramebuffers()
+	local retVal =  Polycore.Renderer_unbindFramebuffers(self.__ptr)
+end
+
+function Renderer:renderToTexture(targetTexture)
+	local retVal = Polycore.Renderer_renderToTexture(self.__ptr, targetTexture.__ptr)
+end
+
+function Renderer:renderZBufferToTexture(targetTexture)
+	local retVal = Polycore.Renderer_renderZBufferToTexture(self.__ptr, targetTexture.__ptr)
+end
+
+function Renderer:setViewportSize(w, h, fov)
+	local retVal = Polycore.Renderer_setViewportSize(self.__ptr, w, h, fov)
+end
+
+function Renderer:loadIdentity()
+	local retVal =  Polycore.Renderer_loadIdentity(self.__ptr)
+end
+
+function Renderer:setOrthoMode(xSize, ySize)
+	local retVal = Polycore.Renderer_setOrthoMode(self.__ptr, xSize, ySize)
+end
+
+function Renderer:_setOrthoMode()
+	local retVal =  Polycore.Renderer__setOrthoMode(self.__ptr)
+end
+
+function Renderer:setPerspectiveMode()
+	local retVal =  Polycore.Renderer_setPerspectiveMode(self.__ptr)
+end
+
+function Renderer:setTexture(texture)
+	local retVal = Polycore.Renderer_setTexture(self.__ptr, texture.__ptr)
+end
+
+function Renderer:enableBackfaceCulling(val)
+	local retVal = Polycore.Renderer_enableBackfaceCulling(self.__ptr, val)
+end
+
+function Renderer:setClearColor(r, g, b)
+	local retVal = Polycore.Renderer_setClearColor(self.__ptr, r, g, b)
+end
+
+function Renderer:setAmbientColor(r, g, b)
+	local retVal = Polycore.Renderer_setAmbientColor(self.__ptr, r, g, b)
+end
+
+function Renderer:clearScreen()
+	local retVal =  Polycore.Renderer_clearScreen(self.__ptr)
+end
+
+function Renderer:translate2D(x, y)
+	local retVal = Polycore.Renderer_translate2D(self.__ptr, x, y)
+end
+
+function Renderer:rotate2D(angle)
+	local retVal = Polycore.Renderer_rotate2D(self.__ptr, angle)
+end
+
+function Renderer:scale2D(scale)
+	local retVal = Polycore.Renderer_scale2D(self.__ptr, scale.__ptr)
+end
+
+function Renderer:setFOV(fov)
+	local retVal = Polycore.Renderer_setFOV(self.__ptr, fov)
+end
+
+function Renderer:setVertexColor(r, g, b, a)
+	local retVal = Polycore.Renderer_setVertexColor(self.__ptr, r, g, b, a)
+end
+
+function Renderer:pushDataArrayForMesh(mesh, arrayType)
+	local retVal = Polycore.Renderer_pushDataArrayForMesh(self.__ptr, mesh.__ptr, arrayType)
+end
+
+function Renderer:pushRenderDataArray(array)
+	local retVal = Polycore.Renderer_pushRenderDataArray(self.__ptr, array.__ptr)
+end
+
+function Renderer:createRenderDataArrayForMesh(mesh, arrayType)
+	local retVal = Polycore.Renderer_createRenderDataArrayForMesh(self.__ptr, mesh.__ptr, arrayType)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = RenderDataArray("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+
+function Renderer:createRenderDataArray(arrayType)
+	local retVal = Polycore.Renderer_createRenderDataArray(self.__ptr, arrayType)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = RenderDataArray("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+
+function Renderer:setRenderArrayData(array, arrayData)
+	local retVal = Polycore.Renderer_setRenderArrayData(self.__ptr, array.__ptr, arrayData.__ptr)
+end
+
+function Renderer:drawArrays(drawType)
+	local retVal = Polycore.Renderer_drawArrays(self.__ptr, drawType)
+end
+
+function Renderer:translate3D(position)
+	local retVal = Polycore.Renderer_translate3D(self.__ptr, position.__ptr)
+end
+
+function Renderer:scale3D(scale)
+	local retVal = Polycore.Renderer_scale3D(self.__ptr, scale.__ptr)
+end
+
+function Renderer:pushMatrix()
+	local retVal =  Polycore.Renderer_pushMatrix(self.__ptr)
+end
+
+function Renderer:popMatrix()
+	local retVal =  Polycore.Renderer_popMatrix(self.__ptr)
+end
+
+function Renderer:setLineSmooth(val)
+	local retVal = Polycore.Renderer_setLineSmooth(self.__ptr, val)
+end
+
+function Renderer:setLineSize(lineSize)
+	local retVal = Polycore.Renderer_setLineSize(self.__ptr, lineSize)
+end
+
+function Renderer:enableLighting(enable)
+	local retVal = Polycore.Renderer_enableLighting(self.__ptr, enable)
+end
+
+function Renderer:enableFog(enable)
+	local retVal = Polycore.Renderer_enableFog(self.__ptr, enable)
+end
+
+function Renderer:setFogProperties(fogMode, color, density, startDepth, _endDepth)
+	local retVal = Polycore.Renderer_setFogProperties(self.__ptr, fogMode, color.__ptr, density, startDepth, _endDepth)
+end
+
+function Renderer:multModelviewMatrix(m)
+	local retVal = Polycore.Renderer_multModelviewMatrix(self.__ptr, m.__ptr)
+end
+
+function Renderer:setModelviewMatrix(m)
+	local retVal = Polycore.Renderer_setModelviewMatrix(self.__ptr, m.__ptr)
+end
+
+function Renderer:setBlendingMode(bl_endingMode)
+	local retVal = Polycore.Renderer_setBlendingMode(self.__ptr, bl_endingMode)
+end
+
+function Renderer:applyMaterial(material, localOptions, shaderIndex)
+	local retVal = Polycore.Renderer_applyMaterial(self.__ptr, material.__ptr, localOptions.__ptr, shaderIndex)
+end
+
+function Renderer:clearShader()
+	local retVal =  Polycore.Renderer_clearShader(self.__ptr)
+end
+
+function Renderer:setDepthFunction(depthFunction)
+	local retVal = Polycore.Renderer_setDepthFunction(self.__ptr, depthFunction)
+end
+
+function Renderer:createVertexBufferForMesh(mesh)
+	local retVal = Polycore.Renderer_createVertexBufferForMesh(self.__ptr, mesh.__ptr)
+end
+
+function Renderer:drawVertexBuffer(buffer)
+	local retVal = Polycore.Renderer_drawVertexBuffer(self.__ptr, buffer.__ptr)
+end
+
+function Renderer:setRenderMode(newR_enderMode)
+	local retVal = Polycore.Renderer_setRenderMode(self.__ptr, newR_enderMode)
+end
+
+function Renderer:getRenderMode()
+	local retVal =  Polycore.Renderer_getRenderMode(self.__ptr)
+	return retVal
+end
+
+function Renderer:enableDepthTest(val)
+	local retVal = Polycore.Renderer_enableDepthTest(self.__ptr, val)
+end
+
+function Renderer:enableDepthWrite(val)
+	local retVal = Polycore.Renderer_enableDepthWrite(self.__ptr, val)
+end
+
+function Renderer:billboardMatrix()
+	local retVal =  Polycore.Renderer_billboardMatrix(self.__ptr)
+end
+
+function Renderer:billboardMatrixWithScale(scale)
+	local retVal = Polycore.Renderer_billboardMatrixWithScale(self.__ptr, scale.__ptr)
+end
+
+function Renderer:setTextureFilteringMode(mode)
+	local retVal = Polycore.Renderer_setTextureFilteringMode(self.__ptr, mode)
+end
+
+function Renderer:enableAlphaTest(val)
+	local retVal = Polycore.Renderer_enableAlphaTest(self.__ptr, val)
+end
+
+function Renderer:clearBuffer(colorBuffer, depthBuffer)
+	local retVal = Polycore.Renderer_clearBuffer(self.__ptr, colorBuffer, depthBuffer)
+end
+
+function Renderer:drawToColorBuffer(val)
+	local retVal = Polycore.Renderer_drawToColorBuffer(self.__ptr, val)
+end
+
+function Renderer:getCameraMatrix()
+	local retVal =  Polycore.Renderer_getCameraMatrix(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Matrix4("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+
+function Renderer:setCameraMatrix(matrix)
+	local retVal = Polycore.Renderer_setCameraMatrix(self.__ptr, matrix.__ptr)
+end
+
+function Renderer:setCameraPosition(pos)
+	local retVal = Polycore.Renderer_setCameraPosition(self.__ptr, pos.__ptr)
+end
+
+function Renderer:drawScreenQuad(qx, qy)
+	local retVal = Polycore.Renderer_drawScreenQuad(self.__ptr, qx, qy)
+end
+
+function Renderer:getXRes()
+	local retVal =  Polycore.Renderer_getXRes(self.__ptr)
+	return retVal
+end
+
+function Renderer:getYRes()
+	local retVal =  Polycore.Renderer_getYRes(self.__ptr)
+	return retVal
+end
+
+function Renderer:clearLights()
+	local retVal =  Polycore.Renderer_clearLights(self.__ptr)
+end
+
+function Renderer:addLight(position, direction, type, color, distance, intensity, textureMatrix)
+	local retVal = Polycore.Renderer_addLight(self.__ptr, position.__ptr, direction.__ptr, type, color.__ptr, distance, intensity, textureMatrix.__ptr)
+end
+
+function Renderer:setExposureLevel(level)
+	local retVal = Polycore.Renderer_setExposureLevel(self.__ptr, level)
+end
+
+function Renderer:rayTriangleIntersect(ray_origin, ray_direction, vert0, vert1, vert2, hitPoint)
+	local retVal = Polycore.Renderer_rayTriangleIntersect(self.__ptr, ray_origin.__ptr, ray_direction.__ptr, vert0.__ptr, vert1.__ptr, vert2.__ptr, hitPoint.__ptr)
+	return retVal
+end
+
+function Renderer:enableShaders(flag)
+	local retVal = Polycore.Renderer_enableShaders(self.__ptr, flag)
+end
+
+function Renderer:addShaderModule(module)
+	local retVal = Polycore.Renderer_addShaderModule(self.__ptr, module.__ptr)
+end
+
+function Renderer:test2DCoordinate(x, y, poly, matrix, billboardMode)
+	local retVal = Polycore.Renderer_test2DCoordinate(self.__ptr, x, y, poly.__ptr, matrix.__ptr, billboardMode)
+	return retVal
+end
+
+function Renderer:getProjectionMatrix()
+	local retVal =  Polycore.Renderer_getProjectionMatrix(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Matrix4("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+
+function Renderer:getModelviewMatrix()
+	local retVal =  Polycore.Renderer_getModelviewMatrix(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Matrix4("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+
+function Renderer:addShadowMap(texture)
+	local retVal = Polycore.Renderer_addShadowMap(self.__ptr, texture.__ptr)
+end
+
+function Renderer:Unproject(x, y)
+	local retVal = Polycore.Renderer_Unproject(self.__ptr, x, y)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Vector3("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+
+function Renderer:getNumAreaLights()
+	local retVal =  Polycore.Renderer_getNumAreaLights(self.__ptr)
+	return retVal
+end
+
+function Renderer:getNumSpotLights()
+	local retVal =  Polycore.Renderer_getNumSpotLights(self.__ptr)
+	return retVal
+end
+
+function Renderer:getNumLights()
+	local retVal =  Polycore.Renderer_getNumLights(self.__ptr)
+	return retVal
+end
+

+ 30 - 8
Bindings/Contents/LUA/API/Polycode/Resource.lua

@@ -1,28 +1,50 @@
 class "Resource"
 
-function Resource:Resource(type)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Resource(type)
+
+
+RESOURCE_TEXTURE = 0
+RESOURCE_MATERIAL = 1
+RESOURCE_SHADER = 2
+RESOURCE_PROGRAM = 3
+RESOURCE_MESH = 5
+RESOURCE_CUBEMAP = 6
+
+
+
+
+function Resource:Resource(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Resource(unpack(arg))
 	end
 end
 
 function Resource:getResourceName()
-	return Polycore.Resource_getResourceName(self.__ptr)
+	local retVal =  Polycore.Resource_getResourceName(self.__ptr)
+	return retVal
 end
 
 function Resource:getResourceType()
-	return Polycore.Resource_getResourceType(self.__ptr)
+	local retVal =  Polycore.Resource_getResourceType(self.__ptr)
+	return retVal
 end
 
 function Resource:setResourceName(newName)
-	return Polycore.Resource_setResourceName(self.__ptr, newName)
+	local retVal = Polycore.Resource_setResourceName(self.__ptr, newName)
 end
 
 function Resource:setResourcePath(path)
-	return Polycore.Resource_setResourcePath(self.__ptr, path)
+	local retVal = Polycore.Resource_setResourcePath(self.__ptr, path)
 end
 
 function Resource:getResourcePath()
-	return Polycore.Resource_getResourcePath(self.__ptr)
+	local retVal =  Polycore.Resource_getResourcePath(self.__ptr)
+	return retVal
 end
 

+ 35 - 14
Bindings/Contents/LUA/API/Polycode/ResourceManager.lua

@@ -1,52 +1,73 @@
 class "ResourceManager"
 
-function ResourceManager:ResourceManager()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.ResourceManager()
+
+
+
+
+
+
+function ResourceManager:ResourceManager(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.ResourceManager(unpack(arg))
 	end
 end
 
 function ResourceManager:addResource(resource)
-	return Polycore.ResourceManager_addResource(self.__ptr, resource.__ptr)
+	local retVal = Polycore.ResourceManager_addResource(self.__ptr, resource.__ptr)
 end
 
 function ResourceManager:addDirResource(dirPath, recursive)
-	return Polycore.ResourceManager_addDirResource(self.__ptr, dirPath, recursive)
+	local retVal = Polycore.ResourceManager_addDirResource(self.__ptr, dirPath, recursive)
 end
 
 function ResourceManager:addArchive(zipPath)
-	return Polycore.ResourceManager_addArchive(self.__ptr, zipPath)
+	local retVal = Polycore.ResourceManager_addArchive(self.__ptr, zipPath)
 end
 
 function ResourceManager:readFile(fileName)
-	return Polycore.ResourceManager_readFile(self.__ptr, fileName)
+	local retVal = Polycore.ResourceManager_readFile(self.__ptr, fileName)
+	return retVal
 end
 
 function ResourceManager:parseTextures(dirPath, recursive)
-	return Polycore.ResourceManager_parseTextures(self.__ptr, dirPath, recursive)
+	local retVal = Polycore.ResourceManager_parseTextures(self.__ptr, dirPath, recursive)
 end
 
 function ResourceManager:parseMaterials(dirPath, recursive)
-	return Polycore.ResourceManager_parseMaterials(self.__ptr, dirPath, recursive)
+	local retVal = Polycore.ResourceManager_parseMaterials(self.__ptr, dirPath, recursive)
 end
 
 function ResourceManager:parseShaders(dirPath, recursive)
-	return Polycore.ResourceManager_parseShaders(self.__ptr, dirPath, recursive)
+	local retVal = Polycore.ResourceManager_parseShaders(self.__ptr, dirPath, recursive)
 end
 
 function ResourceManager:parsePrograms(dirPath, recursive)
-	return Polycore.ResourceManager_parsePrograms(self.__ptr, dirPath, recursive)
+	local retVal = Polycore.ResourceManager_parsePrograms(self.__ptr, dirPath, recursive)
 end
 
 function ResourceManager:parseCubemaps(dirPath, recursive)
-	return Polycore.ResourceManager_parseCubemaps(self.__ptr, dirPath, recursive)
+	local retVal = Polycore.ResourceManager_parseCubemaps(self.__ptr, dirPath, recursive)
 end
 
 function ResourceManager:getResource(resourceType, resourceName)
-	return Polycore.ResourceManager_getResource(self.__ptr, resourceType, resourceName)
+	local retVal = Polycore.ResourceManager_getResource(self.__ptr, resourceType, resourceName)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Resource("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function ResourceManager:addShaderModule(module)
-	return Polycore.ResourceManager_addShaderModule(self.__ptr, module.__ptr)
+	local retVal = Polycore.ResourceManager_addShaderModule(self.__ptr, module.__ptr)
 end
 

+ 203 - 0
Bindings/Contents/LUA/API/Polycode/Scene.lua

@@ -0,0 +1,203 @@
+require "Polycode/EventDispatcher"
+
+class "Scene" (EventDispatcher)
+
+
+
+ENTITY_MESH = 0
+ENTITY_LIGHT = 1
+ENTITY_CAMERA = 2
+ENTITY_ENTITY = 3
+ENTITY_COLLMESH = 4
+
+
+
+
+function Scene:Scene(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Scene(unpack(arg))
+	end
+end
+
+function Scene:addEntity(entity)
+	local retVal = Polycore.Scene_addEntity(self.__ptr, entity.__ptr)
+end
+
+function Scene:removeEntity(entity)
+	local retVal = Polycore.Scene_removeEntity(self.__ptr, entity.__ptr)
+end
+
+function Scene:getDefaultCamera()
+	local retVal =  Polycore.Scene_getDefaultCamera(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Camera("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+
+function Scene:enableLighting(enable)
+	local retVal = Polycore.Scene_enableLighting(self.__ptr, enable)
+end
+
+function Scene:enableFog(enable)
+	local retVal = Polycore.Scene_enableFog(self.__ptr, enable)
+end
+
+function Scene:setFogProperties(fogMode, color, density, startDepth, _endDepth)
+	local retVal = Polycore.Scene_setFogProperties(self.__ptr, fogMode, color.__ptr, density, startDepth, _endDepth)
+end
+
+function Scene:Update()
+	local retVal =  Polycore.Scene_Update(self.__ptr)
+end
+
+function Scene:setVirtual(val)
+	local retVal = Polycore.Scene_setVirtual(self.__ptr, val)
+end
+
+function Scene:isVirtual()
+	local retVal =  Polycore.Scene_isVirtual(self.__ptr)
+	return retVal
+end
+
+function Scene:isEnabled()
+	local retVal =  Polycore.Scene_isEnabled(self.__ptr)
+	return retVal
+end
+
+function Scene:setEnabled(enabled)
+	local retVal = Polycore.Scene_setEnabled(self.__ptr, enabled)
+end
+
+function Scene:getNumEntities()
+	local retVal =  Polycore.Scene_getNumEntities(self.__ptr)
+	return retVal
+end
+
+function Scene:getEntity(index)
+	local retVal = Polycore.Scene_getEntity(self.__ptr, index)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = SceneEntity("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+
+function Scene:getEntityAtCursor(x, y)
+	local retVal = Polycore.Scene_getEntityAtCursor(self.__ptr, x, y)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = SceneEntity("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+
+function Scene:Render()
+	local retVal =  Polycore.Scene_Render(self.__ptr)
+end
+
+function Scene:RenderDepthOnly(targetCamera)
+	local retVal = Polycore.Scene_RenderDepthOnly(self.__ptr, targetCamera.__ptr)
+end
+
+function Scene:readString(inFile)
+	local retVal = Polycore.Scene_readString(inFile.__ptr)
+	return retVal
+end
+
+function Scene:loadScene(fileName)
+	local retVal = Polycore.Scene_loadScene(self.__ptr, fileName)
+end
+
+function Scene:generateLightmaps(lightMapRes, lightMapQuality, numRadPasses)
+	local retVal = Polycore.Scene_generateLightmaps(self.__ptr, lightMapRes, lightMapQuality, numRadPasses)
+end
+
+function Scene:addLight(light)
+	local retVal = Polycore.Scene_addLight(self.__ptr, light.__ptr)
+end
+
+function Scene:getNearestLight(pos)
+	local retVal = Polycore.Scene_getNearestLight(self.__ptr, pos.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = SceneLight("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+
+function Scene:writeEntityMatrix(entity, outFile)
+	local retVal = Polycore.Scene_writeEntityMatrix(self.__ptr, entity.__ptr, outFile.__ptr)
+end
+
+function Scene:writeString(str, outFile)
+	local retVal = Polycore.Scene_writeString(self.__ptr, str, outFile.__ptr)
+end
+
+function Scene:saveScene(fileName)
+	local retVal = Polycore.Scene_saveScene(self.__ptr, fileName)
+end
+
+function Scene:getNumStaticGeometry()
+	local retVal =  Polycore.Scene_getNumStaticGeometry(self.__ptr)
+	return retVal
+end
+
+function Scene:getStaticGeometry(index)
+	local retVal = Polycore.Scene_getStaticGeometry(self.__ptr, index)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = SceneMesh("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+
+function Scene:loadCollisionChild(entity, autoCollide, type)
+	local retVal = Polycore.Scene_loadCollisionChild(self.__ptr, entity.__ptr, autoCollide, type)
+end
+
+function Scene:getNumLights()
+	local retVal =  Polycore.Scene_getNumLights(self.__ptr)
+	return retVal
+end
+
+function Scene:getLight(index)
+	local retVal = Polycore.Scene_getLight(self.__ptr, index)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = SceneLight("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+
+function Scene:getCustomEntityByType(type)
+	local retVal = Polycore.Scene_getCustomEntityByType(self.__ptr, type)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = SceneEntity("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+

+ 18 - 4
Bindings/Contents/LUA/API/Polycode/SceneEntity.lua

@@ -2,13 +2,27 @@ require "Polycode/Entity"
 
 class "SceneEntity" (Entity)
 
-function SceneEntity:SceneEntity()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.SceneEntity()
+
+
+
+
+
+
+function SceneEntity:SceneEntity(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.SceneEntity(unpack(arg))
 	end
 end
 
 function SceneEntity:testMouseCollision(x, y)
-	return Polycore.SceneEntity_testMouseCollision(self.__ptr, x, y)
+	local retVal = Polycore.SceneEntity_testMouseCollision(self.__ptr, x, y)
+	return retVal
 end
 

+ 28 - 7
Bindings/Contents/LUA/API/Polycode/SceneLabel.lua

@@ -2,25 +2,46 @@ require "Polycode/SceneEntity"
 
 class "SceneLabel" (SceneEntity)
 
-function SceneLabel:SceneLabel(fontName, text, size, scale, amode)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.SceneLabel(fontName, text, size, scale, amode)
+
+
+
+
+
+
+function SceneLabel:SceneLabel(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.SceneLabel(unpack(arg))
 	end
 end
 
 function SceneLabel:testMouseCollision(x, y)
-	return Polycore.SceneLabel_testMouseCollision(self.__ptr, x, y)
+	local retVal = Polycore.SceneLabel_testMouseCollision(self.__ptr, x, y)
+	return retVal
 end
 
 function SceneLabel:setText(newText)
-	return Polycore.SceneLabel_setText(self.__ptr, newText)
+	local retVal = Polycore.SceneLabel_setText(self.__ptr, newText)
 end
 
 function SceneLabel:getLabel()
-	return Polycore.SceneLabel_getLabel(self.__ptr)
+	local retVal =  Polycore.SceneLabel_getLabel(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Label("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function SceneLabel:Render()
-	return Polycore.SceneLabel_Render(self.__ptr)
+	local retVal =  Polycore.SceneLabel_Render(self.__ptr)
 end
 

+ 49 - 15
Bindings/Contents/LUA/API/Polycode/SceneLight.lua

@@ -2,57 +2,91 @@ require "Polycode/SceneEntity"
 
 class "SceneLight" (SceneEntity)
 
-function SceneLight:SceneLight(type, intensity, distance, parentScene)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.SceneLight(type, intensity, distance, parentScene)
+
+
+AREA_LIGHT = 0
+SPOT_LIGHT = 1
+
+
+
+
+function SceneLight:SceneLight(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.SceneLight(unpack(arg))
 	end
 end
 
 function SceneLight:getIntensity()
-	return Polycore.SceneLight_getIntensity(self.__ptr)
+	local retVal =  Polycore.SceneLight_getIntensity(self.__ptr)
+	return retVal
 end
 
 function SceneLight:getDistance()
-	return Polycore.SceneLight_getDistance(self.__ptr)
+	local retVal =  Polycore.SceneLight_getDistance(self.__ptr)
+	return retVal
 end
 
 function SceneLight:getType()
-	return Polycore.SceneLight_getType(self.__ptr)
+	local retVal =  Polycore.SceneLight_getType(self.__ptr)
+	return retVal
 end
 
 function SceneLight:renderDepthMap(scene)
-	return Polycore.SceneLight_renderDepthMap(self.__ptr, scene.__ptr)
+	local retVal = Polycore.SceneLight_renderDepthMap(self.__ptr, scene.__ptr)
 end
 
 function SceneLight:Render()
-	return Polycore.SceneLight_Render(self.__ptr)
+	local retVal =  Polycore.SceneLight_Render(self.__ptr)
 end
 
 function SceneLight:getLightViewMatrix()
-	return Polycore.SceneLight_getLightViewMatrix(self.__ptr)
+	local retVal =  Polycore.SceneLight_getLightViewMatrix(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Matrix4("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function SceneLight:getZBufferTexture()
-	return Polycore.SceneLight_getZBufferTexture(self.__ptr)
+	local retVal =  Polycore.SceneLight_getZBufferTexture(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Texture("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function SceneLight:setLightColor(r, g, b)
-	return Polycore.SceneLight_setLightColor(self.__ptr, r, g, b)
+	local retVal = Polycore.SceneLight_setLightColor(self.__ptr, r, g, b)
 end
 
 function SceneLight:enableShadows(val, resolution)
-	return Polycore.SceneLight_enableShadows(self.__ptr, val, resolution)
+	local retVal = Polycore.SceneLight_enableShadows(self.__ptr, val, resolution)
 end
 
 function SceneLight:setShadowMapFOV(fov)
-	return Polycore.SceneLight_setShadowMapFOV(self.__ptr, fov)
+	local retVal = Polycore.SceneLight_setShadowMapFOV(self.__ptr, fov)
 end
 
 function SceneLight:areShadowsEnabled()
-	return Polycore.SceneLight_areShadowsEnabled(self.__ptr)
+	local retVal =  Polycore.SceneLight_areShadowsEnabled(self.__ptr)
+	return retVal
 end
 
 function SceneLight:getLightType()
-	return Polycore.SceneLight_getLightType(self.__ptr)
+	local retVal =  Polycore.SceneLight_getLightType(self.__ptr)
+	return retVal
 end
 

+ 17 - 4
Bindings/Contents/LUA/API/Polycode/SceneLine.lua

@@ -2,13 +2,26 @@ require "Polycode/SceneEntity"
 
 class "SceneLine" (SceneEntity)
 
-function SceneLine:SceneLine(ent1, ent2)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.SceneLine(ent1, ent2)
+
+
+
+
+
+
+function SceneLine:SceneLine(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.SceneLine(unpack(arg))
 	end
 end
 
 function SceneLine:Render()
-	return Polycore.SceneLine_Render(self.__ptr)
+	local retVal =  Polycore.SceneLine_Render(self.__ptr)
 end
 

+ 21 - 8
Bindings/Contents/LUA/API/Polycode/SceneManager.lua

@@ -1,28 +1,41 @@
 class "SceneManager"
 
-function SceneManager:SceneManager()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.SceneManager()
+
+
+
+
+
+
+function SceneManager:SceneManager(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.SceneManager(unpack(arg))
 	end
 end
 
 function SceneManager:addScene(newScene)
-	return Polycore.SceneManager_addScene(self.__ptr, newScene.__ptr)
+	local retVal = Polycore.SceneManager_addScene(self.__ptr, newScene.__ptr)
 end
 
 function SceneManager:Update()
-	return Polycore.SceneManager_Update(self.__ptr)
+	local retVal =  Polycore.SceneManager_Update(self.__ptr)
 end
 
 function SceneManager:UpdateVirtual()
-	return Polycore.SceneManager_UpdateVirtual(self.__ptr)
+	local retVal =  Polycore.SceneManager_UpdateVirtual(self.__ptr)
 end
 
 function SceneManager:removeScene(scene)
-	return Polycore.SceneManager_removeScene(self.__ptr, scene.__ptr)
+	local retVal = Polycore.SceneManager_removeScene(self.__ptr, scene.__ptr)
 end
 
 function SceneManager:registerRenderTexture(r_enderTexture)
-	return Polycore.SceneManager_registerRenderTexture(self.__ptr, r_enderTexture.__ptr)
+	local retVal = Polycore.SceneManager_registerRenderTexture(self.__ptr, r_enderTexture.__ptr)
 end
 

+ 81 - 17
Bindings/Contents/LUA/API/Polycode/SceneMesh.lua

@@ -2,65 +2,129 @@ require "Polycode/SceneEntity"
 
 class "SceneMesh" (SceneEntity)
 
-function SceneMesh:SceneMesh(fileName)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.SceneMesh(fileName)
+
+
+function SceneMesh:__index__(name)
+	if name == "showVertexNormals" then
+		return Polycore.SceneMesh_get_showVertexNormals(self.__ptr)
+	end
+end
+
+
+function SceneMesh:__set_callback(name,value)
+	if name == "showVertexNormals" then
+		Polycore.SceneMesh_set_showVertexNormals(self.__ptr, value)
+		return true
+	end
+	return false
+end
+
+
+function SceneMesh:SceneMesh(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.SceneMesh(unpack(arg))
 	end
 end
 
 function SceneMesh:Render()
-	return Polycore.SceneMesh_Render(self.__ptr)
+	local retVal =  Polycore.SceneMesh_Render(self.__ptr)
 end
 
 function SceneMesh:getLocalShaderOptions()
-	return Polycore.SceneMesh_getLocalShaderOptions(self.__ptr)
+	local retVal =  Polycore.SceneMesh_getLocalShaderOptions(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = ShaderBinding("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function SceneMesh:getMesh()
-	return Polycore.SceneMesh_getMesh(self.__ptr)
+	local retVal =  Polycore.SceneMesh_getMesh(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Mesh("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function SceneMesh:getTexture()
-	return Polycore.SceneMesh_getTexture(self.__ptr)
+	local retVal =  Polycore.SceneMesh_getTexture(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Texture("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function SceneMesh:getMaterial()
-	return Polycore.SceneMesh_getMaterial(self.__ptr)
+	local retVal =  Polycore.SceneMesh_getMaterial(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Material("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function SceneMesh:loadTexture(fileName, clamp)
-	return Polycore.SceneMesh_loadTexture(self.__ptr, fileName, clamp)
+	local retVal = Polycore.SceneMesh_loadTexture(self.__ptr, fileName, clamp)
 end
 
 function SceneMesh:loadSkeleton(fileName)
-	return Polycore.SceneMesh_loadSkeleton(self.__ptr, fileName)
+	local retVal = Polycore.SceneMesh_loadSkeleton(self.__ptr, fileName)
 end
 
 function SceneMesh:setTexture(texture)
-	return Polycore.SceneMesh_setTexture(self.__ptr, texture.__ptr)
+	local retVal = Polycore.SceneMesh_setTexture(self.__ptr, texture.__ptr)
 end
 
 function SceneMesh:setMaterial(material)
-	return Polycore.SceneMesh_setMaterial(self.__ptr, material.__ptr)
+	local retVal = Polycore.SceneMesh_setMaterial(self.__ptr, material.__ptr)
+end
+
+function SceneMesh:setMaterialByName(materialName)
+	local retVal = Polycore.SceneMesh_setMaterialByName(self.__ptr, materialName)
 end
 
 function SceneMesh:setMesh(mesh)
-	return Polycore.SceneMesh_setMesh(self.__ptr, mesh.__ptr)
+	local retVal = Polycore.SceneMesh_setMesh(self.__ptr, mesh.__ptr)
 end
 
 function SceneMesh:setSkeleton(skeleton)
-	return Polycore.SceneMesh_setSkeleton(self.__ptr, skeleton.__ptr)
+	local retVal = Polycore.SceneMesh_setSkeleton(self.__ptr, skeleton.__ptr)
 end
 
 function SceneMesh:getSkeleton()
-	return Polycore.SceneMesh_getSkeleton(self.__ptr)
+	local retVal =  Polycore.SceneMesh_getSkeleton(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Skeleton("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function SceneMesh:renderMeshLocally()
-	return Polycore.SceneMesh_renderMeshLocally(self.__ptr)
+	local retVal =  Polycore.SceneMesh_renderMeshLocally(self.__ptr)
 end
 
 function SceneMesh:cacheToVertexBuffer(cache)
-	return Polycore.SceneMesh_cacheToVertexBuffer(self.__ptr, cache)
+	local retVal = Polycore.SceneMesh_cacheToVertexBuffer(self.__ptr, cache)
 end
 

+ 26 - 6
Bindings/Contents/LUA/API/Polycode/SceneParticleEmitter.lua

@@ -2,21 +2,41 @@ require "Polycode/SceneEntity"
 
 class "SceneParticleEmitter" (SceneEntity)
 
-function SceneParticleEmitter:SceneParticleEmitter(imageFile, particleMesh, emitter, particleParentScene, particleType, emitterType, lifespan, numParticles, direction, gravity, deviation)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.SceneParticleEmitter(imageFile, particleMesh, emitter, particleParentScene, particleType, emitterType, lifespan, numParticles, direction, gravity, deviation)
+
+
+
+
+
+
+function SceneParticleEmitter:SceneParticleEmitter(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.SceneParticleEmitter(unpack(arg))
 	end
 end
 
 function SceneParticleEmitter:addParticleBody(particleBody)
-	return Polycore.SceneParticleEmitter_addParticleBody(self.__ptr, particleBody.__ptr)
+	local retVal = Polycore.SceneParticleEmitter_addParticleBody(self.__ptr, particleBody.__ptr)
 end
 
 function SceneParticleEmitter:getBaseMatrix()
-	return Polycore.SceneParticleEmitter_getBaseMatrix(self.__ptr)
+	local retVal =  Polycore.SceneParticleEmitter_getBaseMatrix(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Matrix4("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function SceneParticleEmitter:Update()
-	return Polycore.SceneParticleEmitter_Update(self.__ptr)
+	local retVal =  Polycore.SceneParticleEmitter_Update(self.__ptr)
 end
 

+ 19 - 3
Bindings/Contents/LUA/API/Polycode/ScenePrimitive.lua

@@ -2,9 +2,25 @@ require "Polycode/SceneMesh"
 
 class "ScenePrimitive" (SceneMesh)
 
-function ScenePrimitive:ScenePrimitive(type, v1, v2, v3)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.ScenePrimitive(type, v1, v2, v3)
+
+
+TYPE_BOX = 0
+TYPE_PLANE = 1
+TYPE_SPHERE = 2
+
+
+
+
+function ScenePrimitive:ScenePrimitive(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.ScenePrimitive(unpack(arg))
 	end
 end
 

+ 41 - 7
Bindings/Contents/LUA/API/Polycode/SceneRenderTexture.lua

@@ -1,24 +1,58 @@
 class "SceneRenderTexture"
 
-function SceneRenderTexture:SceneRenderTexture(targetScene, targetCamera, r_enderWidth, r_enderHeight)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.SceneRenderTexture(targetScene, targetCamera, r_enderWidth, r_enderHeight)
+
+
+
+
+
+
+function SceneRenderTexture:SceneRenderTexture(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.SceneRenderTexture(unpack(arg))
 	end
 end
 
 function SceneRenderTexture:drawScreen()
-	return Polycore.SceneRenderTexture_drawScreen(self.__ptr)
+	local retVal =  Polycore.SceneRenderTexture_drawScreen(self.__ptr)
 end
 
 function SceneRenderTexture:getTargetTexture()
-	return Polycore.SceneRenderTexture_getTargetTexture(self.__ptr)
+	local retVal =  Polycore.SceneRenderTexture_getTargetTexture(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Texture("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function SceneRenderTexture:getTargetScene()
-	return Polycore.SceneRenderTexture_getTargetScene(self.__ptr)
+	local retVal =  Polycore.SceneRenderTexture_getTargetScene(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Scene("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function SceneRenderTexture:getTargetCamera()
-	return Polycore.SceneRenderTexture_getTargetCamera(self.__ptr)
+	local retVal =  Polycore.SceneRenderTexture_getTargetCamera(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Camera("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 

+ 89 - 24
Bindings/Contents/LUA/API/Polycode/Screen.lua

@@ -2,93 +2,158 @@ require "Polycode/EventDispatcher"
 
 class "Screen" (EventDispatcher)
 
-function Screen:Screen()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Screen()
+
+
+function Screen:__index__(name)
+	if name == "enabled" then
+		return Polycore.Screen_get_enabled(self.__ptr)
+	end
+end
+
+
+function Screen:__set_callback(name,value)
+	if name == "enabled" then
+		Polycore.Screen_set_enabled(self.__ptr, value)
+		return true
+	end
+	return false
+end
+
+
+function Screen:Screen(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Screen(unpack(arg))
 	end
 end
 
 function Screen:addChild(newEntity)
-	return Polycore.Screen_addChild(self.__ptr, newEntity.__ptr)
+	local retVal = Polycore.Screen_addChild(self.__ptr, newEntity.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = ScreenEntity("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Screen:removeChild(entityToRemove)
-	return Polycore.Screen_removeChild(self.__ptr, entityToRemove.__ptr)
+	local retVal = Polycore.Screen_removeChild(self.__ptr, entityToRemove.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = ScreenEntity("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Screen:setScreenOffset(x, y)
-	return Polycore.Screen_setScreenOffset(self.__ptr, x, y)
+	local retVal = Polycore.Screen_setScreenOffset(self.__ptr, x, y)
 end
 
 function Screen:getScreenOffset()
-	return Polycore.Screen_getScreenOffset(self.__ptr)
+	local retVal =  Polycore.Screen_getScreenOffset(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Vector2("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Screen:Shutdown()
-	return Polycore.Screen_Shutdown(self.__ptr)
+	local retVal =  Polycore.Screen_Shutdown(self.__ptr)
 end
 
 function Screen:Update()
-	return Polycore.Screen_Update(self.__ptr)
+	local retVal =  Polycore.Screen_Update(self.__ptr)
 end
 
 function Screen:getEntityAt(x, y)
-	return Polycore.Screen_getEntityAt(self.__ptr, x, y)
+	local retVal = Polycore.Screen_getEntityAt(self.__ptr, x, y)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = ScreenEntity("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Screen:Render()
-	return Polycore.Screen_Render(self.__ptr)
+	local retVal =  Polycore.Screen_Render(self.__ptr)
 end
 
 function Screen:setRenderer(r_enderer)
-	return Polycore.Screen_setRenderer(self.__ptr, r_enderer.__ptr)
+	local retVal = Polycore.Screen_setRenderer(self.__ptr, r_enderer.__ptr)
 end
 
 function Screen:setNormalizedCoordinates(newVal, yCoordinateSize)
-	return Polycore.Screen_setNormalizedCoordinates(self.__ptr, newVal, yCoordinateSize)
+	local retVal = Polycore.Screen_setNormalizedCoordinates(self.__ptr, newVal, yCoordinateSize)
 end
 
 function Screen:setScreenShader(shaderName)
-	return Polycore.Screen_setScreenShader(self.__ptr, shaderName)
+	local retVal = Polycore.Screen_setScreenShader(self.__ptr, shaderName)
 end
 
 function Screen:handleEvent(event)
-	return Polycore.Screen_handleEvent(self.__ptr, event.__ptr)
+	local retVal = Polycore.Screen_handleEvent(self.__ptr, event.__ptr)
 end
 
 function Screen:getHighestZIndex()
-	return Polycore.Screen_getHighestZIndex(self.__ptr)
+	local retVal =  Polycore.Screen_getHighestZIndex(self.__ptr)
+	return retVal
 end
 
 function Screen:sortChildren()
-	return Polycore.Screen_sortChildren(self.__ptr)
+	local retVal =  Polycore.Screen_sortChildren(self.__ptr)
 end
 
 function Screen:cmpZindex(left, right)
-	return Polycore.Screen_cmpZindex(self.__ptr, left.__ptr, right.__ptr)
+	local retVal = Polycore.Screen_cmpZindex(left.__ptr, right.__ptr)
+	return retVal
 end
 
 function Screen:handleInputEvent(inputEvent)
-	return Polycore.Screen_handleInputEvent(self.__ptr, inputEvent.__ptr)
+	local retVal = Polycore.Screen_handleInputEvent(self.__ptr, inputEvent.__ptr)
 end
 
 function Screen:hasFilterShader()
-	return Polycore.Screen_hasFilterShader(self.__ptr)
+	local retVal =  Polycore.Screen_hasFilterShader(self.__ptr)
+	return retVal
 end
 
 function Screen:drawFilter()
-	return Polycore.Screen_drawFilter(self.__ptr)
+	local retVal =  Polycore.Screen_drawFilter(self.__ptr)
 end
 
 function Screen:usesNormalizedCoordinates()
-	return Polycore.Screen_usesNormalizedCoordinates(self.__ptr)
+	local retVal =  Polycore.Screen_usesNormalizedCoordinates(self.__ptr)
+	return retVal
 end
 
 function Screen:getYCoordinateSize()
-	return Polycore.Screen_getYCoordinateSize(self.__ptr)
+	local retVal =  Polycore.Screen_getYCoordinateSize(self.__ptr)
+	return retVal
 end
 
 function Screen:getRootEntity()
-	return Polycore.Screen_getRootEntity(self.__ptr)
+	local retVal =  Polycore.Screen_getRootEntity(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = ScreenEntity("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 

+ 16 - 3
Bindings/Contents/LUA/API/Polycode/ScreenCurve.lua

@@ -2,9 +2,22 @@ require "Polycode/ScreenShape"
 
 class "ScreenCurve" (ScreenShape)
 
-function ScreenCurve:ScreenCurve(curve, numVertices)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.ScreenCurve(curve, numVertices)
+
+
+
+
+
+
+function ScreenCurve:ScreenCurve(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.ScreenCurve(unpack(arg))
 	end
 end
 

+ 103 - 40
Bindings/Contents/LUA/API/Polycode/ScreenEntity.lua

@@ -2,157 +2,220 @@ require "Polycode/Entity"
 
 class "ScreenEntity" (Entity)
 
-function ScreenEntity:ScreenEntity()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.ScreenEntity()
+
+
+POSITION_TOPLEFT = 0
+POSITION_CENTER = 1
+function ScreenEntity:__index__(name)
+	if name == "hasFocus" then
+		return Polycore.ScreenEntity_get_hasFocus(self.__ptr)
+	elseif name == "blockMouseInput" then
+		return Polycore.ScreenEntity_get_blockMouseInput(self.__ptr)
+	elseif name == "zindex" then
+		return Polycore.ScreenEntity_get_zindex(self.__ptr)
+	elseif name == "snapToPixels" then
+		return Polycore.ScreenEntity_get_snapToPixels(self.__ptr)
+	end
+end
+
+
+function ScreenEntity:__set_callback(name,value)
+	if name == "hasFocus" then
+		Polycore.ScreenEntity_set_hasFocus(self.__ptr, value)
+		return true
+	elseif name == "blockMouseInput" then
+		Polycore.ScreenEntity_set_blockMouseInput(self.__ptr, value)
+		return true
+	elseif name == "zindex" then
+		Polycore.ScreenEntity_set_zindex(self.__ptr, value)
+		return true
+	elseif name == "snapToPixels" then
+		Polycore.ScreenEntity_set_snapToPixels(self.__ptr, value)
+		return true
+	end
+	return false
+end
+
+
+function ScreenEntity:ScreenEntity(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.ScreenEntity(unpack(arg))
 	end
 end
 
 function ScreenEntity:setPosition(x, y)
-	return Polycore.ScreenEntity_setPosition(self.__ptr, x, y)
+	local retVal = Polycore.ScreenEntity_setPosition(self.__ptr, x, y)
 end
 
 function ScreenEntity:setScale(x, y)
-	return Polycore.ScreenEntity_setScale(self.__ptr, x, y)
+	local retVal = Polycore.ScreenEntity_setScale(self.__ptr, x, y)
 end
 
 function ScreenEntity:setRotation(roatation)
-	return Polycore.ScreenEntity_setRotation(self.__ptr, roatation)
+	local retVal = Polycore.ScreenEntity_setRotation(self.__ptr, roatation)
 end
 
 function ScreenEntity:getRotation()
-	return Polycore.ScreenEntity_getRotation(self.__ptr)
+	local retVal =  Polycore.ScreenEntity_getRotation(self.__ptr)
+	return retVal
 end
 
 function ScreenEntity:_onMouseDown(x, y, mouseButton, timestamp)
-	return Polycore.ScreenEntity__onMouseDown(self.__ptr, x, y, mouseButton, timestamp)
+	local retVal = Polycore.ScreenEntity__onMouseDown(self.__ptr, x, y, mouseButton, timestamp)
+	return retVal
 end
 
 function ScreenEntity:_onMouseUp(x, y, mouseButton, timestamp)
-	return Polycore.ScreenEntity__onMouseUp(self.__ptr, x, y, mouseButton, timestamp)
+	local retVal = Polycore.ScreenEntity__onMouseUp(self.__ptr, x, y, mouseButton, timestamp)
+	return retVal
 end
 
 function ScreenEntity:_onMouseMove(x, y, timestamp)
-	return Polycore.ScreenEntity__onMouseMove(self.__ptr, x, y, timestamp)
+	local retVal = Polycore.ScreenEntity__onMouseMove(self.__ptr, x, y, timestamp)
 end
 
 function ScreenEntity:_onMouseWheelUp(x, y, timestamp)
-	return Polycore.ScreenEntity__onMouseWheelUp(self.__ptr, x, y, timestamp)
+	local retVal = Polycore.ScreenEntity__onMouseWheelUp(self.__ptr, x, y, timestamp)
 end
 
 function ScreenEntity:_onMouseWheelDown(x, y, timestamp)
-	return Polycore.ScreenEntity__onMouseWheelDown(self.__ptr, x, y, timestamp)
+	local retVal = Polycore.ScreenEntity__onMouseWheelDown(self.__ptr, x, y, timestamp)
 end
 
 function ScreenEntity:onMouseDown(x, y)
-	return Polycore.ScreenEntity_onMouseDown(self.__ptr, x, y)
+	local retVal = Polycore.ScreenEntity_onMouseDown(self.__ptr, x, y)
 end
 
 function ScreenEntity:onMouseUp(x, y)
-	return Polycore.ScreenEntity_onMouseUp(self.__ptr, x, y)
+	local retVal = Polycore.ScreenEntity_onMouseUp(self.__ptr, x, y)
 end
 
 function ScreenEntity:onMouseMove(x, y)
-	return Polycore.ScreenEntity_onMouseMove(self.__ptr, x, y)
+	local retVal = Polycore.ScreenEntity_onMouseMove(self.__ptr, x, y)
 end
 
 function ScreenEntity:onMouseWheelUp(x, y)
-	return Polycore.ScreenEntity_onMouseWheelUp(self.__ptr, x, y)
+	local retVal = Polycore.ScreenEntity_onMouseWheelUp(self.__ptr, x, y)
 end
 
 function ScreenEntity:onMouseWheelDown(x, y)
-	return Polycore.ScreenEntity_onMouseWheelDown(self.__ptr, x, y)
+	local retVal = Polycore.ScreenEntity_onMouseWheelDown(self.__ptr, x, y)
 end
 
 function ScreenEntity:_onKeyDown(key, charCode)
-	return Polycore.ScreenEntity__onKeyDown(self.__ptr, key.__ptr, charCode.__ptr)
+	local retVal = Polycore.ScreenEntity__onKeyDown(self.__ptr, key.__ptr, charCode.__ptr)
 end
 
 function ScreenEntity:_onKeyUp(key, charCode)
-	return Polycore.ScreenEntity__onKeyUp(self.__ptr, key.__ptr, charCode.__ptr)
+	local retVal = Polycore.ScreenEntity__onKeyUp(self.__ptr, key.__ptr, charCode.__ptr)
 end
 
 function ScreenEntity:onKeyDown(key, charCode)
-	return Polycore.ScreenEntity_onKeyDown(self.__ptr, key.__ptr, charCode.__ptr)
+	local retVal = Polycore.ScreenEntity_onKeyDown(self.__ptr, key.__ptr, charCode.__ptr)
 end
 
 function ScreenEntity:onKeyUp(key, charCode)
-	return Polycore.ScreenEntity_onKeyUp(self.__ptr, key.__ptr, charCode.__ptr)
+	local retVal = Polycore.ScreenEntity_onKeyUp(self.__ptr, key.__ptr, charCode.__ptr)
 end
 
 function ScreenEntity:hitTest(x, y)
-	return Polycore.ScreenEntity_hitTest(self.__ptr, x, y)
+	local retVal = Polycore.ScreenEntity_hitTest(self.__ptr, x, y)
+	return retVal
 end
 
 function ScreenEntity:buildPositionMatrix()
-	return Polycore.ScreenEntity_buildPositionMatrix(self.__ptr)
+	local retVal =  Polycore.ScreenEntity_buildPositionMatrix(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Matrix4("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function ScreenEntity:adjustMatrixForChildren()
-	return Polycore.ScreenEntity_adjustMatrixForChildren(self.__ptr)
+	local retVal =  Polycore.ScreenEntity_adjustMatrixForChildren(self.__ptr)
 end
 
 function ScreenEntity:getWidth()
-	return Polycore.ScreenEntity_getWidth(self.__ptr)
+	local retVal =  Polycore.ScreenEntity_getWidth(self.__ptr)
+	return retVal
 end
 
 function ScreenEntity:getHeight()
-	return Polycore.ScreenEntity_getHeight(self.__ptr)
+	local retVal =  Polycore.ScreenEntity_getHeight(self.__ptr)
+	return retVal
 end
 
 function ScreenEntity:setWidth(w)
-	return Polycore.ScreenEntity_setWidth(self.__ptr, w)
+	local retVal = Polycore.ScreenEntity_setWidth(self.__ptr, w)
 end
 
 function ScreenEntity:setHeight(h)
-	return Polycore.ScreenEntity_setHeight(self.__ptr, h)
+	local retVal = Polycore.ScreenEntity_setHeight(self.__ptr, h)
 end
 
 function ScreenEntity:onGainFocus()
-	return Polycore.ScreenEntity_onGainFocus(self.__ptr)
+	local retVal =  Polycore.ScreenEntity_onGainFocus(self.__ptr)
 end
 
 function ScreenEntity:onLoseFocus()
-	return Polycore.ScreenEntity_onLoseFocus(self.__ptr)
+	local retVal =  Polycore.ScreenEntity_onLoseFocus(self.__ptr)
 end
 
 function ScreenEntity:startDrag(xOffset, yOffset)
-	return Polycore.ScreenEntity_startDrag(self.__ptr, xOffset, yOffset)
+	local retVal = Polycore.ScreenEntity_startDrag(self.__ptr, xOffset, yOffset)
 end
 
 function ScreenEntity:stopDrag()
-	return Polycore.ScreenEntity_stopDrag(self.__ptr)
+	local retVal =  Polycore.ScreenEntity_stopDrag(self.__ptr)
 end
 
 function ScreenEntity:setBlendingMode(newBl_endingMode)
-	return Polycore.ScreenEntity_setBlendingMode(self.__ptr, newBl_endingMode)
+	local retVal = Polycore.ScreenEntity_setBlendingMode(self.__ptr, newBl_endingMode)
 end
 
 function ScreenEntity:setPositionMode(newPositionMode)
-	return Polycore.ScreenEntity_setPositionMode(self.__ptr, newPositionMode)
+	local retVal = Polycore.ScreenEntity_setPositionMode(self.__ptr, newPositionMode)
 end
 
 function ScreenEntity:setDragLimits(rect)
-	return Polycore.ScreenEntity_setDragLimits(self.__ptr, rect.__ptr)
+	local retVal = Polycore.ScreenEntity_setDragLimits(self.__ptr, rect.__ptr)
 end
 
 function ScreenEntity:clearDragLimits()
-	return Polycore.ScreenEntity_clearDragLimits(self.__ptr)
+	local retVal =  Polycore.ScreenEntity_clearDragLimits(self.__ptr)
 end
 
 function ScreenEntity:focusChild(child)
-	return Polycore.ScreenEntity_focusChild(self.__ptr, child.__ptr)
+	local retVal = Polycore.ScreenEntity_focusChild(self.__ptr, child.__ptr)
 end
 
 function ScreenEntity:focusNextChild()
-	return Polycore.ScreenEntity_focusNextChild(self.__ptr)
+	local retVal =  Polycore.ScreenEntity_focusNextChild(self.__ptr)
 end
 
 function ScreenEntity:getPosition2D()
-	return Polycore.ScreenEntity_getPosition2D(self.__ptr)
+	local retVal =  Polycore.ScreenEntity_getPosition2D(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Vector2("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function ScreenEntity:isFocusable()
-	return Polycore.ScreenEntity_isFocusable(self.__ptr)
+	local retVal =  Polycore.ScreenEntity_isFocusable(self.__ptr)
+	return retVal
 end
 

+ 20 - 3
Bindings/Contents/LUA/API/Polycode/ScreenEvent.lua

@@ -2,9 +2,26 @@ require "Polycode/Event"
 
 class "ScreenEvent" (Event)
 
-function ScreenEvent:ScreenEvent()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.ScreenEvent()
+
+
+ENTITY_MOVE_TOP = 0
+ENTITY_MOVE_BOTTOM = 1
+ENTITY_MOVE_UP = 2
+ENTITY_MOVE_DOWN = 3
+
+
+
+
+function ScreenEvent:ScreenEvent(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.ScreenEvent(unpack(arg))
 	end
 end
 

+ 21 - 6
Bindings/Contents/LUA/API/Polycode/ScreenImage.lua

@@ -2,21 +2,36 @@ require "Polycode/ScreenShape"
 
 class "ScreenImage" (ScreenShape)
 
-function ScreenImage:ScreenImage(fileName)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.ScreenImage(fileName)
+
+
+
+
+
+
+function ScreenImage:ScreenImage(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.ScreenImage(unpack(arg))
 	end
 end
 
 function ScreenImage:setImageCoordinates(x, y, width, height)
-	return Polycore.ScreenImage_setImageCoordinates(self.__ptr, x, y, width, height)
+	local retVal = Polycore.ScreenImage_setImageCoordinates(self.__ptr, x, y, width, height)
 end
 
 function ScreenImage:getImageWidth()
-	return Polycore.ScreenImage_getImageWidth(self.__ptr)
+	local retVal =  Polycore.ScreenImage_getImageWidth(self.__ptr)
+	return retVal
 end
 
 function ScreenImage:getImageHeight()
-	return Polycore.ScreenImage_getImageHeight(self.__ptr)
+	local retVal =  Polycore.ScreenImage_getImageHeight(self.__ptr)
+	return retVal
 end
 

+ 28 - 7
Bindings/Contents/LUA/API/Polycode/ScreenLabel.lua

@@ -2,25 +2,46 @@ require "Polycode/ScreenShape"
 
 class "ScreenLabel" (ScreenShape)
 
-function ScreenLabel:ScreenLabel(fontName, text, size, amode)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.ScreenLabel(fontName, text, size, amode)
+
+
+
+
+
+
+function ScreenLabel:ScreenLabel(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.ScreenLabel(unpack(arg))
 	end
 end
 
 function ScreenLabel:addDropShadow(color, size, offsetX, offsetY)
-	return Polycore.ScreenLabel_addDropShadow(self.__ptr, color.__ptr, size, offsetX, offsetY)
+	local retVal = Polycore.ScreenLabel_addDropShadow(self.__ptr, color.__ptr, size, offsetX, offsetY)
 end
 
 function ScreenLabel:setText(newText)
-	return Polycore.ScreenLabel_setText(self.__ptr, newText)
+	local retVal = Polycore.ScreenLabel_setText(self.__ptr, newText)
 end
 
 function ScreenLabel:getText()
-	return Polycore.ScreenLabel_getText(self.__ptr)
+	local retVal =  Polycore.ScreenLabel_getText(self.__ptr)
+	return retVal
 end
 
 function ScreenLabel:getLabel()
-	return Polycore.ScreenLabel_getLabel(self.__ptr)
+	local retVal =  Polycore.ScreenLabel_getLabel(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Label("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 

+ 19 - 6
Bindings/Contents/LUA/API/Polycode/ScreenLine.lua

@@ -2,21 +2,34 @@ require "Polycode/ScreenEntity"
 
 class "ScreenLine" (ScreenEntity)
 
-function ScreenLine:ScreenLine(start, _end)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.ScreenLine(start, _end)
+
+
+
+
+
+
+function ScreenLine:ScreenLine(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.ScreenLine(unpack(arg))
 	end
 end
 
 function ScreenLine:Update()
-	return Polycore.ScreenLine_Update(self.__ptr)
+	local retVal =  Polycore.ScreenLine_Update(self.__ptr)
 end
 
 function ScreenLine:Render()
-	return Polycore.ScreenLine_Render(self.__ptr)
+	local retVal =  Polycore.ScreenLine_Render(self.__ptr)
 end
 
 function ScreenLine:setLineWidth(width)
-	return Polycore.ScreenLine_setLineWidth(self.__ptr, width)
+	local retVal = Polycore.ScreenLine_setLineWidth(self.__ptr, width)
 end
 

+ 22 - 7
Bindings/Contents/LUA/API/Polycode/ScreenManager.lua

@@ -2,25 +2,40 @@ require "Polycode/EventDispatcher"
 
 class "ScreenManager" (EventDispatcher)
 
-function ScreenManager:ScreenManager()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.ScreenManager()
+
+
+REGULAR_SCREEN = 1
+PHYSICS_SCREEN = 2
+
+
+
+
+function ScreenManager:ScreenManager(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.ScreenManager(unpack(arg))
 	end
 end
 
 function ScreenManager:removeScreen(screen)
-	return Polycore.ScreenManager_removeScreen(self.__ptr, screen.__ptr)
+	local retVal = Polycore.ScreenManager_removeScreen(self.__ptr, screen.__ptr)
 end
 
 function ScreenManager:addScreen(screen)
-	return Polycore.ScreenManager_addScreen(self.__ptr, screen.__ptr)
+	local retVal = Polycore.ScreenManager_addScreen(self.__ptr, screen.__ptr)
 end
 
 function ScreenManager:Update()
-	return Polycore.ScreenManager_Update(self.__ptr)
+	local retVal =  Polycore.ScreenManager_Update(self.__ptr)
 end
 
 function ScreenManager:handleEvent(event)
-	return Polycore.ScreenManager_handleEvent(self.__ptr, event.__ptr)
+	local retVal = Polycore.ScreenManager_handleEvent(self.__ptr, event.__ptr)
 end
 

+ 35 - 8
Bindings/Contents/LUA/API/Polycode/ScreenMesh.lua

@@ -2,29 +2,56 @@ require "Polycode/ScreenEntity"
 
 class "ScreenMesh" (ScreenEntity)
 
-function ScreenMesh:ScreenMesh(fileName)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.ScreenMesh(fileName)
+
+
+
+
+
+
+function ScreenMesh:ScreenMesh(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.ScreenMesh(unpack(arg))
 	end
 end
 
 function ScreenMesh:Render()
-	return Polycore.ScreenMesh_Render(self.__ptr)
+	local retVal =  Polycore.ScreenMesh_Render(self.__ptr)
 end
 
 function ScreenMesh:getMesh()
-	return Polycore.ScreenMesh_getMesh(self.__ptr)
+	local retVal =  Polycore.ScreenMesh_getMesh(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Mesh("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function ScreenMesh:getTexture()
-	return Polycore.ScreenMesh_getTexture(self.__ptr)
+	local retVal =  Polycore.ScreenMesh_getTexture(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Texture("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function ScreenMesh:loadTexture(fileName)
-	return Polycore.ScreenMesh_loadTexture(self.__ptr, fileName)
+	local retVal = Polycore.ScreenMesh_loadTexture(self.__ptr, fileName)
 end
 
 function ScreenMesh:setTexture(texture)
-	return Polycore.ScreenMesh_setTexture(self.__ptr, texture.__ptr)
+	local retVal = Polycore.ScreenMesh_setTexture(self.__ptr, texture.__ptr)
 end
 

+ 26 - 6
Bindings/Contents/LUA/API/Polycode/ScreenParticleEmitter.lua

@@ -2,21 +2,41 @@ require "Polycode/ScreenEntity"
 
 class "ScreenParticleEmitter" (ScreenEntity)
 
-function ScreenParticleEmitter:ScreenParticleEmitter(imageFile, particleMesh, emitter, particleParentScreen, particleType, emitterType, lifespan, numParticles, direction, gravity, deviation)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.ScreenParticleEmitter(imageFile, particleMesh, emitter, particleParentScreen, particleType, emitterType, lifespan, numParticles, direction, gravity, deviation)
+
+
+
+
+
+
+function ScreenParticleEmitter:ScreenParticleEmitter(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.ScreenParticleEmitter(unpack(arg))
 	end
 end
 
 function ScreenParticleEmitter:addParticleBody(particleBody)
-	return Polycore.ScreenParticleEmitter_addParticleBody(self.__ptr, particleBody.__ptr)
+	local retVal = Polycore.ScreenParticleEmitter_addParticleBody(self.__ptr, particleBody.__ptr)
 end
 
 function ScreenParticleEmitter:getBaseMatrix()
-	return Polycore.ScreenParticleEmitter_getBaseMatrix(self.__ptr)
+	local retVal =  Polycore.ScreenParticleEmitter_getBaseMatrix(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Matrix4("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function ScreenParticleEmitter:Update()
-	return Polycore.ScreenParticleEmitter_Update(self.__ptr)
+	local retVal =  Polycore.ScreenParticleEmitter_Update(self.__ptr)
 end
 

+ 44 - 10
Bindings/Contents/LUA/API/Polycode/ScreenShape.lua

@@ -2,37 +2,71 @@ require "Polycode/ScreenMesh"
 
 class "ScreenShape" (ScreenMesh)
 
-function ScreenShape:ScreenShape(shapeType, option1, option2, option3, option4)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.ScreenShape(shapeType, option1, option2, option3, option4)
+
+
+SHAPE_RECT = 1
+SHAPE_CIRCLE = 2
+SHAPE_CIRCLE_OUTLINE = 3
+SHAPE_CUSTOM = 4
+function ScreenShape:__index__(name)
+	if name == "strokeEnabled" then
+		return Polycore.ScreenShape_get_strokeEnabled(self.__ptr)
+	elseif name == "lineSmooth" then
+		return Polycore.ScreenShape_get_lineSmooth(self.__ptr)
+	end
+end
+
+
+function ScreenShape:__set_callback(name,value)
+	if name == "strokeEnabled" then
+		Polycore.ScreenShape_set_strokeEnabled(self.__ptr, value)
+		return true
+	elseif name == "lineSmooth" then
+		Polycore.ScreenShape_set_lineSmooth(self.__ptr, value)
+		return true
+	end
+	return false
+end
+
+
+function ScreenShape:ScreenShape(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.ScreenShape(unpack(arg))
 	end
 end
 
 function ScreenShape:Render()
-	return Polycore.ScreenShape_Render(self.__ptr)
+	local retVal =  Polycore.ScreenShape_Render(self.__ptr)
 end
 
 function ScreenShape:setStrokeColor(r, g, b, a)
-	return Polycore.ScreenShape_setStrokeColor(self.__ptr, r, g, b, a)
+	local retVal = Polycore.ScreenShape_setStrokeColor(self.__ptr, r, g, b, a)
 end
 
 function ScreenShape:setStrokeWidth(width)
-	return Polycore.ScreenShape_setStrokeWidth(self.__ptr, width)
+	local retVal = Polycore.ScreenShape_setStrokeWidth(self.__ptr, width)
 end
 
 function ScreenShape:setGradient(r1, g1, b1, a1, r2, g2, b2, a2)
-	return Polycore.ScreenShape_setGradient(self.__ptr, r1, g1, b1, a1, r2, g2, b2, a2)
+	local retVal = Polycore.ScreenShape_setGradient(self.__ptr, r1, g1, b1, a1, r2, g2, b2, a2)
 end
 
 function ScreenShape:clearGradient()
-	return Polycore.ScreenShape_clearGradient(self.__ptr)
+	local retVal =  Polycore.ScreenShape_clearGradient(self.__ptr)
 end
 
 function ScreenShape:setShapeSize(newWidth, newHeight)
-	return Polycore.ScreenShape_setShapeSize(self.__ptr, newWidth, newHeight)
+	local retVal = Polycore.ScreenShape_setShapeSize(self.__ptr, newWidth, newHeight)
 end
 
 function ScreenShape:addShapePoint(x, y)
-	return Polycore.ScreenShape_addShapePoint(self.__ptr, x, y)
+	local retVal = Polycore.ScreenShape_addShapePoint(self.__ptr, x, y)
 end
 

+ 19 - 6
Bindings/Contents/LUA/API/Polycode/ScreenSprite.lua

@@ -2,21 +2,34 @@ require "Polycode/ScreenShape"
 
 class "ScreenSprite" (ScreenShape)
 
-function ScreenSprite:ScreenSprite(fileName, spriteWidth, spriteHeight)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.ScreenSprite(fileName, spriteWidth, spriteHeight)
+
+
+
+
+
+
+function ScreenSprite:ScreenSprite(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.ScreenSprite(unpack(arg))
 	end
 end
 
 function ScreenSprite:addAnimation(name, frames, speed)
-	return Polycore.ScreenSprite_addAnimation(self.__ptr, name, frames, speed)
+	local retVal = Polycore.ScreenSprite_addAnimation(self.__ptr, name, frames, speed)
 end
 
 function ScreenSprite:playAnimation(name, startFrame, once)
-	return Polycore.ScreenSprite_playAnimation(self.__ptr, name, startFrame, once)
+	local retVal = Polycore.ScreenSprite_playAnimation(self.__ptr, name, startFrame, once)
 end
 
 function ScreenSprite:Update()
-	return Polycore.ScreenSprite_Update(self.__ptr)
+	local retVal =  Polycore.ScreenSprite_Update(self.__ptr)
 end
 

+ 37 - 0
Bindings/Contents/LUA/API/Polycode/Shader.lua

@@ -0,0 +1,37 @@
+require "Polycode/Resource"
+
+class "Shader" (Resource)
+
+
+
+FIXED_SHADER = 0
+MODULE_SHADER = 1
+
+
+
+
+function Shader:getType()
+	local retVal =  Polycore.Shader_getType(self.__ptr)
+	return retVal
+end
+
+function Shader:setName(name)
+	local retVal = Polycore.Shader_setName(self.__ptr, name)
+end
+
+function Shader:getName()
+	local retVal =  Polycore.Shader_getName(self.__ptr)
+	return retVal
+end
+
+function Shader:createBinding()
+	local retVal =  Polycore.Shader_createBinding(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = ShaderBinding("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+

+ 116 - 0
Bindings/Contents/LUA/API/Polycode/ShaderBinding.lua

@@ -0,0 +1,116 @@
+class "ShaderBinding"
+
+
+
+
+
+
+
+function ShaderBinding:ShaderBinding(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.ShaderBinding(unpack(arg))
+	end
+end
+
+function ShaderBinding:clearTexture(name)
+	local retVal = Polycore.ShaderBinding_clearTexture(self.__ptr, name)
+end
+
+function ShaderBinding:addTexture(name, texture)
+	local retVal = Polycore.ShaderBinding_addTexture(self.__ptr, name, texture.__ptr)
+end
+
+function ShaderBinding:addParam(type, name, value)
+	local retVal = Polycore.ShaderBinding_addParam(self.__ptr, type, name, value)
+end
+
+function ShaderBinding:addCubemap(name, cubemap)
+	local retVal = Polycore.ShaderBinding_addCubemap(self.__ptr, name, cubemap.__ptr)
+end
+
+function ShaderBinding:getNumLocalParams()
+	local retVal =  Polycore.ShaderBinding_getNumLocalParams(self.__ptr)
+	return retVal
+end
+
+function ShaderBinding:getLocalParam(index)
+	local retVal = Polycore.ShaderBinding_getLocalParam(self.__ptr, index)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = LocalShaderParam("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+
+function ShaderBinding:getLocalParamByName(name)
+	local retVal = Polycore.ShaderBinding_getLocalParamByName(self.__ptr, name)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = LocalShaderParam("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+
+function ShaderBinding:addRenderTargetBinding(binding)
+	local retVal = Polycore.ShaderBinding_addRenderTargetBinding(self.__ptr, binding.__ptr)
+end
+
+function ShaderBinding:getNumRenderTargetBindings()
+	local retVal =  Polycore.ShaderBinding_getNumRenderTargetBindings(self.__ptr)
+	return retVal
+end
+
+function ShaderBinding:getRenderTargetBinding(index)
+	local retVal = Polycore.ShaderBinding_getRenderTargetBinding(self.__ptr, index)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = RenderTargetBinding("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+
+function ShaderBinding:getNumInTargetBindings()
+	local retVal =  Polycore.ShaderBinding_getNumInTargetBindings(self.__ptr)
+	return retVal
+end
+
+function ShaderBinding:getInTargetBinding(index)
+	local retVal = Polycore.ShaderBinding_getInTargetBinding(self.__ptr, index)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = RenderTargetBinding("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+
+function ShaderBinding:getNumOutTargetBindings()
+	local retVal =  Polycore.ShaderBinding_getNumOutTargetBindings(self.__ptr)
+	return retVal
+end
+
+function ShaderBinding:getOutTargetBinding(index)
+	local retVal = Polycore.ShaderBinding_getOutTargetBinding(self.__ptr, index)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = RenderTargetBinding("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+

+ 57 - 15
Bindings/Contents/LUA/API/Polycode/Skeleton.lua

@@ -2,57 +2,99 @@ require "Polycode/SceneEntity"
 
 class "Skeleton" (SceneEntity)
 
-function Skeleton:Skeleton(fileName)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Skeleton(fileName)
+
+
+
+
+
+
+function Skeleton:Skeleton(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Skeleton(unpack(arg))
 	end
 end
 
 function Skeleton:loadSkeleton(fileName)
-	return Polycore.Skeleton_loadSkeleton(self.__ptr, fileName)
+	local retVal = Polycore.Skeleton_loadSkeleton(self.__ptr, fileName)
 end
 
 function Skeleton:playAnimation(animName)
-	return Polycore.Skeleton_playAnimation(self.__ptr, animName)
+	local retVal = Polycore.Skeleton_playAnimation(self.__ptr, animName)
 end
 
 function Skeleton:playAnimationByIndex(index)
-	return Polycore.Skeleton_playAnimationByIndex(self.__ptr, index)
+	local retVal = Polycore.Skeleton_playAnimationByIndex(self.__ptr, index)
 end
 
 function Skeleton:addAnimation(name, fileName)
-	return Polycore.Skeleton_addAnimation(self.__ptr, name, fileName)
+	local retVal = Polycore.Skeleton_addAnimation(self.__ptr, name, fileName)
 end
 
 function Skeleton:getAnimation(name)
-	return Polycore.Skeleton_getAnimation(self.__ptr, name)
+	local retVal = Polycore.Skeleton_getAnimation(self.__ptr, name)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = SkeletonAnimation("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Skeleton:Update()
-	return Polycore.Skeleton_Update(self.__ptr)
+	local retVal =  Polycore.Skeleton_Update(self.__ptr)
 end
 
 function Skeleton:getBoneByName(name)
-	return Polycore.Skeleton_getBoneByName(self.__ptr, name)
+	local retVal = Polycore.Skeleton_getBoneByName(self.__ptr, name)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Bone("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Skeleton:bonesVisible(val)
-	return Polycore.Skeleton_bonesVisible(self.__ptr, val)
+	local retVal = Polycore.Skeleton_bonesVisible(self.__ptr, val)
 end
 
 function Skeleton:enableBoneLabels(labelFont, size, scale, labelColor)
-	return Polycore.Skeleton_enableBoneLabels(self.__ptr, labelFont, size, scale, labelColor.__ptr)
+	local retVal = Polycore.Skeleton_enableBoneLabels(self.__ptr, labelFont, size, scale, labelColor.__ptr)
 end
 
 function Skeleton:getNumBones()
-	return Polycore.Skeleton_getNumBones(self.__ptr)
+	local retVal =  Polycore.Skeleton_getNumBones(self.__ptr)
+	return retVal
 end
 
 function Skeleton:getBone(index)
-	return Polycore.Skeleton_getBone(self.__ptr, index)
+	local retVal = Polycore.Skeleton_getBone(self.__ptr, index)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Bone("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Skeleton:getCurrentAnimation()
-	return Polycore.Skeleton_getCurrentAnimation(self.__ptr)
+	local retVal =  Polycore.Skeleton_getCurrentAnimation(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = SkeletonAnimation("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 

+ 23 - 9
Bindings/Contents/LUA/API/Polycode/SkeletonAnimation.lua

@@ -1,32 +1,46 @@
 class "SkeletonAnimation"
 
-function SkeletonAnimation:SkeletonAnimation(name, duration)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.SkeletonAnimation(name, duration)
+
+
+
+
+
+
+function SkeletonAnimation:SkeletonAnimation(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.SkeletonAnimation(unpack(arg))
 	end
 end
 
 function SkeletonAnimation:addBoneTrack(boneTrack)
-	return Polycore.SkeletonAnimation_addBoneTrack(self.__ptr, boneTrack.__ptr)
+	local retVal = Polycore.SkeletonAnimation_addBoneTrack(self.__ptr, boneTrack.__ptr)
 end
 
 function SkeletonAnimation:getName()
-	return Polycore.SkeletonAnimation_getName(self.__ptr)
+	local retVal =  Polycore.SkeletonAnimation_getName(self.__ptr)
+	return retVal
 end
 
 function SkeletonAnimation:Play()
-	return Polycore.SkeletonAnimation_Play(self.__ptr)
+	local retVal =  Polycore.SkeletonAnimation_Play(self.__ptr)
 end
 
 function SkeletonAnimation:Stop()
-	return Polycore.SkeletonAnimation_Stop(self.__ptr)
+	local retVal =  Polycore.SkeletonAnimation_Stop(self.__ptr)
 end
 
 function SkeletonAnimation:Update()
-	return Polycore.SkeletonAnimation_Update(self.__ptr)
+	local retVal =  Polycore.SkeletonAnimation_Update(self.__ptr)
 end
 
 function SkeletonAnimation:setSpeed(speed)
-	return Polycore.SkeletonAnimation_setSpeed(self.__ptr, speed)
+	local retVal = Polycore.SkeletonAnimation_setSpeed(self.__ptr, speed)
 end
 

+ 45 - 11
Bindings/Contents/LUA/API/Polycode/Sound.lua

@@ -1,40 +1,74 @@
 class "Sound"
 
-function Sound:Sound(fileName)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Sound(fileName)
+
+
+
+
+
+
+function Sound:Sound(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Sound(unpack(arg))
 	end
 end
 
 function Sound:Play(once)
-	return Polycore.Sound_Play(self.__ptr, once)
+	local retVal = Polycore.Sound_Play(self.__ptr, once)
 end
 
 function Sound:Stop()
-	return Polycore.Sound_Stop(self.__ptr)
+	local retVal =  Polycore.Sound_Stop(self.__ptr)
 end
 
 function Sound:loadWAV(fileName)
-	return Polycore.Sound_loadWAV(self.__ptr, fileName)
+	local retVal = Polycore.Sound_loadWAV(self.__ptr, fileName)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = ALuint("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Sound:loadOGG(fileName)
-	return Polycore.Sound_loadOGG(self.__ptr, fileName)
+	local retVal = Polycore.Sound_loadOGG(self.__ptr, fileName)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = ALuint("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Sound:GenSource(buffer)
-	return Polycore.Sound_GenSource(self.__ptr, buffer.__ptr)
+	local retVal = Polycore.Sound_GenSource(self.__ptr, buffer.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = ALuint("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Sound:checkALError(operation)
-	return Polycore.Sound_checkALError(self.__ptr, operation)
+	local retVal = Polycore.Sound_checkALError(self.__ptr, operation)
 end
 
 function Sound:soundError(err)
-	return Polycore.Sound_soundError(self.__ptr, err)
+	local retVal = Polycore.Sound_soundError(self.__ptr, err)
 end
 
 function Sound:soundCheck(result, err)
-	return Polycore.Sound_soundCheck(self.__ptr, result, err)
+	local retVal = Polycore.Sound_soundCheck(self.__ptr, result, err)
 end
 

+ 17 - 4
Bindings/Contents/LUA/API/Polycode/SoundManager.lua

@@ -1,12 +1,25 @@
 class "SoundManager"
 
-function SoundManager:SoundManager()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.SoundManager()
+
+
+
+
+
+
+function SoundManager:SoundManager(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.SoundManager(unpack(arg))
 	end
 end
 
 function SoundManager:initAL()
-	return Polycore.SoundManager_initAL(self.__ptr)
+	local retVal =  Polycore.SoundManager_initAL(self.__ptr)
 end
 

+ 86 - 24
Bindings/Contents/LUA/API/Polycode/String.lua

@@ -1,80 +1,142 @@
 class "String"
 
-function String:String()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.String()
+
+
+ENCODING_UTF8 = 0
+
+
+
+
+function String:String(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.String(unpack(arg))
 	end
 end
 
 function String:size()
-	return Polycore.String_size(self.__ptr)
+	local retVal =  Polycore.String_size(self.__ptr)
+	return retVal
 end
 
 function String:length()
-	return Polycore.String_length(self.__ptr)
+	local retVal =  Polycore.String_length(self.__ptr)
+	return retVal
 end
 
 function String:getSTLString()
-	return Polycore.String_getSTLString(self.__ptr)
+	local retVal =  Polycore.String_getSTLString(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = string("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function String:getSTLWString()
-	return Polycore.String_getSTLWString(self.__ptr)
+	local retVal =  Polycore.String_getSTLWString(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = wstring("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function String:substr(pos, n)
-	return Polycore.String_substr(self.__ptr, pos.__ptr, n.__ptr)
+	local retVal = Polycore.String_substr(self.__ptr, pos.__ptr, n.__ptr)
+	return retVal
 end
 
 function String:rfind(str, pos)
-	return Polycore.String_rfind(self.__ptr, str.__ptr, pos.__ptr)
+	local retVal = Polycore.String_rfind(self.__ptr, str.__ptr, pos.__ptr)
+	return retVal
 end
 
 function String:find(str, pos)
-	return Polycore.String_find(self.__ptr, str.__ptr, pos.__ptr)
+	local retVal = Polycore.String_find(self.__ptr, str.__ptr, pos.__ptr)
+	return retVal
 end
 
 function String:find_last_of(str, pos)
-	return Polycore.String_find_last_of(self.__ptr, str.__ptr, pos.__ptr)
+	local retVal = Polycore.String_find_last_of(self.__ptr, str.__ptr, pos.__ptr)
+	return retVal
 end
 
 function String:toLowerCase()
-	return Polycore.String_toLowerCase(self.__ptr)
-end
-
-function String:split(delims)
-	return Polycore.String_split(self.__ptr, delims.__ptr)
+	local retVal =  Polycore.String_toLowerCase(self.__ptr)
+	return retVal
 end
 
 function String:replace(what, withWhat)
-	return Polycore.String_replace(self.__ptr, what.__ptr, withWhat.__ptr)
+	local retVal = Polycore.String_replace(self.__ptr, what.__ptr, withWhat.__ptr)
+	return retVal
 end
 
 function String:NumberToString(value)
-	return Polycore.String_NumberToString(self.__ptr, value)
+	local retVal = Polycore.String_NumberToString(value)
+	return retVal
 end
 
 function String:c_str()
-	return Polycore.String_c_str(self.__ptr)
+	local retVal =  Polycore.String_c_str(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = char("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function String:wc_str()
-	return Polycore.String_wc_str(self.__ptr)
+	local retVal =  Polycore.String_wc_str(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = wchar_t("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function String:data()
-	return Polycore.String_data(self.__ptr)
+	local retVal =  Polycore.String_data(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = wchar_t("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function String:getDataWithEncoding(encoding)
-	return Polycore.String_getDataWithEncoding(self.__ptr, encoding)
+	local retVal = Polycore.String_getDataWithEncoding(self.__ptr, encoding)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = char("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function String:setDataWithEncoding(data, encoding)
-	return Polycore.String_setDataWithEncoding(self.__ptr, data.__ptr, encoding)
+	local retVal = Polycore.String_setDataWithEncoding(self.__ptr, data.__ptr, encoding)
 end
 
 function String:getDataSizeWithEncoding(encoding)
-	return Polycore.String_getDataSizeWithEncoding(self.__ptr, encoding)
+	local retVal = Polycore.String_getDataSizeWithEncoding(self.__ptr, encoding)
+	return retVal
 end
 

+ 88 - 0
Bindings/Contents/LUA/API/Polycode/Texture.lua

@@ -0,0 +1,88 @@
+require "Polycode/Resource"
+
+class "Texture" (Resource)
+
+
+
+function Texture:__index__(name)
+	if name == "scrollSpeedX" then
+		return Polycore.Texture_get_scrollSpeedX(self.__ptr)
+	elseif name == "scrollSpeedY" then
+		return Polycore.Texture_get_scrollSpeedY(self.__ptr)
+	elseif name == "clamp" then
+		return Polycore.Texture_get_clamp(self.__ptr)
+	end
+end
+
+
+function Texture:__set_callback(name,value)
+	if name == "scrollSpeedX" then
+		Polycore.Texture_set_scrollSpeedX(self.__ptr, value)
+		return true
+	elseif name == "scrollSpeedY" then
+		Polycore.Texture_set_scrollSpeedY(self.__ptr, value)
+		return true
+	elseif name == "clamp" then
+		Polycore.Texture_set_clamp(self.__ptr, value)
+		return true
+	end
+	return false
+end
+
+
+function Texture:setTextureData(data)
+	local retVal = Polycore.Texture_setTextureData(self.__ptr, data.__ptr)
+end
+
+function Texture:recreateFromImageData()
+	local retVal =  Polycore.Texture_recreateFromImageData(self.__ptr)
+end
+
+function Texture:getScrollOffsetX()
+	local retVal =  Polycore.Texture_getScrollOffsetX(self.__ptr)
+	return retVal
+end
+
+function Texture:getScrollOffsetY()
+	local retVal =  Polycore.Texture_getScrollOffsetY(self.__ptr)
+	return retVal
+end
+
+function Texture:setImageData(data)
+	local retVal = Polycore.Texture_setImageData(self.__ptr, data.__ptr)
+end
+
+function Texture:updateScroll(elapsed)
+	local retVal = Polycore.Texture_updateScroll(self.__ptr, elapsed)
+end
+
+function Texture:setResourcePath(newPath)
+	local retVal = Polycore.Texture_setResourcePath(self.__ptr, newPath)
+end
+
+function Texture:getResourcePath()
+	local retVal =  Polycore.Texture_getResourcePath(self.__ptr)
+	return retVal
+end
+
+function Texture:getTextureData()
+	local retVal =  Polycore.Texture_getTextureData(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = char("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
+end
+
+function Texture:getWidth()
+	local retVal =  Polycore.Texture_getWidth(self.__ptr)
+	return retVal
+end
+
+function Texture:getHeight()
+	local retVal =  Polycore.Texture_getHeight(self.__ptr)
+	return retVal
+end
+

+ 28 - 10
Bindings/Contents/LUA/API/Polycode/Timer.lua

@@ -2,37 +2,55 @@ require "Polycode/EventDispatcher"
 
 class "Timer" (EventDispatcher)
 
-function Timer:Timer(triggerMode, msecs)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Timer(triggerMode, msecs)
+
+
+EVENT_TRIGGER = 0
+
+
+
+
+function Timer:Timer(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Timer(unpack(arg))
 	end
 end
 
 function Timer:Pause(paused)
-	return Polycore.Timer_Pause(self.__ptr, paused)
+	local retVal = Polycore.Timer_Pause(self.__ptr, paused)
 end
 
 function Timer:isPaused()
-	return Polycore.Timer_isPaused(self.__ptr)
+	local retVal =  Polycore.Timer_isPaused(self.__ptr)
+	return retVal
 end
 
 function Timer:getTicks()
-	return Polycore.Timer_getTicks(self.__ptr)
+	local retVal =  Polycore.Timer_getTicks(self.__ptr)
+	return retVal
 end
 
 function Timer:Update(ticks)
-	return Polycore.Timer_Update(self.__ptr, ticks)
+	local retVal = Polycore.Timer_Update(self.__ptr, ticks)
 end
 
 function Timer:Reset()
-	return Polycore.Timer_Reset(self.__ptr)
+	local retVal =  Polycore.Timer_Reset(self.__ptr)
 end
 
 function Timer:hasElapsed()
-	return Polycore.Timer_hasElapsed(self.__ptr)
+	local retVal =  Polycore.Timer_hasElapsed(self.__ptr)
+	return retVal
 end
 
 function Timer:getElapsedf()
-	return Polycore.Timer_getElapsedf(self.__ptr)
+	local retVal =  Polycore.Timer_getElapsedf(self.__ptr)
+	return retVal
 end
 

+ 19 - 6
Bindings/Contents/LUA/API/Polycode/TimerManager.lua

@@ -1,20 +1,33 @@
 class "TimerManager"
 
-function TimerManager:TimerManager()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.TimerManager()
+
+
+
+
+
+
+function TimerManager:TimerManager(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.TimerManager(unpack(arg))
 	end
 end
 
 function TimerManager:removeTimer(timer)
-	return Polycore.TimerManager_removeTimer(self.__ptr, timer.__ptr)
+	local retVal = Polycore.TimerManager_removeTimer(self.__ptr, timer.__ptr)
 end
 
 function TimerManager:addTimer(timer)
-	return Polycore.TimerManager_addTimer(self.__ptr, timer.__ptr)
+	local retVal = Polycore.TimerManager_addTimer(self.__ptr, timer.__ptr)
 end
 
 function TimerManager:Update()
-	return Polycore.TimerManager_Update(self.__ptr)
+	local retVal =  Polycore.TimerManager_Update(self.__ptr)
 end
 

+ 63 - 11
Bindings/Contents/LUA/API/Polycode/Tween.lua

@@ -2,41 +2,93 @@ require "Polycode/EventDispatcher"
 
 class "Tween" (EventDispatcher)
 
-function Tween:Tween(target, easeType, startVal, _endVal, time, _repeat)
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Tween(target, easeType, startVal, _endVal, time, _repeat)
+
+
+EASE_NONE = 0
+EASE_IN_QUAD = 1
+EASE_OUT_QUAD = 2
+EASE_INOUT_QUAD = 3
+EASE_IN_CUBIC = 4
+EASE_OUT_CUBIC = 5
+EASE_INOUT_CUBIC = 6
+EASE_IN_QUART = 7
+EASE_OUT_QUART = 8
+EASE_INOUT_QUART = 9
+EASE_IN_QUINT = 10
+EASE_OUT_QUINT = 11
+EASE_INOUT_QUINT = 12
+EASE_IN_SINE = 13
+EASE_OUT_SINE = 14
+EASE_INOUT_SINE = 15
+EASE_IN_EXPO = 16
+EASE_OUT_EXPO = 17
+EASE_INOUT_EXPO = 18
+EASE_IN_CIRC = 19
+EASE_OUT_CIRC = 20
+EASE_INOUT_CIRC = 21
+EASE_IN_BOUNCE = 22
+EASE_OUT_BOUNCE = 23
+EASE_INOUT_BOUNCE = 24
+function Tween:__index__(name)
+	if name == "repeat" then
+		return Polycore.Tween_get_repeat(self.__ptr)
+	end
+end
+
+
+function Tween:__set_callback(name,value)
+	if name == "repeat" then
+		Polycore.Tween_set_repeat(self.__ptr, value)
+		return true
+	end
+	return false
+end
+
+
+function Tween:Tween(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Tween(unpack(arg))
 	end
 end
 
 function Tween:handleEvent(event)
-	return Polycore.Tween_handleEvent(self.__ptr, event.__ptr)
+	local retVal = Polycore.Tween_handleEvent(self.__ptr, event.__ptr)
 end
 
 function Tween:interpolateTween()
-	return Polycore.Tween_interpolateTween(self.__ptr)
+	local retVal =  Polycore.Tween_interpolateTween(self.__ptr)
+	return retVal
 end
 
 function Tween:updateCustomTween()
-	return Polycore.Tween_updateCustomTween(self.__ptr)
+	local retVal =  Polycore.Tween_updateCustomTween(self.__ptr)
 end
 
 function Tween:doOnComplete()
-	return Polycore.Tween_doOnComplete(self.__ptr)
+	local retVal =  Polycore.Tween_doOnComplete(self.__ptr)
 end
 
 function Tween:Pause(pauseVal)
-	return Polycore.Tween_Pause(self.__ptr, pauseVal)
+	local retVal = Polycore.Tween_Pause(self.__ptr, pauseVal)
 end
 
 function Tween:Reset()
-	return Polycore.Tween_Reset(self.__ptr)
+	local retVal =  Polycore.Tween_Reset(self.__ptr)
 end
 
 function Tween:isComplete()
-	return Polycore.Tween_isComplete(self.__ptr)
+	local retVal =  Polycore.Tween_isComplete(self.__ptr)
+	return retVal
 end
 
 function Tween:setSpeed(speed)
-	return Polycore.Tween_setSpeed(self.__ptr, speed)
+	local retVal = Polycore.Tween_setSpeed(self.__ptr, speed)
 end
 

+ 18 - 5
Bindings/Contents/LUA/API/Polycode/TweenManager.lua

@@ -1,16 +1,29 @@
 class "TweenManager"
 
-function TweenManager:TweenManager()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.TweenManager()
+
+
+
+
+
+
+function TweenManager:TweenManager(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.TweenManager(unpack(arg))
 	end
 end
 
 function TweenManager:addTween(tween)
-	return Polycore.TweenManager_addTween(self.__ptr, tween.__ptr)
+	local retVal = Polycore.TweenManager_addTween(self.__ptr, tween.__ptr)
 end
 
 function TweenManager:Update()
-	return Polycore.TweenManager_Update(self.__ptr)
+	local retVal =  Polycore.TweenManager_Update(self.__ptr)
 end
 

+ 33 - 3
Bindings/Contents/LUA/API/Polycode/Vector2.lua

@@ -1,8 +1,38 @@
 class "Vector2"
 
-function Vector2:Vector2()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Vector2()
+
+
+function Vector2:__index__(name)
+	if name == "x" then
+		return Polycore.Vector2_get_x(self.__ptr)
+	elseif name == "y" then
+		return Polycore.Vector2_get_y(self.__ptr)
+	end
+end
+
+
+function Vector2:__set_callback(name,value)
+	if name == "x" then
+		Polycore.Vector2_set_x(self.__ptr, value)
+		return true
+	elseif name == "y" then
+		Polycore.Vector2_set_y(self.__ptr, value)
+		return true
+	end
+	return false
+end
+
+
+function Vector2:Vector2(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Vector2(unpack(arg))
 	end
 end
 

+ 54 - 9
Bindings/Contents/LUA/API/Polycode/Vector3.lua

@@ -1,32 +1,77 @@
 class "Vector3"
 
-function Vector3:Vector3()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Vector3()
+
+
+function Vector3:__index__(name)
+	if name == "x" then
+		return Polycore.Vector3_get_x(self.__ptr)
+	elseif name == "y" then
+		return Polycore.Vector3_get_y(self.__ptr)
+	elseif name == "z" then
+		return Polycore.Vector3_get_z(self.__ptr)
+	end
+end
+
+
+function Vector3:__set_callback(name,value)
+	if name == "x" then
+		Polycore.Vector3_set_x(self.__ptr, value)
+		return true
+	elseif name == "y" then
+		Polycore.Vector3_set_y(self.__ptr, value)
+		return true
+	elseif name == "z" then
+		Polycore.Vector3_set_z(self.__ptr, value)
+		return true
+	end
+	return false
+end
+
+
+function Vector3:Vector3(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Vector3(unpack(arg))
 	end
 end
 
 function Vector3:set(x, y, z)
-	return Polycore.Vector3_set(self.__ptr, x, y, z)
+	local retVal = Polycore.Vector3_set(self.__ptr, x, y, z)
 end
 
 function Vector3:distance(rhs)
-	return Polycore.Vector3_distance(self.__ptr, rhs.__ptr)
+	local retVal = Polycore.Vector3_distance(self.__ptr, rhs.__ptr)
+	return retVal
 end
 
 function Vector3:length()
-	return Polycore.Vector3_length(self.__ptr)
+	local retVal =  Polycore.Vector3_length(self.__ptr)
+	return retVal
 end
 
 function Vector3:dot(u)
-	return Polycore.Vector3_dot(self.__ptr, u.__ptr)
+	local retVal = Polycore.Vector3_dot(self.__ptr, u.__ptr)
+	return retVal
 end
 
 function Vector3:crossProduct(rkVector)
-	return Polycore.Vector3_crossProduct(self.__ptr, rkVector.__ptr)
+	local retVal = Polycore.Vector3_crossProduct(self.__ptr, rkVector.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Vector3("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Vector3:Normalize()
-	return Polycore.Vector3_Normalize(self.__ptr)
+	local retVal =  Polycore.Vector3_Normalize(self.__ptr)
 end
 

+ 50 - 10
Bindings/Contents/LUA/API/Polycode/Vertex.lua

@@ -2,37 +2,77 @@ require "Polycode/Vector3"
 
 class "Vertex" (Vector3)
 
-function Vertex:Vertex()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.Vertex()
+
+
+function Vertex:__index__(name)
+	if name == "useVertexColor" then
+		return Polycore.Vertex_get_useVertexColor(self.__ptr)
+	end
+end
+
+
+function Vertex:__set_callback(name,value)
+	if name == "useVertexColor" then
+		Polycore.Vertex_set_useVertexColor(self.__ptr, value)
+		return true
+	end
+	return false
+end
+
+
+function Vertex:Vertex(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.Vertex(unpack(arg))
 	end
 end
 
 function Vertex:addBoneAssignment(boneID, boneWeight)
-	return Polycore.Vertex_addBoneAssignment(self.__ptr, boneID, boneWeight)
+	local retVal = Polycore.Vertex_addBoneAssignment(self.__ptr, boneID, boneWeight)
 end
 
 function Vertex:getNumBoneAssignments()
-	return Polycore.Vertex_getNumBoneAssignments(self.__ptr)
+	local retVal =  Polycore.Vertex_getNumBoneAssignments(self.__ptr)
+	return retVal
 end
 
 function Vertex:getBoneAssignment(index)
-	return Polycore.Vertex_getBoneAssignment(self.__ptr, index)
+	local retVal = Polycore.Vertex_getBoneAssignment(self.__ptr, index)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = BoneAssignment("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Vertex:normalizeWeights()
-	return Polycore.Vertex_normalizeWeights(self.__ptr)
+	local retVal =  Polycore.Vertex_normalizeWeights(self.__ptr)
 end
 
 function Vertex:getTexCoord()
-	return Polycore.Vertex_getTexCoord(self.__ptr)
+	local retVal =  Polycore.Vertex_getTexCoord(self.__ptr)
+	if Polycore.__ptr_lookup[retVal] ~= nil then
+		return Polycore.__ptr_lookup[retVal]
+	else
+		Polycore.__ptr_lookup[retVal] = Vector2("__skip_ptr__")
+		Polycore.__ptr_lookup[retVal].__ptr = retVal
+		return Polycore.__ptr_lookup[retVal]
+	end
 end
 
 function Vertex:setTexCoord(u, v)
-	return Polycore.Vertex_setTexCoord(self.__ptr, u, v)
+	local retVal = Polycore.Vertex_setTexCoord(self.__ptr, u, v)
 end
 
 function Vertex:setNormal(x, y, z)
-	return Polycore.Vertex_setNormal(self.__ptr, x, y, z)
+	local retVal = Polycore.Vertex_setNormal(self.__ptr, x, y, z)
 end
 

+ 35 - 4
Bindings/Contents/LUA/API/Polycode/VertexBuffer.lua

@@ -1,12 +1,43 @@
 class "VertexBuffer"
 
-function VertexBuffer:VertexBuffer()
-	if self.__ptr == nil then
-		self.__ptr = Polycore.VertexBuffer()
+
+
+function VertexBuffer:__index__(name)
+	if name == "verticesPerFace" then
+		return Polycore.VertexBuffer_get_verticesPerFace(self.__ptr)
+	elseif name == "meshType" then
+		return Polycore.VertexBuffer_get_meshType(self.__ptr)
+	end
+end
+
+
+function VertexBuffer:__set_callback(name,value)
+	if name == "verticesPerFace" then
+		Polycore.VertexBuffer_set_verticesPerFace(self.__ptr, value)
+		return true
+	elseif name == "meshType" then
+		Polycore.VertexBuffer_set_meshType(self.__ptr, value)
+		return true
+	end
+	return false
+end
+
+
+function VertexBuffer:VertexBuffer(...)
+	for k,v in pairs(arg) do
+		if type(v) == "table" then
+			if v.__ptr ~= nil then
+				arg[k] = v.__ptr
+			end
+		end
+	end
+	if self.__ptr == nil and arg[1] ~= "__skip_ptr__" then
+		self.__ptr = Polycore.VertexBuffer(unpack(arg))
 	end
 end
 
 function VertexBuffer:getVertexCount()
-	return Polycore.VertexBuffer_getVertexCount(self.__ptr)
+	local retVal =  Polycore.VertexBuffer_getVertexCount(self.__ptr)
+	return retVal
 end
 

+ 37 - 0
Bindings/Contents/LUA/API/defaults.lua

@@ -2,6 +2,43 @@
 for k,v in pairs(math) do _G[k]=v end for k,v in pairs(table) do _G[k]=v end
 _G["count"]=_G["getn"]
 
+Polycore.__ptr_lookup = {}
+
+Services = {}
+
+Services.Core = Core("__skip_ptr__")
+Services.Core.__ptr = Polycore.CoreServices_getCore(Polycore.CoreServices_getInstance())
+
+Services.Renderer = Renderer("__skip_ptr__")
+Services.Renderer.__ptr = Polycore.CoreServices_getRenderer(Polycore.CoreServices_getInstance())
+
+Services.MaterialManager = MaterialManager("__skip_ptr__")
+Services.MaterialManager.__ptr = Polycore.CoreServices_getMaterialManager(Polycore.CoreServices_getInstance())
+
+Services.ScreenManager = ScreenManager("__skip_ptr__")
+Services.ScreenManager.__ptr = Polycore.CoreServices_getScreenManager(Polycore.CoreServices_getInstance())
+
+Services.SceneManager = SceneManager("__skip_ptr__")
+Services.SceneManager.__ptr = Polycore.CoreServices_getSceneManager(Polycore.CoreServices_getInstance())
+
+Services.TimerManager = TimerManager("__skip_ptr__")
+Services.TimerManager.__ptr = Polycore.CoreServices_getTimerManager(Polycore.CoreServices_getInstance())
+
+Services.TweenManager = TweenManager("__skip_ptr__")
+Services.TweenManager.__ptr = Polycore.CoreServices_getTweenManager(Polycore.CoreServices_getInstance())
+
+Services.ResourceManager = ResourceManager("__skip_ptr__")
+Services.ResourceManager.__ptr = Polycore.CoreServices_getResourceManager(Polycore.CoreServices_getInstance())
+
+Services.SoundManager = SoundManager("__skip_ptr__")
+Services.SoundManager.__ptr = Polycore.CoreServices_getSoundManager(Polycore.CoreServices_getInstance())
+
+Services.FontManager = FontManager("__skip_ptr__")
+Services.FontManager.__ptr = Polycore.CoreServices_getFontManager(Polycore.CoreServices_getInstance())
+
+
+
+
 function Update(e)
 end
 

+ 2 - 0
Bindings/Contents/LUA/Include/PolycodeLUA.h

@@ -5,12 +5,14 @@
 #include <Polycode.h>
 #include "PolycodeLUAWrappers.h"
 
+
 extern "C" {	
 #include <stdio.h>
 #include "lua.h"
 #include "lualib.h"
 #include "lauxlib.h"
 	
+	
 int luaopen_Polycode(lua_State *L);	
 	
 }

Разница между файлами не показана из-за своего большого размера
+ 806 - 177
Bindings/Contents/LUA/Include/PolycodeLUAWrappers.h


+ 360 - 27
Bindings/Contents/LUA/Source/PolycodeLUA.cpp

@@ -2,8 +2,22 @@
 #include "PolycodeLUAWrappers.h"
 
 int luaopen_Polycode(lua_State *L) {
-	static const struct luaL_reg polycodeLib [] = {		{"OSFILE", Polycore_OSFILE},
+	static const struct luaL_reg polycodeLib [] = {		{"OSFILE_get_fileType", Polycore_OSFILE_get_fileType},
+		{"OSFILE_set_fileType", Polycore_OSFILE_set_fileType},
+		{"OSFILE", Polycore_OSFILE},
 		{"OSFILE_debugDump", Polycore_OSFILE_debugDump},
+		{"OSFileEntry_get_name", Polycore_OSFileEntry_get_name},
+		{"OSFileEntry_get_extension", Polycore_OSFileEntry_get_extension},
+		{"OSFileEntry_get_nameWithoutExtension", Polycore_OSFileEntry_get_nameWithoutExtension},
+		{"OSFileEntry_get_basePath", Polycore_OSFileEntry_get_basePath},
+		{"OSFileEntry_get_fullPath", Polycore_OSFileEntry_get_fullPath},
+		{"OSFileEntry_get_type", Polycore_OSFileEntry_get_type},
+		{"OSFileEntry_set_name", Polycore_OSFileEntry_set_name},
+		{"OSFileEntry_set_extension", Polycore_OSFileEntry_set_extension},
+		{"OSFileEntry_set_nameWithoutExtension", Polycore_OSFileEntry_set_nameWithoutExtension},
+		{"OSFileEntry_set_basePath", Polycore_OSFileEntry_set_basePath},
+		{"OSFileEntry_set_fullPath", Polycore_OSFileEntry_set_fullPath},
+		{"OSFileEntry_set_type", Polycore_OSFileEntry_set_type},
 		{"OSFileEntry", Polycore_OSFileEntry},
 		{"OSBasics_open", Polycore_OSBasics_open},
 		{"OSBasics_close", Polycore_OSBasics_close},
@@ -11,8 +25,6 @@ int luaopen_Polycode(lua_State *L) {
 		{"OSBasics_write", Polycore_OSBasics_write},
 		{"OSBasics_seek", Polycore_OSBasics_seek},
 		{"OSBasics_tell", Polycore_OSBasics_tell},
-		{"OSBasics_parsePhysFSFolder", Polycore_OSBasics_parsePhysFSFolder},
-		{"OSBasics_parseFolder", Polycore_OSBasics_parseFolder},
 		{"OSBasics_isFolder", Polycore_OSBasics_isFolder},
 		{"OSBasics_createFolder", Polycore_OSBasics_createFolder},
 		{"OSBasics_removeItem", Polycore_OSBasics_removeItem},
@@ -28,6 +40,8 @@ int luaopen_Polycode(lua_State *L) {
 		{"BezierCurve_getPointAt", Polycore_BezierCurve_getPointAt},
 		{"BezierCurve_getPointBetween", Polycore_BezierCurve_getPointBetween},
 		{"BezierCurve_rebuildBuffers", Polycore_BezierCurve_rebuildBuffers},
+		{"Bone_get_parentBoneId", Polycore_Bone_get_parentBoneId},
+		{"Bone_set_parentBoneId", Polycore_Bone_set_parentBoneId},
 		{"Bone", Polycore_Bone},
 		{"Bone_enableBoneLabel", Polycore_Bone_enableBoneLabel},
 		{"Bone_getName", Polycore_Bone_getName},
@@ -64,6 +78,14 @@ int luaopen_Polycode(lua_State *L) {
 		{"Camera_getExposureLevel", Polycore_Camera_getExposureLevel},
 		{"Camera_createPostFilter", Polycore_Camera_createPostFilter},
 		{"Camera_setPostFilter", Polycore_Camera_setPostFilter},
+		{"Color_get_r", Polycore_Color_get_r},
+		{"Color_get_g", Polycore_Color_get_g},
+		{"Color_get_b", Polycore_Color_get_b},
+		{"Color_get_a", Polycore_Color_get_a},
+		{"Color_set_r", Polycore_Color_set_r},
+		{"Color_set_g", Polycore_Color_set_g},
+		{"Color_set_b", Polycore_Color_set_b},
+		{"Color_set_a", Polycore_Color_set_a},
 		{"Color", Polycore_Color},
 		{"Color_setColorHex", Polycore_Color_setColorHex},
 		{"Color_setColorHexRGB", Polycore_Color_setColorHexRGB},
@@ -82,6 +104,38 @@ int luaopen_Polycode(lua_State *L) {
 		{"Config_setNumericValue", Polycore_Config_setNumericValue},
 		{"Config_getNumericValue", Polycore_Config_getNumericValue},
 		{"Config_getStringValue", Polycore_Config_getStringValue},
+		{"Core_Update", Polycore_Core_Update},
+		{"Core_getTicks", Polycore_Core_getTicks},
+		{"Core_enableMouse", Polycore_Core_enableMouse},
+		{"Core_setCursor", Polycore_Core_setCursor},
+		{"Core_createThread", Polycore_Core_createThread},
+		{"Core_lockMutex", Polycore_Core_lockMutex},
+		{"Core_unlockMutex", Polycore_Core_unlockMutex},
+		{"Core_createMutex", Polycore_Core_createMutex},
+		{"Core_copyStringToClipboard", Polycore_Core_copyStringToClipboard},
+		{"Core_getClipboardString", Polycore_Core_getClipboardString},
+		{"Core_getServices", Polycore_Core_getServices},
+		{"Core_getFPS", Polycore_Core_getFPS},
+		{"Core_Shutdown", Polycore_Core_Shutdown},
+		{"Core_isFullscreen", Polycore_Core_isFullscreen},
+		{"Core_getAALevel", Polycore_Core_getAALevel},
+		{"Core_getInput", Polycore_Core_getInput},
+		{"Core_getXRes", Polycore_Core_getXRes},
+		{"Core_getYRes", Polycore_Core_getYRes},
+		{"Core_getNumVideoModes", Polycore_Core_getNumVideoModes},
+		{"Core_createFolder", Polycore_Core_createFolder},
+		{"Core_copyDiskItem", Polycore_Core_copyDiskItem},
+		{"Core_moveDiskItem", Polycore_Core_moveDiskItem},
+		{"Core_removeDiskItem", Polycore_Core_removeDiskItem},
+		{"Core_openFolderPicker", Polycore_Core_openFolderPicker},
+		{"Core_setVideoModeIndex", Polycore_Core_setVideoModeIndex},
+		{"Core_setVideoMode", Polycore_Core_setVideoMode},
+		{"Core_resizeTo", Polycore_Core_resizeTo},
+		{"Core_doSleep", Polycore_Core_doSleep},
+		{"Core_getElapsed", Polycore_Core_getElapsed},
+		{"Core_getTicksFloat", Polycore_Core_getTicksFloat},
+		{"Core_setUserPointer", Polycore_Core_setUserPointer},
+		{"Core_getUserPointer", Polycore_Core_getUserPointer},
 		{"CoreInput", Polycore_CoreInput},
 		{"CoreInput_mouseWheelUp", Polycore_CoreInput_mouseWheelUp},
 		{"CoreInput_mouseWheelDown", Polycore_CoreInput_mouseWheelDown},
@@ -119,6 +173,36 @@ int luaopen_Polycode(lua_State *L) {
 		{"Data_setFromString", Polycore_Data_setFromString},
 		{"Data_saveToFile", Polycore_Data_saveToFile},
 		{"Data_getData", Polycore_Data_getData},
+		{"Entity_get_custEntityType", Polycore_Entity_get_custEntityType},
+		{"Entity_get_billboardMode", Polycore_Entity_get_billboardMode},
+		{"Entity_get_billboardRoll", Polycore_Entity_get_billboardRoll},
+		{"Entity_get_alphaTest", Polycore_Entity_get_alphaTest},
+		{"Entity_get_backfaceCulled", Polycore_Entity_get_backfaceCulled},
+		{"Entity_get_renderWireframe", Polycore_Entity_get_renderWireframe},
+		{"Entity_get_enabled", Polycore_Entity_get_enabled},
+		{"Entity_get_visible", Polycore_Entity_get_visible},
+		{"Entity_get_depthWrite", Polycore_Entity_get_depthWrite},
+		{"Entity_get_depthTest", Polycore_Entity_get_depthTest},
+		{"Entity_get_colorAffectsChildren", Polycore_Entity_get_colorAffectsChildren},
+		{"Entity_get_depthOnly", Polycore_Entity_get_depthOnly},
+		{"Entity_get_ignoreParentMatrix", Polycore_Entity_get_ignoreParentMatrix},
+		{"Entity_get_maskByZbuffer", Polycore_Entity_get_maskByZbuffer},
+		{"Entity_get_isMask", Polycore_Entity_get_isMask},
+		{"Entity_set_custEntityType", Polycore_Entity_set_custEntityType},
+		{"Entity_set_billboardMode", Polycore_Entity_set_billboardMode},
+		{"Entity_set_billboardRoll", Polycore_Entity_set_billboardRoll},
+		{"Entity_set_alphaTest", Polycore_Entity_set_alphaTest},
+		{"Entity_set_backfaceCulled", Polycore_Entity_set_backfaceCulled},
+		{"Entity_set_renderWireframe", Polycore_Entity_set_renderWireframe},
+		{"Entity_set_enabled", Polycore_Entity_set_enabled},
+		{"Entity_set_visible", Polycore_Entity_set_visible},
+		{"Entity_set_depthWrite", Polycore_Entity_set_depthWrite},
+		{"Entity_set_depthTest", Polycore_Entity_set_depthTest},
+		{"Entity_set_colorAffectsChildren", Polycore_Entity_set_colorAffectsChildren},
+		{"Entity_set_depthOnly", Polycore_Entity_set_depthOnly},
+		{"Entity_set_ignoreParentMatrix", Polycore_Entity_set_ignoreParentMatrix},
+		{"Entity_set_maskByZbuffer", Polycore_Entity_set_maskByZbuffer},
+		{"Entity_set_isMask", Polycore_Entity_set_isMask},
 		{"Entity", Polycore_Entity},
 		{"Entity_Render", Polycore_Entity_Render},
 		{"Entity_Update", Polycore_Entity_Update},
@@ -217,24 +301,6 @@ int luaopen_Polycode(lua_State *L) {
 		{"FontManager", Polycore_FontManager},
 		{"FontManager_registerFont", Polycore_FontManager_registerFont},
 		{"FontManager_getFontByName", Polycore_FontManager_getFontByName},
-		{"GenericScene", Polycore_GenericScene},
-		{"GenericScene_Render", Polycore_GenericScene_Render},
-		{"GenericScene_RenderDepthOnly", Polycore_GenericScene_RenderDepthOnly},
-		{"GenericScene_addGrid", Polycore_GenericScene_addGrid},
-		{"GenericScene_readString", Polycore_GenericScene_readString},
-		{"GenericScene_loadScene", Polycore_GenericScene_loadScene},
-		{"GenericScene_generateLightmaps", Polycore_GenericScene_generateLightmaps},
-		{"GenericScene_addLight", Polycore_GenericScene_addLight},
-		{"GenericScene_getNearestLight", Polycore_GenericScene_getNearestLight},
-		{"GenericScene_writeEntityMatrix", Polycore_GenericScene_writeEntityMatrix},
-		{"GenericScene_writeString", Polycore_GenericScene_writeString},
-		{"GenericScene_saveScene", Polycore_GenericScene_saveScene},
-		{"GenericScene_getNumStaticGeometry", Polycore_GenericScene_getNumStaticGeometry},
-		{"GenericScene_getStaticGeometry", Polycore_GenericScene_getStaticGeometry},
-		{"GenericScene_loadCollisionChild", Polycore_GenericScene_loadCollisionChild},
-		{"GenericScene_getNumLights", Polycore_GenericScene_getNumLights},
-		{"GenericScene_getLight", Polycore_GenericScene_getLight},
-		{"GenericScene_getCustomEntityByType", Polycore_GenericScene_getCustomEntityByType},
 		{"OpenGLCubemap", Polycore_OpenGLCubemap},
 		{"OpenGLCubemap_getTextureID", Polycore_OpenGLCubemap_getTextureID},
 		{"Image", Polycore_Image},
@@ -266,6 +332,10 @@ int luaopen_Polycode(lua_State *L) {
 		{"Image_getWidth", Polycore_Image_getWidth},
 		{"Image_getHeight", Polycore_Image_getHeight},
 		{"Image_getPixels", Polycore_Image_getPixels},
+		{"InputEvent_get_mouseButton", Polycore_InputEvent_get_mouseButton},
+		{"InputEvent_get_timestamp", Polycore_InputEvent_get_timestamp},
+		{"InputEvent_set_mouseButton", Polycore_InputEvent_set_mouseButton},
+		{"InputEvent_set_timestamp", Polycore_InputEvent_set_timestamp},
 		{"InputEvent", Polycore_InputEvent},
 		{"InputEvent_keyCode", Polycore_InputEvent_keyCode},
 		{"Label", Polycore_Label},
@@ -315,6 +385,8 @@ int luaopen_Polycode(lua_State *L) {
 		{"Matrix4_getEulerAngles", Polycore_Matrix4_getEulerAngles},
 		{"Matrix4_inverse", Polycore_Matrix4_inverse},
 		{"Matrix4_inverseAffine", Polycore_Matrix4_inverseAffine},
+		{"Mesh_get_useVertexColors", Polycore_Mesh_get_useVertexColors},
+		{"Mesh_set_useVertexColors", Polycore_Mesh_set_useVertexColors},
 		{"Mesh", Polycore_Mesh},
 		{"Mesh_addPolygon", Polycore_Mesh_addPolygon},
 		{"Mesh_loadMesh", Polycore_Mesh_loadMesh},
@@ -340,12 +412,42 @@ int luaopen_Polycode(lua_State *L) {
 		{"Mesh_setMeshType", Polycore_Mesh_setMeshType},
 		{"Mesh_calculateBBox", Polycore_Mesh_calculateBBox},
 		{"Mesh_hasVertexBuffer", Polycore_Mesh_hasVertexBuffer},
+		{"VertexBuffer_get_verticesPerFace", Polycore_VertexBuffer_get_verticesPerFace},
+		{"VertexBuffer_get_meshType", Polycore_VertexBuffer_get_meshType},
+		{"VertexBuffer_set_verticesPerFace", Polycore_VertexBuffer_set_verticesPerFace},
+		{"VertexBuffer_set_meshType", Polycore_VertexBuffer_set_meshType},
 		{"VertexBuffer", Polycore_VertexBuffer},
 		{"VertexBuffer_getVertexCount", Polycore_VertexBuffer_getVertexCount},
 		{"PolycodeModule", Polycore_PolycodeModule},
 		{"PolycodeModule_getType", Polycore_PolycodeModule_getType},
+		{"ObjectEntry_get_type", Polycore_ObjectEntry_get_type},
+		{"ObjectEntry_get_name", Polycore_ObjectEntry_get_name},
+		{"ObjectEntry_get_NumberVal", Polycore_ObjectEntry_get_NumberVal},
+		{"ObjectEntry_get_intVal", Polycore_ObjectEntry_get_intVal},
+		{"ObjectEntry_get_stringVal", Polycore_ObjectEntry_get_stringVal},
+		{"ObjectEntry_get_boolVal", Polycore_ObjectEntry_get_boolVal},
+		{"ObjectEntry_get_length", Polycore_ObjectEntry_get_length},
+		{"ObjectEntry_set_type", Polycore_ObjectEntry_set_type},
+		{"ObjectEntry_set_name", Polycore_ObjectEntry_set_name},
+		{"ObjectEntry_set_NumberVal", Polycore_ObjectEntry_set_NumberVal},
+		{"ObjectEntry_set_intVal", Polycore_ObjectEntry_set_intVal},
+		{"ObjectEntry_set_stringVal", Polycore_ObjectEntry_set_stringVal},
+		{"ObjectEntry_set_boolVal", Polycore_ObjectEntry_set_boolVal},
+		{"ObjectEntry_set_length", Polycore_ObjectEntry_set_length},
 		{"ObjectEntry", Polycore_ObjectEntry},
 		{"ObjectEntry_addChild", Polycore_ObjectEntry_addChild},
+		{"Particle_get_life", Polycore_Particle_get_life},
+		{"Particle_get_lifespan", Polycore_Particle_get_lifespan},
+		{"Particle_get_brightnessDeviation", Polycore_Particle_get_brightnessDeviation},
+		{"Particle_get_perlinPosX", Polycore_Particle_get_perlinPosX},
+		{"Particle_get_perlinPosY", Polycore_Particle_get_perlinPosY},
+		{"Particle_get_perlinPosZ", Polycore_Particle_get_perlinPosZ},
+		{"Particle_set_life", Polycore_Particle_set_life},
+		{"Particle_set_lifespan", Polycore_Particle_set_lifespan},
+		{"Particle_set_brightnessDeviation", Polycore_Particle_set_brightnessDeviation},
+		{"Particle_set_perlinPosX", Polycore_Particle_set_perlinPosX},
+		{"Particle_set_perlinPosY", Polycore_Particle_set_perlinPosY},
+		{"Particle_set_perlinPosZ", Polycore_Particle_set_perlinPosZ},
 		{"Particle", Polycore_Particle},
 		{"Particle_Reset", Polycore_Particle_Reset},
 		{"Particle_createSceneParticle", Polycore_Particle_createSceneParticle},
@@ -358,8 +460,45 @@ int luaopen_Polycode(lua_State *L) {
 		{"SceneParticleEmitter_addParticleBody", Polycore_SceneParticleEmitter_addParticleBody},
 		{"SceneParticleEmitter_getBaseMatrix", Polycore_SceneParticleEmitter_getBaseMatrix},
 		{"SceneParticleEmitter_Update", Polycore_SceneParticleEmitter_Update},
+		{"ParticleEmitter_get_particleSpeedMod", Polycore_ParticleEmitter_get_particleSpeedMod},
+		{"ParticleEmitter_get_brightnessDeviation", Polycore_ParticleEmitter_get_brightnessDeviation},
+		{"ParticleEmitter_get_lifespan", Polycore_ParticleEmitter_get_lifespan},
+		{"ParticleEmitter_get_rotationFollowsPath", Polycore_ParticleEmitter_get_rotationFollowsPath},
+		{"ParticleEmitter_set_particleSpeedMod", Polycore_ParticleEmitter_set_particleSpeedMod},
+		{"ParticleEmitter_set_brightnessDeviation", Polycore_ParticleEmitter_set_brightnessDeviation},
+		{"ParticleEmitter_set_lifespan", Polycore_ParticleEmitter_set_lifespan},
+		{"ParticleEmitter_set_rotationFollowsPath", Polycore_ParticleEmitter_set_rotationFollowsPath},
+		{"ParticleEmitter_createParticles", Polycore_ParticleEmitter_createParticles},
+		{"ParticleEmitter_setRotationSpeed", Polycore_ParticleEmitter_setRotationSpeed},
+		{"ParticleEmitter_setStartingColor", Polycore_ParticleEmitter_setStartingColor},
+		{"ParticleEmitter_setEndingColor", Polycore_ParticleEmitter_setEndingColor},
+		{"ParticleEmitter_setParticleBlendingMode", Polycore_ParticleEmitter_setParticleBlendingMode},
+		{"ParticleEmitter_setDepthWrite", Polycore_ParticleEmitter_setDepthWrite},
+		{"ParticleEmitter_setDepthTest", Polycore_ParticleEmitter_setDepthTest},
+		{"ParticleEmitter_setAlphaTest", Polycore_ParticleEmitter_setAlphaTest},
+		{"ParticleEmitter_enablePerlin", Polycore_ParticleEmitter_enablePerlin},
+		{"ParticleEmitter_setBillboardMode", Polycore_ParticleEmitter_setBillboardMode},
+		{"ParticleEmitter_enableEmitter", Polycore_ParticleEmitter_enableEmitter},
+		{"ParticleEmitter_emitterEnabled", Polycore_ParticleEmitter_emitterEnabled},
+		{"ParticleEmitter_setEmitterRadius", Polycore_ParticleEmitter_setEmitterRadius},
+		{"ParticleEmitter_setStartingScaleModifier", Polycore_ParticleEmitter_setStartingScaleModifier},
+		{"ParticleEmitter_setEndingScaleModifier", Polycore_ParticleEmitter_setEndingScaleModifier},
+		{"ParticleEmitter_setEmitRotationVector", Polycore_ParticleEmitter_setEmitRotationVector},
+		{"ParticleEmitter_setEmitRotationDeviance", Polycore_ParticleEmitter_setEmitRotationDeviance},
+		{"ParticleEmitter_setAllAtOnce", Polycore_ParticleEmitter_setAllAtOnce},
+		{"ParticleEmitter_Trigger", Polycore_ParticleEmitter_Trigger},
+		{"ParticleEmitter_resetParticle", Polycore_ParticleEmitter_resetParticle},
+		{"ParticleEmitter_setPerlinModSize", Polycore_ParticleEmitter_setPerlinModSize},
+		{"ParticleEmitter_setParticleCount", Polycore_ParticleEmitter_setParticleCount},
+		{"ParticleEmitter_addParticleBody", Polycore_ParticleEmitter_addParticleBody},
+		{"ParticleEmitter_getBaseMatrix", Polycore_ParticleEmitter_getBaseMatrix},
+		{"ParticleEmitter_updateEmitter", Polycore_ParticleEmitter_updateEmitter},
 		{"Perlin", Polycore_Perlin},
 		{"Perlin_Get", Polycore_Perlin_Get},
+		{"Polygon_get_useVertexNormals", Polycore_Polygon_get_useVertexNormals},
+		{"Polygon_get_hasSecUVs", Polycore_Polygon_get_hasSecUVs},
+		{"Polygon_set_useVertexNormals", Polycore_Polygon_set_useVertexNormals},
+		{"Polygon_set_hasSecUVs", Polycore_Polygon_set_hasSecUVs},
 		{"Polygon", Polycore_Polygon},
 		{"Polygon_getVertexCount", Polycore_Polygon_getVertexCount},
 		{"Polygon_getVertex", Polycore_Polygon_getVertex},
@@ -376,6 +515,14 @@ int luaopen_Polycode(lua_State *L) {
 		{"Polygon_flipUVY", Polycore_Polygon_flipUVY},
 		{"Polygon_setUseFaceUV", Polycore_Polygon_setUseFaceUV},
 		{"Polygon_usesFaceUV", Polycore_Polygon_usesFaceUV},
+		{"Quaternion_get_x", Polycore_Quaternion_get_x},
+		{"Quaternion_get_y", Polycore_Quaternion_get_y},
+		{"Quaternion_get_z", Polycore_Quaternion_get_z},
+		{"Quaternion_get_w", Polycore_Quaternion_get_w},
+		{"Quaternion_set_x", Polycore_Quaternion_set_x},
+		{"Quaternion_set_y", Polycore_Quaternion_set_y},
+		{"Quaternion_set_z", Polycore_Quaternion_set_z},
+		{"Quaternion_set_w", Polycore_Quaternion_set_w},
 		{"Quaternion", Polycore_Quaternion},
 		{"Quaternion_setFromMatrix", Polycore_Quaternion_setFromMatrix},
 		{"Quaternion_Slerp", Polycore_Quaternion_Slerp},
@@ -400,8 +547,97 @@ int luaopen_Polycode(lua_State *L) {
 		{"QuaternionCurve_interpolate", Polycore_QuaternionCurve_interpolate},
 		{"QuaternionCurve_generatePointsFromCurves", Polycore_QuaternionCurve_generatePointsFromCurves},
 		{"QuaternionCurve_recalcTangents", Polycore_QuaternionCurve_recalcTangents},
+		{"Rectangle_get_x", Polycore_Rectangle_get_x},
+		{"Rectangle_get_y", Polycore_Rectangle_get_y},
+		{"Rectangle_get_w", Polycore_Rectangle_get_w},
+		{"Rectangle_get_h", Polycore_Rectangle_get_h},
+		{"Rectangle_set_x", Polycore_Rectangle_set_x},
+		{"Rectangle_set_y", Polycore_Rectangle_set_y},
+		{"Rectangle_set_w", Polycore_Rectangle_set_w},
+		{"Rectangle_set_h", Polycore_Rectangle_set_h},
 		{"Rectangle", Polycore_Rectangle},
 		{"Rectangle_setRect", Polycore_Rectangle_setRect},
+		{"Renderer_get_exposureLevel", Polycore_Renderer_get_exposureLevel},
+		{"Renderer_set_exposureLevel", Polycore_Renderer_set_exposureLevel},
+		{"Renderer_Resize", Polycore_Renderer_Resize},
+		{"Renderer_BeginRender", Polycore_Renderer_BeginRender},
+		{"Renderer_EndRender", Polycore_Renderer_EndRender},
+		{"Renderer_createCubemap", Polycore_Renderer_createCubemap},
+		{"Renderer_createTexture", Polycore_Renderer_createTexture},
+		{"Renderer_createRenderTextures", Polycore_Renderer_createRenderTextures},
+		{"Renderer_createFramebufferTexture", Polycore_Renderer_createFramebufferTexture},
+		{"Renderer_bindFrameBufferTexture", Polycore_Renderer_bindFrameBufferTexture},
+		{"Renderer_unbindFramebuffers", Polycore_Renderer_unbindFramebuffers},
+		{"Renderer_renderToTexture", Polycore_Renderer_renderToTexture},
+		{"Renderer_renderZBufferToTexture", Polycore_Renderer_renderZBufferToTexture},
+		{"Renderer_setViewportSize", Polycore_Renderer_setViewportSize},
+		{"Renderer_loadIdentity", Polycore_Renderer_loadIdentity},
+		{"Renderer_setOrthoMode", Polycore_Renderer_setOrthoMode},
+		{"Renderer__setOrthoMode", Polycore_Renderer__setOrthoMode},
+		{"Renderer_setPerspectiveMode", Polycore_Renderer_setPerspectiveMode},
+		{"Renderer_setTexture", Polycore_Renderer_setTexture},
+		{"Renderer_enableBackfaceCulling", Polycore_Renderer_enableBackfaceCulling},
+		{"Renderer_setClearColor", Polycore_Renderer_setClearColor},
+		{"Renderer_setAmbientColor", Polycore_Renderer_setAmbientColor},
+		{"Renderer_clearScreen", Polycore_Renderer_clearScreen},
+		{"Renderer_translate2D", Polycore_Renderer_translate2D},
+		{"Renderer_rotate2D", Polycore_Renderer_rotate2D},
+		{"Renderer_scale2D", Polycore_Renderer_scale2D},
+		{"Renderer_setFOV", Polycore_Renderer_setFOV},
+		{"Renderer_setVertexColor", Polycore_Renderer_setVertexColor},
+		{"Renderer_pushDataArrayForMesh", Polycore_Renderer_pushDataArrayForMesh},
+		{"Renderer_pushRenderDataArray", Polycore_Renderer_pushRenderDataArray},
+		{"Renderer_createRenderDataArrayForMesh", Polycore_Renderer_createRenderDataArrayForMesh},
+		{"Renderer_createRenderDataArray", Polycore_Renderer_createRenderDataArray},
+		{"Renderer_setRenderArrayData", Polycore_Renderer_setRenderArrayData},
+		{"Renderer_drawArrays", Polycore_Renderer_drawArrays},
+		{"Renderer_translate3D", Polycore_Renderer_translate3D},
+		{"Renderer_scale3D", Polycore_Renderer_scale3D},
+		{"Renderer_pushMatrix", Polycore_Renderer_pushMatrix},
+		{"Renderer_popMatrix", Polycore_Renderer_popMatrix},
+		{"Renderer_setLineSmooth", Polycore_Renderer_setLineSmooth},
+		{"Renderer_setLineSize", Polycore_Renderer_setLineSize},
+		{"Renderer_enableLighting", Polycore_Renderer_enableLighting},
+		{"Renderer_enableFog", Polycore_Renderer_enableFog},
+		{"Renderer_setFogProperties", Polycore_Renderer_setFogProperties},
+		{"Renderer_multModelviewMatrix", Polycore_Renderer_multModelviewMatrix},
+		{"Renderer_setModelviewMatrix", Polycore_Renderer_setModelviewMatrix},
+		{"Renderer_setBlendingMode", Polycore_Renderer_setBlendingMode},
+		{"Renderer_applyMaterial", Polycore_Renderer_applyMaterial},
+		{"Renderer_clearShader", Polycore_Renderer_clearShader},
+		{"Renderer_setDepthFunction", Polycore_Renderer_setDepthFunction},
+		{"Renderer_createVertexBufferForMesh", Polycore_Renderer_createVertexBufferForMesh},
+		{"Renderer_drawVertexBuffer", Polycore_Renderer_drawVertexBuffer},
+		{"Renderer_setRenderMode", Polycore_Renderer_setRenderMode},
+		{"Renderer_getRenderMode", Polycore_Renderer_getRenderMode},
+		{"Renderer_enableDepthTest", Polycore_Renderer_enableDepthTest},
+		{"Renderer_enableDepthWrite", Polycore_Renderer_enableDepthWrite},
+		{"Renderer_billboardMatrix", Polycore_Renderer_billboardMatrix},
+		{"Renderer_billboardMatrixWithScale", Polycore_Renderer_billboardMatrixWithScale},
+		{"Renderer_setTextureFilteringMode", Polycore_Renderer_setTextureFilteringMode},
+		{"Renderer_enableAlphaTest", Polycore_Renderer_enableAlphaTest},
+		{"Renderer_clearBuffer", Polycore_Renderer_clearBuffer},
+		{"Renderer_drawToColorBuffer", Polycore_Renderer_drawToColorBuffer},
+		{"Renderer_getCameraMatrix", Polycore_Renderer_getCameraMatrix},
+		{"Renderer_setCameraMatrix", Polycore_Renderer_setCameraMatrix},
+		{"Renderer_setCameraPosition", Polycore_Renderer_setCameraPosition},
+		{"Renderer_drawScreenQuad", Polycore_Renderer_drawScreenQuad},
+		{"Renderer_getXRes", Polycore_Renderer_getXRes},
+		{"Renderer_getYRes", Polycore_Renderer_getYRes},
+		{"Renderer_clearLights", Polycore_Renderer_clearLights},
+		{"Renderer_addLight", Polycore_Renderer_addLight},
+		{"Renderer_setExposureLevel", Polycore_Renderer_setExposureLevel},
+		{"Renderer_rayTriangleIntersect", Polycore_Renderer_rayTriangleIntersect},
+		{"Renderer_enableShaders", Polycore_Renderer_enableShaders},
+		{"Renderer_addShaderModule", Polycore_Renderer_addShaderModule},
+		{"Renderer_test2DCoordinate", Polycore_Renderer_test2DCoordinate},
+		{"Renderer_getProjectionMatrix", Polycore_Renderer_getProjectionMatrix},
+		{"Renderer_getModelviewMatrix", Polycore_Renderer_getModelviewMatrix},
+		{"Renderer_addShadowMap", Polycore_Renderer_addShadowMap},
+		{"Renderer_Unproject", Polycore_Renderer_Unproject},
+		{"Renderer_getNumAreaLights", Polycore_Renderer_getNumAreaLights},
+		{"Renderer_getNumSpotLights", Polycore_Renderer_getNumSpotLights},
+		{"Renderer_getNumLights", Polycore_Renderer_getNumLights},
 		{"Resource", Polycore_Resource},
 		{"Resource_getResourceName", Polycore_Resource_getResourceName},
 		{"Resource_getResourceType", Polycore_Resource_getResourceType},
@@ -420,6 +656,37 @@ int luaopen_Polycode(lua_State *L) {
 		{"ResourceManager_parseCubemaps", Polycore_ResourceManager_parseCubemaps},
 		{"ResourceManager_getResource", Polycore_ResourceManager_getResource},
 		{"ResourceManager_addShaderModule", Polycore_ResourceManager_addShaderModule},
+		{"Scene", Polycore_Scene},
+		{"Scene_addEntity", Polycore_Scene_addEntity},
+		{"Scene_removeEntity", Polycore_Scene_removeEntity},
+		{"Scene_getDefaultCamera", Polycore_Scene_getDefaultCamera},
+		{"Scene_enableLighting", Polycore_Scene_enableLighting},
+		{"Scene_enableFog", Polycore_Scene_enableFog},
+		{"Scene_setFogProperties", Polycore_Scene_setFogProperties},
+		{"Scene_Update", Polycore_Scene_Update},
+		{"Scene_setVirtual", Polycore_Scene_setVirtual},
+		{"Scene_isVirtual", Polycore_Scene_isVirtual},
+		{"Scene_isEnabled", Polycore_Scene_isEnabled},
+		{"Scene_setEnabled", Polycore_Scene_setEnabled},
+		{"Scene_getNumEntities", Polycore_Scene_getNumEntities},
+		{"Scene_getEntity", Polycore_Scene_getEntity},
+		{"Scene_getEntityAtCursor", Polycore_Scene_getEntityAtCursor},
+		{"Scene_Render", Polycore_Scene_Render},
+		{"Scene_RenderDepthOnly", Polycore_Scene_RenderDepthOnly},
+		{"Scene_readString", Polycore_Scene_readString},
+		{"Scene_loadScene", Polycore_Scene_loadScene},
+		{"Scene_generateLightmaps", Polycore_Scene_generateLightmaps},
+		{"Scene_addLight", Polycore_Scene_addLight},
+		{"Scene_getNearestLight", Polycore_Scene_getNearestLight},
+		{"Scene_writeEntityMatrix", Polycore_Scene_writeEntityMatrix},
+		{"Scene_writeString", Polycore_Scene_writeString},
+		{"Scene_saveScene", Polycore_Scene_saveScene},
+		{"Scene_getNumStaticGeometry", Polycore_Scene_getNumStaticGeometry},
+		{"Scene_getStaticGeometry", Polycore_Scene_getStaticGeometry},
+		{"Scene_loadCollisionChild", Polycore_Scene_loadCollisionChild},
+		{"Scene_getNumLights", Polycore_Scene_getNumLights},
+		{"Scene_getLight", Polycore_Scene_getLight},
+		{"Scene_getCustomEntityByType", Polycore_Scene_getCustomEntityByType},
 		{"SceneEntity", Polycore_SceneEntity},
 		{"SceneEntity_testMouseCollision", Polycore_SceneEntity_testMouseCollision},
 		{"SceneLabel", Polycore_SceneLabel},
@@ -448,6 +715,8 @@ int luaopen_Polycode(lua_State *L) {
 		{"SceneManager_UpdateVirtual", Polycore_SceneManager_UpdateVirtual},
 		{"SceneManager_removeScene", Polycore_SceneManager_removeScene},
 		{"SceneManager_registerRenderTexture", Polycore_SceneManager_registerRenderTexture},
+		{"SceneMesh_get_showVertexNormals", Polycore_SceneMesh_get_showVertexNormals},
+		{"SceneMesh_set_showVertexNormals", Polycore_SceneMesh_set_showVertexNormals},
 		{"SceneMesh", Polycore_SceneMesh},
 		{"SceneMesh_Render", Polycore_SceneMesh_Render},
 		{"SceneMesh_getLocalShaderOptions", Polycore_SceneMesh_getLocalShaderOptions},
@@ -458,6 +727,7 @@ int luaopen_Polycode(lua_State *L) {
 		{"SceneMesh_loadSkeleton", Polycore_SceneMesh_loadSkeleton},
 		{"SceneMesh_setTexture", Polycore_SceneMesh_setTexture},
 		{"SceneMesh_setMaterial", Polycore_SceneMesh_setMaterial},
+		{"SceneMesh_setMaterialByName", Polycore_SceneMesh_setMaterialByName},
 		{"SceneMesh_setMesh", Polycore_SceneMesh_setMesh},
 		{"SceneMesh_setSkeleton", Polycore_SceneMesh_setSkeleton},
 		{"SceneMesh_getSkeleton", Polycore_SceneMesh_getSkeleton},
@@ -469,6 +739,8 @@ int luaopen_Polycode(lua_State *L) {
 		{"SceneRenderTexture_getTargetTexture", Polycore_SceneRenderTexture_getTargetTexture},
 		{"SceneRenderTexture_getTargetScene", Polycore_SceneRenderTexture_getTargetScene},
 		{"SceneRenderTexture_getTargetCamera", Polycore_SceneRenderTexture_getTargetCamera},
+		{"Screen_get_enabled", Polycore_Screen_get_enabled},
+		{"Screen_set_enabled", Polycore_Screen_set_enabled},
 		{"Screen", Polycore_Screen},
 		{"Screen_addChild", Polycore_Screen_addChild},
 		{"Screen_removeChild", Polycore_Screen_removeChild},
@@ -492,6 +764,14 @@ int luaopen_Polycode(lua_State *L) {
 		{"Screen_getYCoordinateSize", Polycore_Screen_getYCoordinateSize},
 		{"Screen_getRootEntity", Polycore_Screen_getRootEntity},
 		{"ScreenCurve", Polycore_ScreenCurve},
+		{"ScreenEntity_get_hasFocus", Polycore_ScreenEntity_get_hasFocus},
+		{"ScreenEntity_get_blockMouseInput", Polycore_ScreenEntity_get_blockMouseInput},
+		{"ScreenEntity_get_zindex", Polycore_ScreenEntity_get_zindex},
+		{"ScreenEntity_get_snapToPixels", Polycore_ScreenEntity_get_snapToPixels},
+		{"ScreenEntity_set_hasFocus", Polycore_ScreenEntity_set_hasFocus},
+		{"ScreenEntity_set_blockMouseInput", Polycore_ScreenEntity_set_blockMouseInput},
+		{"ScreenEntity_set_zindex", Polycore_ScreenEntity_set_zindex},
+		{"ScreenEntity_set_snapToPixels", Polycore_ScreenEntity_set_snapToPixels},
 		{"ScreenEntity", Polycore_ScreenEntity},
 		{"ScreenEntity_setPosition", Polycore_ScreenEntity_setPosition},
 		{"ScreenEntity_setScale", Polycore_ScreenEntity_setScale},
@@ -555,6 +835,10 @@ int luaopen_Polycode(lua_State *L) {
 		{"ScreenMesh_getTexture", Polycore_ScreenMesh_getTexture},
 		{"ScreenMesh_loadTexture", Polycore_ScreenMesh_loadTexture},
 		{"ScreenMesh_setTexture", Polycore_ScreenMesh_setTexture},
+		{"ScreenShape_get_strokeEnabled", Polycore_ScreenShape_get_strokeEnabled},
+		{"ScreenShape_get_lineSmooth", Polycore_ScreenShape_get_lineSmooth},
+		{"ScreenShape_set_strokeEnabled", Polycore_ScreenShape_set_strokeEnabled},
+		{"ScreenShape_set_lineSmooth", Polycore_ScreenShape_set_lineSmooth},
 		{"ScreenShape", Polycore_ScreenShape},
 		{"ScreenShape_Render", Polycore_ScreenShape_Render},
 		{"ScreenShape_setStrokeColor", Polycore_ScreenShape_setStrokeColor},
@@ -567,6 +851,25 @@ int luaopen_Polycode(lua_State *L) {
 		{"ScreenSprite_addAnimation", Polycore_ScreenSprite_addAnimation},
 		{"ScreenSprite_playAnimation", Polycore_ScreenSprite_playAnimation},
 		{"ScreenSprite_Update", Polycore_ScreenSprite_Update},
+		{"Shader_getType", Polycore_Shader_getType},
+		{"Shader_setName", Polycore_Shader_setName},
+		{"Shader_getName", Polycore_Shader_getName},
+		{"Shader_createBinding", Polycore_Shader_createBinding},
+		{"ShaderBinding", Polycore_ShaderBinding},
+		{"ShaderBinding_clearTexture", Polycore_ShaderBinding_clearTexture},
+		{"ShaderBinding_addTexture", Polycore_ShaderBinding_addTexture},
+		{"ShaderBinding_addParam", Polycore_ShaderBinding_addParam},
+		{"ShaderBinding_addCubemap", Polycore_ShaderBinding_addCubemap},
+		{"ShaderBinding_getNumLocalParams", Polycore_ShaderBinding_getNumLocalParams},
+		{"ShaderBinding_getLocalParam", Polycore_ShaderBinding_getLocalParam},
+		{"ShaderBinding_getLocalParamByName", Polycore_ShaderBinding_getLocalParamByName},
+		{"ShaderBinding_addRenderTargetBinding", Polycore_ShaderBinding_addRenderTargetBinding},
+		{"ShaderBinding_getNumRenderTargetBindings", Polycore_ShaderBinding_getNumRenderTargetBindings},
+		{"ShaderBinding_getRenderTargetBinding", Polycore_ShaderBinding_getRenderTargetBinding},
+		{"ShaderBinding_getNumInTargetBindings", Polycore_ShaderBinding_getNumInTargetBindings},
+		{"ShaderBinding_getInTargetBinding", Polycore_ShaderBinding_getInTargetBinding},
+		{"ShaderBinding_getNumOutTargetBindings", Polycore_ShaderBinding_getNumOutTargetBindings},
+		{"ShaderBinding_getOutTargetBinding", Polycore_ShaderBinding_getOutTargetBinding},
 		{"SkeletonAnimation", Polycore_SkeletonAnimation},
 		{"SkeletonAnimation_addBoneTrack", Polycore_SkeletonAnimation_addBoneTrack},
 		{"SkeletonAnimation_getName", Polycore_SkeletonAnimation_getName},
@@ -574,6 +877,11 @@ int luaopen_Polycode(lua_State *L) {
 		{"SkeletonAnimation_Stop", Polycore_SkeletonAnimation_Stop},
 		{"SkeletonAnimation_Update", Polycore_SkeletonAnimation_Update},
 		{"SkeletonAnimation_setSpeed", Polycore_SkeletonAnimation_setSpeed},
+		{"BoneTrack", Polycore_BoneTrack},
+		{"BoneTrack_Play", Polycore_BoneTrack_Play},
+		{"BoneTrack_Stop", Polycore_BoneTrack_Stop},
+		{"BoneTrack_Update", Polycore_BoneTrack_Update},
+		{"BoneTrack_setSpeed", Polycore_BoneTrack_setSpeed},
 		{"Skeleton", Polycore_Skeleton},
 		{"Skeleton_loadSkeleton", Polycore_Skeleton_loadSkeleton},
 		{"Skeleton_playAnimation", Polycore_Skeleton_playAnimation},
@@ -587,11 +895,6 @@ int luaopen_Polycode(lua_State *L) {
 		{"Skeleton_getNumBones", Polycore_Skeleton_getNumBones},
 		{"Skeleton_getBone", Polycore_Skeleton_getBone},
 		{"Skeleton_getCurrentAnimation", Polycore_Skeleton_getCurrentAnimation},
-		{"BoneTrack", Polycore_BoneTrack},
-		{"BoneTrack_Play", Polycore_BoneTrack_Play},
-		{"BoneTrack_Stop", Polycore_BoneTrack_Stop},
-		{"BoneTrack_Update", Polycore_BoneTrack_Update},
-		{"BoneTrack_setSpeed", Polycore_BoneTrack_setSpeed},
 		{"Sound", Polycore_Sound},
 		{"Sound_Play", Polycore_Sound_Play},
 		{"Sound_Stop", Polycore_Sound_Stop},
@@ -613,7 +916,6 @@ int luaopen_Polycode(lua_State *L) {
 		{"String_find", Polycore_String_find},
 		{"String_find_last_of", Polycore_String_find_last_of},
 		{"String_toLowerCase", Polycore_String_toLowerCase},
-		{"String_split", Polycore_String_split},
 		{"String_replace", Polycore_String_replace},
 		{"String_NumberToString", Polycore_String_NumberToString},
 		{"String_c_str", Polycore_String_c_str},
@@ -622,6 +924,23 @@ int luaopen_Polycode(lua_State *L) {
 		{"String_getDataWithEncoding", Polycore_String_getDataWithEncoding},
 		{"String_setDataWithEncoding", Polycore_String_setDataWithEncoding},
 		{"String_getDataSizeWithEncoding", Polycore_String_getDataSizeWithEncoding},
+		{"Texture_get_scrollSpeedX", Polycore_Texture_get_scrollSpeedX},
+		{"Texture_get_scrollSpeedY", Polycore_Texture_get_scrollSpeedY},
+		{"Texture_get_clamp", Polycore_Texture_get_clamp},
+		{"Texture_set_scrollSpeedX", Polycore_Texture_set_scrollSpeedX},
+		{"Texture_set_scrollSpeedY", Polycore_Texture_set_scrollSpeedY},
+		{"Texture_set_clamp", Polycore_Texture_set_clamp},
+		{"Texture_setTextureData", Polycore_Texture_setTextureData},
+		{"Texture_recreateFromImageData", Polycore_Texture_recreateFromImageData},
+		{"Texture_getScrollOffsetX", Polycore_Texture_getScrollOffsetX},
+		{"Texture_getScrollOffsetY", Polycore_Texture_getScrollOffsetY},
+		{"Texture_setImageData", Polycore_Texture_setImageData},
+		{"Texture_updateScroll", Polycore_Texture_updateScroll},
+		{"Texture_setResourcePath", Polycore_Texture_setResourcePath},
+		{"Texture_getResourcePath", Polycore_Texture_getResourcePath},
+		{"Texture_getTextureData", Polycore_Texture_getTextureData},
+		{"Texture_getWidth", Polycore_Texture_getWidth},
+		{"Texture_getHeight", Polycore_Texture_getHeight},
 		{"Timer", Polycore_Timer},
 		{"Timer_Pause", Polycore_Timer_Pause},
 		{"Timer_isPaused", Polycore_Timer_isPaused},
@@ -634,6 +953,8 @@ int luaopen_Polycode(lua_State *L) {
 		{"TimerManager_removeTimer", Polycore_TimerManager_removeTimer},
 		{"TimerManager_addTimer", Polycore_TimerManager_addTimer},
 		{"TimerManager_Update", Polycore_TimerManager_Update},
+		{"Tween_get_repeat", Polycore_Tween_get_repeat},
+		{"Tween_set_repeat", Polycore_Tween_set_repeat},
 		{"Tween", Polycore_Tween},
 		{"Tween_handleEvent", Polycore_Tween_handleEvent},
 		{"Tween_interpolateTween", Polycore_Tween_interpolateTween},
@@ -650,7 +971,17 @@ int luaopen_Polycode(lua_State *L) {
 		{"TweenManager", Polycore_TweenManager},
 		{"TweenManager_addTween", Polycore_TweenManager_addTween},
 		{"TweenManager_Update", Polycore_TweenManager_Update},
+		{"Vector2_get_x", Polycore_Vector2_get_x},
+		{"Vector2_get_y", Polycore_Vector2_get_y},
+		{"Vector2_set_x", Polycore_Vector2_set_x},
+		{"Vector2_set_y", Polycore_Vector2_set_y},
 		{"Vector2", Polycore_Vector2},
+		{"Vector3_get_x", Polycore_Vector3_get_x},
+		{"Vector3_get_y", Polycore_Vector3_get_y},
+		{"Vector3_get_z", Polycore_Vector3_get_z},
+		{"Vector3_set_x", Polycore_Vector3_set_x},
+		{"Vector3_set_y", Polycore_Vector3_set_y},
+		{"Vector3_set_z", Polycore_Vector3_set_z},
 		{"Vector3", Polycore_Vector3},
 		{"Vector3_set", Polycore_Vector3_set},
 		{"Vector3_distance", Polycore_Vector3_distance},
@@ -658,6 +989,8 @@ int luaopen_Polycode(lua_State *L) {
 		{"Vector3_dot", Polycore_Vector3_dot},
 		{"Vector3_crossProduct", Polycore_Vector3_crossProduct},
 		{"Vector3_Normalize", Polycore_Vector3_Normalize},
+		{"Vertex_get_useVertexColor", Polycore_Vertex_get_useVertexColor},
+		{"Vertex_set_useVertexColor", Polycore_Vertex_set_useVertexColor},
 		{"Vertex", Polycore_Vertex},
 		{"Vertex_addBoneAssignment", Polycore_Vertex_addBoneAssignment},
 		{"Vertex_getNumBoneAssignments", Polycore_Vertex_getNumBoneAssignments},

+ 138 - 15
Bindings/Scripts/create_lua_library/create_lua_library.py

@@ -26,7 +26,7 @@ out += "#include \"lauxlib.h\"\n\n"
 
 files = os.listdir("../../../Core/Contents/Include")
 for fileName in files:
-	ignore = ["PolyCocoaCore", "PolyAGLCore", "PolyGLES1Renderer", "PolyGLRenderer", "tinyxml", "tinystr", "PolyiPhoneCore", "PolyGLES1Texture", "PolyGLTexture", "PolyGLVertexBuffer", "PolyRenderer", "PolyThreaded", "PolyTexture", "PolyShader", "PolyScene"]
+	ignore = ["PolyCocoaCore", "PolyAGLCore", "PolyGLES1Renderer", "PolyGLRenderer", "tinyxml", "tinystr", "PolyiPhoneCore", "PolyGLES1Texture", "PolyGLTexture", "PolyGLVertexBuffer", "PolyThreaded"]
 	if fileName.split(".")[1] == "h" and fileName.split(".")[0] not in ignore:
 		headerFile = "../../../Core/Contents/Include/%s" % fileName
 		print "Parsing %s" % fileName
@@ -34,7 +34,7 @@ for fileName in files:
 			f = open(headerFile)
 			contents = f.read().replace("_PolyExport", "")
 			cppHeader = CppHeaderParser.CppHeader(contents, "string")
-			ignore_classes = ["ParticleEmitter", "PolycodeShaderModule", "Core", "Object", "Shader", "Texture", "Scene", "Threaded", "Renderer", "ShaderBinding"]
+			ignore_classes = ["PolycodeShaderModule", "Object", "Threaded"]
 			for ckey in cppHeader.classes:
 				c = cppHeader.classes[ckey]
 				lout = ""
@@ -53,14 +53,104 @@ for fileName in files:
 				if ckey == "OSFileEntry":
 					print c["methods"]["public"]
 				parsed_methods = []
-				ignore_methods = ["readByte32", "readByte16", "getCustomEntitiesByType"]
+				ignore_methods = ["readByte32", "readByte16", "getCustomEntitiesByType", "Core","ParticleEmitter", "Renderer", "Shader", "Texture"]
+				lout += "\n\n"
+
+				pps = []
+				for pp in c["properties"]["public"]:
+					if pp["type"].find("static ") != -1:
+						lout += "%s = %s\n" % (pp["name"], pp["defaltValue"])
+					else:
+						if pp["type"] == "Number" or  pp["type"] == "String" or pp["type"] == "int" or pp["type"] == "bool":
+							pps.append(pp)
+						#else:
+						#	print(">>> Skipping %s[%s %s]" % (ckey, pp["type"], pp["name"]))
+
+				pidx = 0
+				if len(pps) > 0:
+					lout += "function %s:__index__(name)\n" % ckey
+					for pp in pps:
+						if pidx == 0:
+							lout += "\tif name == \"%s\" then\n" % (pp["name"])
+						else:
+							lout += "\telseif name == \"%s\" then\n" % (pp["name"])
+						lout += "\t\treturn Polycore.%s_get_%s(self.__ptr)\n" % (ckey, pp["name"])
+						
+						sout += "\t\t{\"%s_get_%s\", Polycore_%s_get_%s},\n" % (ckey, pp["name"], ckey, pp["name"])
+						out += "static int Polycore_%s_get_%s(lua_State *L) {\n" % (ckey, pp["name"])
+						out += "\tluaL_checktype(L, 1, LUA_TLIGHTUSERDATA);\n"
+						out += "\t%s *inst = (%s*)lua_topointer(L, 1);\n" % (ckey.replace("Polygon", "Polycode::Polygon"), ckey.replace("Polygon", "Polycode::Polygon"))
+
+						outfunc = "lua_pushlightuserdata"
+						retFunc = ""
+						if pp["type"] == "Number":
+							outfunc = "lua_pushnumber"
+						if pp["type"] == "String":
+							outfunc = "lua_pushstring"
+							retFunc = ".c_str()"
+						if pp["type"] == "int":
+							outfunc = "lua_pushinteger"
+						if pp["type"] == "bool":
+							outfunc = "lua_pushboolean"
+
+						out += "\t%s(L, inst->%s%s);\n" % (outfunc, pp["name"], retFunc)
+
+						out += "\treturn 1;\n"
+						out += "}\n\n"
+						pidx = pidx + 1
+
+					lout += "\tend\n"
+					lout += "end\n"
+
+				lout += "\n\n"
+				pidx = 0
+				if len(pps) > 0:
+					lout += "function %s:__set_callback(name,value)\n" % ckey
+					for pp in pps:
+						if pidx == 0:
+							lout += "\tif name == \"%s\" then\n" % (pp["name"])
+						else:
+							lout += "\telseif name == \"%s\" then\n" % (pp["name"])
+						lout += "\t\tPolycore.%s_set_%s(self.__ptr, value)\n" % (ckey, pp["name"])
+						lout += "\t\treturn true\n"
+
+						sout += "\t\t{\"%s_set_%s\", Polycore_%s_set_%s},\n" % (ckey, pp["name"], ckey, pp["name"])
+						out += "static int Polycore_%s_set_%s(lua_State *L) {\n" % (ckey, pp["name"])
+						out += "\tluaL_checktype(L, 1, LUA_TLIGHTUSERDATA);\n"
+						out += "\t%s *inst = (%s*)lua_topointer(L, 1);\n" % (ckey.replace("Polygon", "Polycode::Polygon"), ckey.replace("Polygon", "Polycode::Polygon"))
+
+						outfunc = "lua_topointer"
+						if pp["type"] == "Number":
+							outfunc = "lua_tonumber"
+						if pp["type"] == "String":
+							outfunc = "lua_tostring"
+						if pp["type"] == "int":
+							outfunc = "lua_tointeger"
+						if pp["type"] == "bool":
+							outfunc = "lua_toboolean"
+
+						out += "\t%s param = %s(L, 2);\n" % (pp["type"], outfunc)
+						out += "\tinst->%s = param;\n" % (pp["name"])
+
+						out += "\treturn 0;\n"
+						out += "}\n\n"
+						pidx = pidx + 1
+
+					lout += "\tend\n"
+					lout += "\treturn false\n"
+					lout += "end\n"
+					
+
+				lout += "\n\n"
 				for pm in c["methods"]["public"]:
 					if pm["name"] in parsed_methods or pm["name"].find("operator") > -1 or pm["name"] in ignore_methods:
 						continue 
 
-					if pm["name"] == "~"+ckey:
+					if pm["name"] == "~"+ckey or pm["rtnType"].find("<") > -1:
 						out += ""
 					else:
+						basicType = False
+						voidRet = False
 						if pm["name"] == ckey:
 							sout += "\t\t{\"%s\", Polycore_%s},\n" % (ckey, ckey)
 							out += "static int Polycore_%s(lua_State *L) {\n" % (ckey)
@@ -68,8 +158,10 @@ for fileName in files:
 						else: 
 							sout += "\t\t{\"%s_%s\", Polycore_%s_%s},\n" % (ckey, pm["name"], ckey, pm["name"])
 							out += "static int Polycore_%s_%s(lua_State *L) {\n" % (ckey, pm["name"])
-							out += "\tluaL_checktype(L, 1, LUA_TLIGHTUSERDATA);\n"
-							out += "\t%s *inst = (%s*)lua_topointer(L, 1);\n" % (ckey.replace("Polygon", "Polycode::Polygon"), ckey.replace("Polygon", "Polycode::Polygon"))
+
+							if pm["rtnType"].find("static ") == -1:
+								out += "\tluaL_checktype(L, 1, LUA_TLIGHTUSERDATA);\n"
+								out += "\t%s *inst = (%s*)lua_topointer(L, 1);\n" % (ckey.replace("Polygon", "Polycode::Polygon"), ckey.replace("Polygon", "Polycode::Polygon"))
 							idx = 2
 						paramlist = []
 						lparamlist = []
@@ -120,14 +212,19 @@ for fileName in files:
 							out += "\tlua_pushlightuserdata(L, (void*)inst);\n"
 							out += "\treturn 1;\n"
 						else:
-							call = "inst->%s(%s)" % (pm["name"], ", ".join(paramlist))
+							if pm["rtnType"].find("static ") == -1:
+								call = "inst->%s(%s)" % (pm["name"], ", ".join(paramlist))
+							else:
+								call = "%s::%s(%s)" % (ckey, pm["name"], ", ".join(paramlist))
 							if pm["rtnType"] == "void" or pm["rtnType"] == "static void" or pm["rtnType"] == "virtual void" or pm["rtnType"] == "inline void":
 								out += "\t%s;\n" % (call)
+								basicType = True
+								voidRet = True
 								out += "\treturn 0;\n"
 							else:
 								outfunc = "lua_pushlightuserdata"
-								basicType = False
 								retFunc = ""
+								basicType = False
 								if pm["rtnType"] == "Number" or  pm["rtnType"] == "inline Number":
 									outfunc = "lua_pushnumber"
 									basicType = True
@@ -155,19 +252,45 @@ for fileName in files:
 									out += "\t%s(L, retInst);\n" % (outfunc)
 								out += "\treturn 1;\n"
 						out += "}\n\n"
-							
+						
 						if pm["name"] == ckey:
-							lout += "function %s:%s(%s)\n" % (ckey, ckey, ", ".join(paramlist))
-							lout += "\tif self.__ptr == nil then\n"
-							lout += "\t\tself.__ptr = Polycore.%s(%s)\n" % (ckey, ", ".join(paramlist))
+							lout += "function %s:%s(...)\n" % (ckey, ckey)
+							lout += "\tfor k,v in pairs(arg) do\n"
+							lout += "\t\tif type(v) == \"table\" then\n"
+							lout += "\t\t\tif v.__ptr ~= nil then\n"
+							lout += "\t\t\t\targ[k] = v.__ptr\n"
+							lout += "\t\t\tend\n"
+							lout += "\t\tend\n"
+							lout += "\tend\n"
+							lout += "\tif self.__ptr == nil and arg[1] ~= \"__skip_ptr__\" then\n"
+							lout += "\t\tself.__ptr = Polycore.%s(unpack(arg))\n" % (ckey)
 							lout += "\tend\n"
 							lout += "end\n\n"
 						else:
 							lout += "function %s:%s(%s)\n" % (ckey, pm["name"], ", ".join(paramlist))
-							if len(lparamlist):
-								lout += "\treturn Polycore.%s_%s(self.__ptr, %s)\n" % (ckey, pm["name"], ", ".join(lparamlist))
+							if pm["rtnType"].find("static ") == -1:
+								if len(lparamlist):
+									lout += "\tlocal retVal = Polycore.%s_%s(self.__ptr, %s)\n" % (ckey, pm["name"], ", ".join(lparamlist))
+								else:
+									lout += "\tlocal retVal =  Polycore.%s_%s(self.__ptr)\n" % (ckey, pm["name"])
 							else:
-								lout += "\treturn Polycore.%s_%s(self.__ptr)\n" % (ckey, pm["name"])
+								if len(lparamlist):
+									lout += "\tlocal retVal = Polycore.%s_%s(%s)\n" % (ckey, pm["name"], ", ".join(lparamlist))
+								else:
+									lout += "\tlocal retVal =  Polycore.%s_%s()\n" % (ckey, pm["name"])
+
+							if not voidRet:
+								if basicType == True:
+									lout += "\treturn retVal\n"
+								else:
+									className = pm["rtnType"].replace("const", "").replace("&", "").replace("inline", "").replace("virtual", "").replace("static", "").replace("*","").replace(" ", "")
+									lout += "\tif Polycore.__ptr_lookup[retVal] ~= nil then\n"
+									lout += "\t\treturn Polycore.__ptr_lookup[retVal]\n"
+									lout += "\telse\n"
+									lout += "\t\tPolycore.__ptr_lookup[retVal] = %s(\"__skip_ptr__\")\n" % (className)
+									lout += "\t\tPolycore.__ptr_lookup[retVal].__ptr = retVal\n"
+									lout += "\t\treturn Polycore.__ptr_lookup[retVal]\n"
+									lout += "\tend\n"
 							lout += "end\n\n"
 
 					parsed_methods.append(pm["name"])

+ 0 - 8
Core/Build/Mac OS X/PolyCore.xcodeproj/project.pbxproj

@@ -37,7 +37,6 @@
 		6DFBF3D012A3184E00C43A7D /* PolyFixedShader.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DFBF32012A3184E00C43A7D /* PolyFixedShader.h */; };
 		6DFBF3D112A3184E00C43A7D /* PolyFont.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DFBF32112A3184E00C43A7D /* PolyFont.h */; };
 		6DFBF3D212A3184E00C43A7D /* PolyFontManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DFBF32212A3184E00C43A7D /* PolyFontManager.h */; };
-		6DFBF3D312A3184E00C43A7D /* PolyGenericScene.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DFBF32312A3184E00C43A7D /* PolyGenericScene.h */; };
 		6DFBF3D412A3184E00C43A7D /* PolyGLCubemap.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DFBF32412A3184E00C43A7D /* PolyGLCubemap.h */; };
 		6DFBF3D512A3184E00C43A7D /* PolyGLES1Renderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DFBF32512A3184E00C43A7D /* PolyGLES1Renderer.h */; };
 		6DFBF3D612A3184E00C43A7D /* PolyGLES1Texture.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DFBF32612A3184E00C43A7D /* PolyGLES1Texture.h */; };
@@ -121,7 +120,6 @@
 		6DFBF42612A3184E00C43A7D /* PolyFixedShader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6DFBF37712A3184E00C43A7D /* PolyFixedShader.cpp */; };
 		6DFBF42712A3184E00C43A7D /* PolyFont.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6DFBF37812A3184E00C43A7D /* PolyFont.cpp */; };
 		6DFBF42812A3184E00C43A7D /* PolyFontManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6DFBF37912A3184E00C43A7D /* PolyFontManager.cpp */; };
-		6DFBF42912A3184E00C43A7D /* PolyGenericScene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6DFBF37A12A3184E00C43A7D /* PolyGenericScene.cpp */; };
 		6DFBF42A12A3184E00C43A7D /* PolyGLCubemap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6DFBF37B12A3184E00C43A7D /* PolyGLCubemap.cpp */; };
 		6DFBF42D12A3184E00C43A7D /* PolyGLRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6DFBF37E12A3184E00C43A7D /* PolyGLRenderer.cpp */; };
 		6DFBF42E12A3184E00C43A7D /* PolyGLTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6DFBF37F12A3184E00C43A7D /* PolyGLTexture.cpp */; };
@@ -218,7 +216,6 @@
 		6DFBF32012A3184E00C43A7D /* PolyFixedShader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PolyFixedShader.h; sourceTree = "<group>"; };
 		6DFBF32112A3184E00C43A7D /* PolyFont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PolyFont.h; sourceTree = "<group>"; };
 		6DFBF32212A3184E00C43A7D /* PolyFontManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PolyFontManager.h; sourceTree = "<group>"; };
-		6DFBF32312A3184E00C43A7D /* PolyGenericScene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PolyGenericScene.h; sourceTree = "<group>"; };
 		6DFBF32412A3184E00C43A7D /* PolyGLCubemap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PolyGLCubemap.h; sourceTree = "<group>"; };
 		6DFBF32512A3184E00C43A7D /* PolyGLES1Renderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PolyGLES1Renderer.h; sourceTree = "<group>"; };
 		6DFBF32612A3184E00C43A7D /* PolyGLES1Texture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PolyGLES1Texture.h; sourceTree = "<group>"; };
@@ -303,7 +300,6 @@
 		6DFBF37712A3184E00C43A7D /* PolyFixedShader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PolyFixedShader.cpp; sourceTree = "<group>"; };
 		6DFBF37812A3184E00C43A7D /* PolyFont.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PolyFont.cpp; sourceTree = "<group>"; };
 		6DFBF37912A3184E00C43A7D /* PolyFontManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PolyFontManager.cpp; sourceTree = "<group>"; };
-		6DFBF37A12A3184E00C43A7D /* PolyGenericScene.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PolyGenericScene.cpp; sourceTree = "<group>"; };
 		6DFBF37B12A3184E00C43A7D /* PolyGLCubemap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PolyGLCubemap.cpp; sourceTree = "<group>"; };
 		6DFBF37C12A3184E00C43A7D /* PolyGLES1Renderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PolyGLES1Renderer.cpp; sourceTree = "<group>"; };
 		6DFBF37D12A3184E00C43A7D /* PolyGLES1Texture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PolyGLES1Texture.cpp; sourceTree = "<group>"; };
@@ -449,7 +445,6 @@
 				6DFBF32012A3184E00C43A7D /* PolyFixedShader.h */,
 				6DFBF32112A3184E00C43A7D /* PolyFont.h */,
 				6DFBF32212A3184E00C43A7D /* PolyFontManager.h */,
-				6DFBF32312A3184E00C43A7D /* PolyGenericScene.h */,
 				6DFBF32412A3184E00C43A7D /* PolyGLCubemap.h */,
 				6DFBF32512A3184E00C43A7D /* PolyGLES1Renderer.h */,
 				6DFBF32612A3184E00C43A7D /* PolyGLES1Texture.h */,
@@ -546,7 +541,6 @@
 				6DFBF37712A3184E00C43A7D /* PolyFixedShader.cpp */,
 				6DFBF37812A3184E00C43A7D /* PolyFont.cpp */,
 				6DFBF37912A3184E00C43A7D /* PolyFontManager.cpp */,
-				6DFBF37A12A3184E00C43A7D /* PolyGenericScene.cpp */,
 				6DFBF37B12A3184E00C43A7D /* PolyGLCubemap.cpp */,
 				6DFBF37C12A3184E00C43A7D /* PolyGLES1Renderer.cpp */,
 				6DFBF37D12A3184E00C43A7D /* PolyGLES1Texture.cpp */,
@@ -652,7 +646,6 @@
 				6DFBF3D012A3184E00C43A7D /* PolyFixedShader.h in Headers */,
 				6DFBF3D112A3184E00C43A7D /* PolyFont.h in Headers */,
 				6DFBF3D212A3184E00C43A7D /* PolyFontManager.h in Headers */,
-				6DFBF3D312A3184E00C43A7D /* PolyGenericScene.h in Headers */,
 				6DFBF3D412A3184E00C43A7D /* PolyGLCubemap.h in Headers */,
 				6DFBF3D512A3184E00C43A7D /* PolyGLES1Renderer.h in Headers */,
 				6DFBF3D612A3184E00C43A7D /* PolyGLES1Texture.h in Headers */,
@@ -793,7 +786,6 @@
 				6DFBF42612A3184E00C43A7D /* PolyFixedShader.cpp in Sources */,
 				6DFBF42712A3184E00C43A7D /* PolyFont.cpp in Sources */,
 				6DFBF42812A3184E00C43A7D /* PolyFontManager.cpp in Sources */,
-				6DFBF42912A3184E00C43A7D /* PolyGenericScene.cpp in Sources */,
 				6DFBF42A12A3184E00C43A7D /* PolyGLCubemap.cpp in Sources */,
 				6DFBF42D12A3184E00C43A7D /* PolyGLRenderer.cpp in Sources */,
 				6DFBF42E12A3184E00C43A7D /* PolyGLTexture.cpp in Sources */,

Разница между файлами не показана из-за своего большого размера
+ 239 - 531
Core/Build/Mac OS X/PolyCore.xcodeproj/project.xcworkspace/xcuserdata/ivansafrin.xcuserdatad/UserInterfaceState.xcuserstate


+ 3 - 4
Core/Contents/Include/PolyEventHandler.h

@@ -32,10 +32,6 @@ namespace Polycode {
 			EventHandler();
 			~EventHandler();
 
-#ifdef _COMPILE_LUA
-		SWIGLUA_REF onEvent;
-#endif
-
 		void secondaryHandler(Event *event);		
 		
 		/** 
@@ -44,6 +40,9 @@ namespace Polycode {
 		*/
 		virtual void handleEvent(Event *event){}
 			
+		void *secondaryHandlerData;
+		
+		
 		private:
 	
 	};

+ 7 - 0
Core/Contents/Include/PolyObject.h

@@ -136,6 +136,7 @@ namespace Polycode {
 			return entry;			
 		}		
 		
+
 		/**
 		* Adds an empty child entry with a boolean value.
 		* @param name Lookup key for the object entry.
@@ -152,6 +153,12 @@ namespace Polycode {
 			return entry;			
 		}
 		
+		ObjectEntry *addChild(ObjectEntry *entry) {
+			children.push_back(entry);
+			length = children.size();			
+			return entry;			
+		}		
+		
 		
 		static const int FLOAT_ENTRY = 0;		
 		static const int INT_ENTRY = 1;

+ 51 - 3
Core/Contents/Include/PolyScene.h

@@ -15,6 +15,7 @@
 #include "PolySceneEntity.h"
 #include "PolyCamera.h"
 #include "PolySceneLight.h"
+#include "PolySceneMesh.h"
 #include <vector>
 
 using std::vector;
@@ -23,15 +24,15 @@ namespace Polycode {
 		
 	class Camera;
 	class SceneLight;
+	class SceneMesh;
 	
 	class _PolyExport Scene : public EventDispatcher {
 	public:
 		
 		Scene();
+		Scene(bool virtualScene);
 		virtual ~Scene();
 		
-		virtual void Render() = 0;
-		virtual void RenderDepthOnly(Camera *targetCamera) = 0;
 		
 		void addEntity(SceneEntity *entity);
 		void removeEntity(SceneEntity *entity);
@@ -53,8 +54,56 @@ namespace Polycode {
 		
 		SceneEntity *getEntityAtCursor(Number x, Number y);
 		
+		void Render();
+		void RenderDepthOnly(Camera *targetCamera);
+//		void addGrid(String gridTexture);
+		
+		static String readString(OSFILE *inFile);
+		void loadScene(String fileName);
+		void generateLightmaps(Number lightMapRes, Number lightMapQuality, int numRadPasses);
+		
+		void addLight(SceneLight *light);
+		SceneLight *getNearestLight(Vector3 pos);
+		
+		void writeEntityMatrix(SceneEntity *entity, OSFILE *outFile);
+		void writeString(String str, OSFILE *outFile);
+		void saveScene(String fileName);
+		
+		int getNumStaticGeometry();
+		SceneMesh *getStaticGeometry(int index);
+		
+		virtual void loadCollisionChild(SceneEntity *entity, bool autoCollide=false, int type=0){}
+		
+		int getNumLights();
+		SceneLight *getLight(int index);
+		
+		SceneEntity *getCustomEntityByType(String type);
+		vector<SceneEntity*> getCustomEntitiesByType(String type);		
+		
+		static const unsigned int ENTITY_MESH = 0;
+		static const unsigned int ENTITY_LIGHT = 1;			
+		static const unsigned int ENTITY_CAMERA = 2;			
+		static const unsigned int ENTITY_ENTITY = 3;
+		static const unsigned int ENTITY_COLLMESH = 4;
+		
+		Color clearColor;
+		Color ambientColor;		
+		Color fogColor;				
+		
+		
 	protected:
 		
+		bool useClearColor;
+		bool virtualScene;
+		bool hasLightmaps;
+		//			LightmapPacker *packer;
+		
+		vector <SceneLight*> lights;				
+		vector <SceneMesh*> staticGeometry;
+		vector <SceneMesh*> collisionGeometry;
+		vector <SceneEntity*> customEntities;
+		
+		
 		bool isSceneVirtual;
 		bool enabled;
 		
@@ -64,7 +113,6 @@ namespace Polycode {
 		bool lightingEnabled;
 		bool fogEnabled;
 		int fogMode;
-		Color fogColor;
 		Number fogDensity;
 		Number fogStartDepth;
 		Number fogEndDepth;

+ 3 - 2
Core/Contents/Include/PolySceneMesh.h

@@ -25,7 +25,8 @@ using namespace std;
 namespace Polycode {
 
 	class Texture;
-
+	class Skeleton;
+	
 	class _PolyExport SceneMesh : public SceneEntity {
 		public:
 			SceneMesh(String fileName);
@@ -44,7 +45,7 @@ namespace Polycode {
 			void loadSkeleton(String fileName);
 			void setTexture(Texture *texture);
 			void setMaterial(Material *material);
-			void setMaterial(String materialName);
+			void setMaterialByName(String materialName);
 			void setMesh(Mesh *mesh);
 		
 			void setSkeleton(Skeleton *skeleton);

+ 1 - 1
Core/Contents/Include/PolyScreen.h

@@ -25,7 +25,7 @@ using namespace std;
 namespace Polycode {
 
 	/**
-	* 2D rendering base. The Screen is the base class for all 2D rendering in Polycode.
+	* 2D rendering base. The Screen is the base class for all 2D rendering in Polycode. Screens are
 	*/	
 	class _PolyExport Screen : public EventDispatcher {
 	public:

+ 3 - 0
Core/Contents/Include/PolySkeleton.h

@@ -22,6 +22,9 @@ using std::vector;
 
 namespace Polycode {
 	
+	class QuaternionTween;
+	class BezierPathTween;
+	
 	class _PolyExport BoneTrack {
 		public:
 			BoneTrack(Bone *bone, Number length);

+ 1 - 1
Core/Contents/Include/PolyVector3.h

@@ -23,8 +23,8 @@ namespace Polycode {
 	class _PolyExport Vector3 {
 		public:
 		
+			Vector3(Number x,Number y,Number z);		
 			Vector3();
-			Vector3(Number x,Number y,Number z);
 			virtual ~Vector3();
 
 			void set(Number x, Number y, Number z);

+ 0 - 1
Core/Contents/Include/Poly_iPhone.h

@@ -68,7 +68,6 @@
 #include "PolyCoreServices.h"
 #include "PolyCamera.h"
 #include "PolyScene.h"
-#include "PolyGenericScene.h"
 #include "PolyCollisionScene.h"
 #include "PolyCollisionSceneEntity.h"
 #include "PolySceneEntity.h"

+ 0 - 1
Core/Contents/Include/Polycode.h

@@ -69,7 +69,6 @@
 #include "PolyCoreServices.h"
 #include "PolyCamera.h"
 #include "PolyScene.h"
-#include "PolyGenericScene.h"
 #include "PolySceneEntity.h"
 #include "PolySceneMesh.h"
 #include "PolySceneLine.h"

Некоторые файлы не были показаны из-за большого количества измененных файлов