Changeset 1035


Ignore:
Timestamp:
Oct 29, 2011, 5:37:53 PM (9 years ago)
Author:
sam
Message:

core: disallow casting eg. a vec3 into a vec2. Use the xy() getter instead.

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/deushax/debugsprite.cpp

    r866 r1035  
    4949    Entity::TickGame(deltams);
    5050
    51     vec3 move = deltams * (vec3)Input::GetAxis(0);
    52     data->pos = data->pos + move * vec3(0.1f * sqrtf(2.0f), .1f, 0.1f);
     51    vec3 move = deltams * vec3(Input::GetAxis(0), 0.0f);
     52    data->pos += move * vec3(0.1f * sqrtf(2.0f), .1f, 0.1f);
    5353}
    5454
  • trunk/monsterz/interface.cpp

    r866 r1035  
    9595    WorldEntity::TickDraw(deltams);
    9696
    97     ivec3 mouse(Input::GetMousePos());
     97    ivec3 mouse(Input::GetMousePos(), 0);
    9898
    9999    if (Platform::GetMouseCount() && mouse.x >= 0 && mouse.y >= 0)
  • trunk/monsterz/title.cpp

    r1032 r1035  
    145145
    146146    data->ground = Tiler::Register(PNG_TITLE_GROUND, ivec2(384, 80), 0, 1.0f);
    147     data->ground_pos = ivec2((vec2)(bbox[1] - bbox[0]) / ivec2(2, 4))
     147    data->ground_pos = ivec2((bbox[1] - bbox[0]).xy() / ivec2(2, 4))
    148148                     - ivec2(192, 80);
    149149
    150150    data->rocks = Tiler::Register(PNG_TITLE_ROCKS, ivec2(640, 155), 0, 1.0f);
    151     data->rocks_pos = ivec2((vec2)(bbox[1] - bbox[0]) / ivec2(2, 2))
     151    data->rocks_pos = ivec2((bbox[1] - bbox[0]).xy() / ivec2(2, 2))
    152152                    - ivec2(320, 240);
    153153
     
    357357    /* The rocks */
    358358    Scene::GetDefault()->AddTile(data->rocks, 0,
    359                                  ivec3(data->rocks_pos) + ivec3(0, 0, 10), 0);
     359                                 ivec3(data->rocks_pos, 10), 0);
    360360
    361361    /* Maybe an animation? */
  • trunk/src/input.cpp

    r866 r1035  
    131131        if (data->entities[n] == top)
    132132        {
    133             data->entities[n]->mousepos = (ivec2)((ivec3)coord - top->bbox[0]);
     133            data->entities[n]->mousepos = coord - top->bbox[0].xy();
    134134            if (top != data->lastfocus)
    135135                data->entities[n]->pressed = data->buttons;
  • trunk/src/matrix.h

    r939 r1035  
    6464    }
    6565
    66 #define CAST_OP(elems, dest) \
    67     inline operator Vec##dest<T>() const \
    68     { \
    69         Vec##dest<T> ret; \
    70         for (int n = 0; n < elems && n < dest; n++) \
    71             ret[n] = (*this)[n]; \
    72         for (int n = elems; n < dest; n++) \
    73             ret[n] = 0; \
    74         return ret; \
    75     }
    76 
    7766#define OPERATORS(elems) \
    7867    inline T& operator[](int n) { return *(&x + n); } \
     
    9685    SCALAR_OP(elems, /) \
    9786    \
    98     CAST_OP(elems, 2) \
    99     CAST_OP(elems, 3) \
    100     CAST_OP(elems, 4) \
    101     \
    10287    template<typename U> \
    10388    inline operator Vec##elems<U>() const \
     
    131116    }
    132117
     118#define SWIZZLE2(e1, e2) \
     119    inline Vec2<T> e1##e2() const \
     120    { \
     121        return Vec2<T>(e1, e2); \
     122    }
     123
     124#define SWIZZLE3(e1, e2, e3) \
     125    inline Vec3<T> e1##e2##e3() const \
     126    { \
     127        return Vec3<T>(e1, e2, e3); \
     128    }
     129
     130#define SWIZZLE4(e1, e2, e3, e4) \
     131    inline Vec4<T> e1##e2##e3##e4() const \
     132    { \
     133        return Vec4<T>(e1, e2, e3, e4); \
     134    }
     135
     136#define SWIZZLE22(e1) \
     137    SWIZZLE2(e1, x); SWIZZLE2(e1, y);
     138#define SWIZZLE23(e1) \
     139    SWIZZLE2(e1, x); SWIZZLE2(e1, y); SWIZZLE2(e1, z);
     140#define SWIZZLE24(e1) \
     141    SWIZZLE2(e1, x); SWIZZLE2(e1, y); SWIZZLE2(e1, z); SWIZZLE2(e1, w);
     142
     143#define SWIZZLE32(e1, e2) \
     144    SWIZZLE3(e1, e2, x); SWIZZLE3(e1, e2, y);
     145#define SWIZZLE322(e1) \
     146    SWIZZLE32(e1, x); SWIZZLE32(e1, y);
     147#define SWIZZLE33(e1, e2) \
     148    SWIZZLE3(e1, e2, x); SWIZZLE3(e1, e2, y); SWIZZLE3(e1, e2, z);
     149#define SWIZZLE333(e1) \
     150    SWIZZLE33(e1, x); SWIZZLE33(e1, y); SWIZZLE33(e1, z);
     151#define SWIZZLE34(e1, e2) \
     152    SWIZZLE3(e1, e2, x); SWIZZLE3(e1, e2, y); \
     153    SWIZZLE3(e1, e2, z); SWIZZLE3(e1, e2, w);
     154#define SWIZZLE344(e1) \
     155    SWIZZLE34(e1, x); SWIZZLE34(e1, y); \
     156    SWIZZLE34(e1, z); SWIZZLE34(e1, w);
     157
     158#define SWIZZLE42(e1, e2, e3) \
     159    SWIZZLE4(e1, e2, e3, x); SWIZZLE4(e1, e2, e3, y);
     160#define SWIZZLE422(e1, e2) \
     161    SWIZZLE42(e1, e2, x); SWIZZLE42(e1, e2, y);
     162#define SWIZZLE4222(e1) \
     163    SWIZZLE422(e1, x); SWIZZLE422(e1, y);
     164#define SWIZZLE43(e1, e2, e3) \
     165    SWIZZLE4(e1, e2, e3, x); SWIZZLE4(e1, e2, e3, y); SWIZZLE4(e1, e2, e3, z);
     166#define SWIZZLE433(e1, e2) \
     167    SWIZZLE43(e1, e2, x); SWIZZLE43(e1, e2, y); SWIZZLE43(e1, e2, z);
     168#define SWIZZLE4333(e1) \
     169    SWIZZLE433(e1, x); SWIZZLE433(e1, y); SWIZZLE433(e1, z);
     170#define SWIZZLE44(e1, e2, e3) \
     171    SWIZZLE4(e1, e2, e3, x); SWIZZLE4(e1, e2, e3, y); \
     172    SWIZZLE4(e1, e2, e3, z); SWIZZLE4(e1, e2, e3, w);
     173#define SWIZZLE444(e1, e2) \
     174    SWIZZLE44(e1, e2, x); SWIZZLE44(e1, e2, y); \
     175    SWIZZLE44(e1, e2, z); SWIZZLE44(e1, e2, w);
     176#define SWIZZLE4444(e1) \
     177    SWIZZLE444(e1, x); SWIZZLE444(e1, y); SWIZZLE444(e1, z); SWIZZLE444(e1, w);
     178
    133179template <typename T> struct Vec2;
    134180template <typename T> struct Vec3;
    135181template <typename T> struct Vec4;
     182
     183/*
     184 * 2-element vectors
     185 */
    136186
    137187template <typename T> struct Vec2
     
    143193    OPERATORS(2)
    144194
     195    SWIZZLE22(x); SWIZZLE22(y);
     196    SWIZZLE322(x); SWIZZLE322(y);
     197    SWIZZLE4222(x); SWIZZLE4222(y);
     198
    145199#if !defined __ANDROID__
    146200    template<typename U>
     
    154208typedef Vec2<float> vec2;
    155209typedef Vec2<int> ivec2;
     210
     211/*
     212 * 3-element vectors
     213 */
    156214
    157215template <typename T> struct Vec3
     
    160218    inline Vec3(T val) { x = y = z = val; }
    161219    inline Vec3(T _x, T _y, T _z) { x = _x; y = _y; z = _z; }
     220    inline Vec3(Vec2<T> _xy, T _z) { x = _xy.x; y = _xy.y; z = _z; }
     221    inline Vec3(T _x, Vec2<T> _yz) { x = _x; y = _yz.x; z = _yz.y; }
    162222
    163223    OPERATORS(3)
     224
     225    SWIZZLE23(x); SWIZZLE23(y); SWIZZLE23(z);
     226    SWIZZLE333(x); SWIZZLE333(y); SWIZZLE333(z);
     227    SWIZZLE4333(x); SWIZZLE4333(y); SWIZZLE4333(z);
    164228
    165229#if !defined __ANDROID__
     
    175239typedef Vec3<float> vec3;
    176240typedef Vec3<int> ivec3;
     241
     242/*
     243 * 4-element vectors
     244 */
    177245
    178246template <typename T> struct Vec4
     
    181249    inline Vec4(T val) { x = y = z = w = val; }
    182250    inline Vec4(T _x, T _y, T _z, T _w) { x = _x; y = _y; z = _z; w = _w; }
     251    inline Vec4(Vec2<T> _xy, T _z, T _w) { x = _xy.x; y = _xy.y; z = _z; w = _w; }
     252    inline Vec4(T _x, Vec2<T> _yz, T _w) { x = _x; y = _yz.x; z = _yz.y; w = _w; }
     253    inline Vec4(T _x, T _y, Vec2<T> _zw) { x = _x; y = _y; z = _zw.x; w = _zw.y; }
     254    inline Vec4(Vec2<T> _xy, Vec2<T> _zw) { x = _xy.x; y = _xy.y; z = _zw.x; w = _zw.y; }
     255    inline Vec4(Vec3<T> _xyz, T _w) { x = _xyz.x; y = _xyz.y; z = _xyz.z; w = _w; }
     256    inline Vec4(T _x, Vec3<T> _yzw) { x = _x; y = _yzw.x; z = _yzw.y; w = _yzw.z; }
    183257
    184258    OPERATORS(4)
     259
     260    SWIZZLE24(x); SWIZZLE24(y); SWIZZLE24(z); SWIZZLE24(w);
     261    SWIZZLE344(x); SWIZZLE344(y); SWIZZLE344(z); SWIZZLE344(w);
     262    SWIZZLE4444(x); SWIZZLE4444(y); SWIZZLE4444(z); SWIZZLE4444(w);
    185263
    186264#if !defined __ANDROID__
     
    222300GLOBALS(3)
    223301GLOBALS(4)
     302
     303/*
     304 * 4×4-element matrices
     305 */
    224306
    225307template <typename T> struct Mat4
  • trunk/test/unit/matrix.cpp

    r979 r1035  
    121121        vec2 a1(1.0f, 3.0f);
    122122
    123         vec3 b(a1);
    124         vec2 a2(b);
     123        vec3 b(a1, 0.0f);
     124        vec2 a2(b.xy());
    125125        LOLUNIT_ASSERT_EQUAL(b.x, a1.x);
    126126        LOLUNIT_ASSERT_EQUAL(b.y, a1.y);
     
    128128        LOLUNIT_ASSERT_EQUAL(a2, a1);
    129129
    130         vec4 c(a1);
    131         vec2 a3(c);
     130        vec4 c(a1, 0.0f, 0.0f);
     131        vec2 a3(c.xy());
    132132        LOLUNIT_ASSERT_EQUAL(c.x, a1.x);
    133133        LOLUNIT_ASSERT_EQUAL(c.y, a1.y);
Note: See TracChangeset for help on using the changeset viewer.