diff options
Diffstat (limited to 'honey/ode.lua')
-rw-r--r-- | honey/ode.lua | 55 |
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 |