coeng

diff 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
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/src/co_collider.cc	Sun Feb 15 05:14:20 2015 +0200
     1.3 @@ -0,0 +1,53 @@
     1.4 +#include "co_collider.h"
     1.5 +#include "co_xform.h"
     1.6 +#include "gobj.h"
     1.7 +
     1.8 +static CoCollider reg_co_col;
     1.9 +
    1.10 +static Component *cons_collider() { return new CoCollider; }
    1.11 +
    1.12 +CoCollider::CoCollider()
    1.13 +{
    1.14 +	name = "collider";
    1.15 +	shape = 0;
    1.16 +
    1.17 +	register_component(name, cons_collider);
    1.18 +}
    1.19 +
    1.20 +CoCollider::~CoCollider()
    1.21 +{
    1.22 +	delete shape;
    1.23 +}
    1.24 +
    1.25 +const char **CoCollider::update_before() const
    1.26 +{
    1.27 +	static const char *before[] = { "rigid", 0 };
    1.28 +	return before;
    1.29 +}
    1.30 +
    1.31 +void CoCollider::update(float dt)
    1.32 +{
    1.33 +	// set the shape transform according to the last value of the CoXForm
    1.34 +	if(!shape) return;
    1.35 +
    1.36 +	CoXForm *co_xform = COCAST(CoXForm, gobj->get_component("xform"));
    1.37 +	if(co_xform) {
    1.38 +		shape->set_transform(co_xform->xform);
    1.39 +	}
    1.40 +}
    1.41 +
    1.42 +bool CoCollider::collide(const CoCollider *col2, HitPoint *hit) const
    1.43 +{
    1.44 +	if(!shape || !col2->shape) {
    1.45 +		return false;
    1.46 +	}
    1.47 +	return shape->collide(col2->shape, hit);
    1.48 +}
    1.49 +
    1.50 +CoCollider *gobj_co_collider(const GObject *obj, bool nofail)
    1.51 +{
    1.52 +	CoCollider *co = COCAST(CoCollider, obj->get_component("collider"));
    1.53 +	if(co) return co;
    1.54 +
    1.55 +	return nofail ? &reg_co_col : 0;
    1.56 +}