coeng
annotate src/co_xform.cc @ 8:8cce82794f90
seems to work nicely
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sun, 15 Feb 2015 05:14:20 +0200 |
parents | 2f872a179914 |
children |
rev | line source |
---|---|
nuclear@2 | 1 #include <assert.h> |
nuclear@5 | 2 #include "co_xform.h" |
nuclear@5 | 3 #include "gobj.h" |
nuclear@2 | 4 |
nuclear@5 | 5 static CoXForm reg_co_xform; |
nuclear@5 | 6 static CoPRS reg_co_prs; |
nuclear@3 | 7 |
nuclear@5 | 8 static Component *cons_xform() { return new CoXForm; } |
nuclear@5 | 9 static Component *cons_prs() { return new CoPRS; } |
nuclear@2 | 10 |
nuclear@5 | 11 CoXForm::CoXForm() |
nuclear@2 | 12 { |
nuclear@2 | 13 name = "xform"; |
nuclear@2 | 14 |
nuclear@2 | 15 register_component(name, cons_xform); |
nuclear@2 | 16 } |
nuclear@2 | 17 |
nuclear@6 | 18 // ---- class CoPRS ---- |
nuclear@6 | 19 |
nuclear@5 | 20 CoPRS::CoPRS() |
nuclear@6 | 21 : scale(1, 1, 1) |
nuclear@2 | 22 { |
nuclear@2 | 23 name = "prs"; |
nuclear@8 | 24 co_xform = 0; |
nuclear@2 | 25 |
nuclear@2 | 26 register_component(name, cons_prs); |
nuclear@2 | 27 } |
nuclear@2 | 28 |
nuclear@6 | 29 const char **CoPRS::update_before() const |
nuclear@6 | 30 { |
nuclear@6 | 31 static const char *before[] = { "xform", 0 }; |
nuclear@6 | 32 return before; |
nuclear@6 | 33 } |
nuclear@6 | 34 |
nuclear@6 | 35 void CoPRS::update(float dt) |
nuclear@2 | 36 { |
nuclear@2 | 37 if(!gobj) return; |
nuclear@2 | 38 |
nuclear@2 | 39 if(!co_xform) { |
nuclear@6 | 40 if(!(co_xform = COCAST(CoXForm, gobj->get_component("xform")))) { |
nuclear@2 | 41 assert(co_xform); |
nuclear@2 | 42 return; |
nuclear@2 | 43 } |
nuclear@2 | 44 } |
nuclear@2 | 45 |
nuclear@2 | 46 Matrix4x4 rmat = rot.get_rotation_matrix(); |
nuclear@2 | 47 Matrix4x4 tmat, smat; |
nuclear@2 | 48 |
nuclear@2 | 49 tmat.set_translation(pos); |
nuclear@2 | 50 smat.set_scaling(scale); |
nuclear@2 | 51 |
nuclear@2 | 52 co_xform->xform = rmat * tmat * smat; |
nuclear@2 | 53 } |
nuclear@8 | 54 |
nuclear@8 | 55 CoXForm *gobj_co_xform(const GObject *obj, bool nofail) |
nuclear@8 | 56 { |
nuclear@8 | 57 CoXForm *co = COCAST(CoXForm, obj->get_component("xform")); |
nuclear@8 | 58 if(co) return co; |
nuclear@8 | 59 |
nuclear@8 | 60 return nofail ? ®_co_xform : 0; |
nuclear@8 | 61 } |
nuclear@8 | 62 |
nuclear@8 | 63 CoPRS *gobj_co_prs(const GObject *obj, bool nofail) |
nuclear@8 | 64 { |
nuclear@8 | 65 CoPRS *co = COCAST(CoPRS, obj->get_component("prs")); |
nuclear@8 | 66 if(co) return co; |
nuclear@8 | 67 |
nuclear@8 | 68 return nofail ? ®_co_prs : 0; |
nuclear@8 | 69 } |