coeng

annotate src/co_collider.cc @ 8:8cce82794f90

seems to work nicely
author John Tsiombikas <nuclear@member.fsf.org>
date Sun, 15 Feb 2015 05:14:20 +0200
parents
children
rev   line source
nuclear@8 1 #include "co_collider.h"
nuclear@8 2 #include "co_xform.h"
nuclear@8 3 #include "gobj.h"
nuclear@8 4
nuclear@8 5 static CoCollider reg_co_col;
nuclear@8 6
nuclear@8 7 static Component *cons_collider() { return new CoCollider; }
nuclear@8 8
nuclear@8 9 CoCollider::CoCollider()
nuclear@8 10 {
nuclear@8 11 name = "collider";
nuclear@8 12 shape = 0;
nuclear@8 13
nuclear@8 14 register_component(name, cons_collider);
nuclear@8 15 }
nuclear@8 16
nuclear@8 17 CoCollider::~CoCollider()
nuclear@8 18 {
nuclear@8 19 delete shape;
nuclear@8 20 }
nuclear@8 21
nuclear@8 22 const char **CoCollider::update_before() const
nuclear@8 23 {
nuclear@8 24 static const char *before[] = { "rigid", 0 };
nuclear@8 25 return before;
nuclear@8 26 }
nuclear@8 27
nuclear@8 28 void CoCollider::update(float dt)
nuclear@8 29 {
nuclear@8 30 // set the shape transform according to the last value of the CoXForm
nuclear@8 31 if(!shape) return;
nuclear@8 32
nuclear@8 33 CoXForm *co_xform = COCAST(CoXForm, gobj->get_component("xform"));
nuclear@8 34 if(co_xform) {
nuclear@8 35 shape->set_transform(co_xform->xform);
nuclear@8 36 }
nuclear@8 37 }
nuclear@8 38
nuclear@8 39 bool CoCollider::collide(const CoCollider *col2, HitPoint *hit) const
nuclear@8 40 {
nuclear@8 41 if(!shape || !col2->shape) {
nuclear@8 42 return false;
nuclear@8 43 }
nuclear@8 44 return shape->collide(col2->shape, hit);
nuclear@8 45 }
nuclear@8 46
nuclear@8 47 CoCollider *gobj_co_collider(const GObject *obj, bool nofail)
nuclear@8 48 {
nuclear@8 49 CoCollider *co = COCAST(CoCollider, obj->get_component("collider"));
nuclear@8 50 if(co) return co;
nuclear@8 51
nuclear@8 52 return nofail ? &reg_co_col : 0;
nuclear@8 53 }