summaryrefslogtreecommitdiff
path: root/honey/ode.lua
diff options
context:
space:
mode:
Diffstat (limited to 'honey/ode.lua')
-rw-r--r--honey/ode.lua55
1 files changed, 55 insertions, 0 deletions
diff --git a/honey/ode.lua b/honey/ode.lua
new file mode 100644
index 0000000..4cd2e54
--- /dev/null
+++ b/honey/ode.lua
@@ -0,0 +1,55 @@
+local module = {}
+setmetatable(module, {__index=_G}
+setfenv(1, module)
+
+
+--===== collision =====--
+
+Geom = {}
+Geom.__index = Geom
+
+
+function Geom.new(_, type, params)
+ local self = {}
+ self.type = type
+ self.params = params
+ setmetatable(self, Geom)
+ return self
+end
+setmetatable(Geom, {__call=Geom.new})
+
+
+function Geom.renew(geom)
+ return ode.GeomGetData(geom)
+end
+
+
+local function instantiateSphere(space, params)
+ local geom = ode.CreateSphere(space, params.radius)
+ return geom
+end
+
+
+local function instantiatePlane(space, params)
+ local geom = ode.CreatePlane(space, params.a, params.b, params.c, params.d)
+ return geom
+end
+
+
+function Geom.instantiate(self, space)
+ if self.type == "sphere" then
+ self.geom = instantiateSphere(space, self.params)
+ elseif self.type == "plane" then
+ self.geom = instantiatePlane(space, self.params)
+ else
+ error(string.format("bad geom type: %s", self.type))
+ end
+ ode.GeomSetData(self.geom, self)
+ return self
+end
+
+
+function Geom.setBody(self, body)
+ ode.GeomSetBody(self.geom, body.body)
+ return self
+end