Ignore:
Timestamp:
08/19/13 07:42:00 (12 years ago)
Author:
epyon
Message:
  • lua - concept change - all functionality in nv::lua except raw
  • lua - all modules made header-independent from raw (except obviously raw)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/lua/lua_area.cc

    r206 r207  
    1111#include "nv/random.hh"
    1212
    13 static const char* NLUA_AREA_METATABLE = "area";
    14 
    15 bool nlua_is_area( lua_State* L, int index )
    16 {
    17         return luaL_testudata( L, index, NLUA_AREA_METATABLE ) != 0;
    18 }
    19 
    20 nv::rectangle nlua_to_area( lua_State* L, int index )
    21 {
    22         return *(nv::rectangle*)luaL_checkudata( L, index, NLUA_AREA_METATABLE );
    23 }
    24 
    25 nv::rectangle* nlua_to_parea( lua_State* L, int index )
    26 {
    27         return (nv::rectangle*)luaL_checkudata( L, index, NLUA_AREA_METATABLE );
    28 }
    29 
    30 void nlua_push_area( lua_State* L, const nv::rectangle& v )
    31 {
    32         new (lua_newuserdata(L, sizeof(nv::rectangle))) nv::rectangle(v);
    33         luaL_setmetatable( L, NLUA_AREA_METATABLE );
    34 }
     13const char* nv::lua::detail::AREA_METATABLE = "area";
     14
     15using nv::lua::detail::is_coord;
     16using nv::lua::detail::to_coord;
     17using nv::lua::detail::to_pcoord;
     18using nv::lua::detail::push_coord;
     19
     20using nv::lua::detail::is_area;
     21using nv::lua::detail::to_area;
     22using nv::lua::detail::to_parea;
     23using nv::lua::detail::push_area;
    3524
    3625static void nlua_area_construct( lua_State* L, int sidx )
    3726{
    38         if ( nlua_is_coord( L, sidx ) )
    39         {
    40                 if ( nlua_is_coord( L, sidx+1 ) )
     27        if ( is_coord( L, sidx ) )
     28        {
     29                if ( is_coord( L, sidx+1 ) )
    4130                {
    42                         nv::rectangle a( nlua_to_coord( L, sidx ), nlua_to_coord( L, sidx+1 ) );
    43                         nlua_push_area( L, a );
     31                        nv::rectangle a( to_coord( L, sidx ), to_coord( L, sidx+1 ) );
     32                        push_area( L, a );
    4433                        return;
    4534                }
     
    5140                nv::ivec2( lua_tointeger( L, sidx+2 ), lua_tointeger( L, sidx+3 ) )
    5241                );
    53         nlua_push_area( L, a );
     42        push_area( L, a );
    5443}
    5544
     
    6958static int nlua_area_eq( lua_State* L )
    7059{
    71         lua_pushboolean( L, nlua_to_area( L, 1 ) == nlua_to_area( L, 2 ) );
     60        lua_pushboolean( L, to_area( L, 1 ) == to_area( L, 2 ) );
    7261        return 1;
    7362}
     
    7564static int nlua_area_get( lua_State* L )
    7665{
    77         nv::rectangle r( nlua_to_area( L, 1 ) );
    78         nlua_push_coord( L, r.ul );
    79         nlua_push_coord( L, r.lr );
     66        nv::rectangle r( to_area( L, 1 ) );
     67        push_coord( L, r.ul );
     68        push_coord( L, r.lr );
    8069        return 2;
    8170}
     
    8372static int nlua_area_clone( lua_State* L )
    8473{
    85         nlua_push_area( L, *nlua_to_parea( L, 1 ) );
     74        push_area( L, *to_parea( L, 1 ) );
    8675        return 1;
    8776}
     
    8978static int nlua_area_index( lua_State* L )
    9079{
    91         nv::rectangle* a = nlua_to_parea( L, 1 );
     80        nv::rectangle* a = to_parea( L, 1 );
    9281        std::size_t l;
    9382        const char* index = lua_tolstring( L, 2, &l );
    9483        if ( l == 1 && index[0] == 'a' )
    9584        {
    96                 nlua_push_coord( L, a->ul );
     85                push_coord( L, a->ul );
    9786        }
    9887        else if ( l == 1 && index[0] == 'b' )
    9988        {
    100                 nlua_push_coord( L, a->lr );
     89                push_coord( L, a->lr );
    10190        }
    10291        else
     
    111100static int nlua_area_newindex( lua_State* L )
    112101{
    113         nv::rectangle* a = nlua_to_parea( L, 1 );
     102        nv::rectangle* a = to_parea( L, 1 );
    114103        std::size_t l;
    115104        const char* index = lua_tolstring( L, 2, &l );
    116         nv::ivec2 value( nlua_to_coord( L, 3 ) );
     105        nv::ivec2 value( to_coord( L, 3 ) );
    117106        if ( l == 1 && index[0] == 'a' )
    118107        {
     
    128117static int lua_area_coords_closure( lua_State* L )
    129118{
    130         nv::rectangle* a( nlua_to_parea( L, lua_upvalueindex(1) ) );
    131         nv::ivec2*     c( nlua_to_pcoord( L, lua_upvalueindex(2) ) );
     119        nv::rectangle* a( to_parea( L, lua_upvalueindex(1) ) );
     120        nv::ivec2*     c( to_pcoord( L, lua_upvalueindex(2) ) );
    132121
    133122        c->x++;
     
    144133        }
    145134
    146         nlua_push_coord( L, *c );
     135        push_coord( L, *c );
    147136        return 1;
    148137}
     
    150139static int nlua_area_coords( lua_State* L )
    151140{
    152         nv::rectangle* a( nlua_to_parea( L, 1 ) );
     141        nv::rectangle* a( to_parea( L, 1 ) );
    153142        nv::ivec2      c( a->ul );
    154143        c.x--;
    155         nlua_push_coord( L, c );
     144        push_coord( L, c );
    156145        lua_pushcclosure( L, lua_area_coords_closure, 2 );
    157146        return 1;
     
    160149static int nlua_area_edges_closure( lua_State* L )
    161150{
    162         nv::rectangle* a( nlua_to_parea( L, lua_upvalueindex(1) ) );
    163         nv::ivec2*     c( nlua_to_pcoord( L, lua_upvalueindex(2) ) );
     151        nv::rectangle* a( to_parea( L, lua_upvalueindex(1) ) );
     152        nv::ivec2*     c( to_pcoord( L, lua_upvalueindex(2) ) );
    164153
    165154        c->x++;
     
    178167
    179168
    180         nlua_push_coord( L, *c );
     169        push_coord( L, *c );
    181170        return 1;
    182171}
     
    184173static int nlua_area_edges( lua_State* L )
    185174{
    186         nv::rectangle*   a( nlua_to_parea( L, 1 ) );
     175        nv::rectangle*   a( to_parea( L, 1 ) );
    187176        nv::ivec2 c( a->ul );
    188177        c.x--;
    189         nlua_push_coord( L, c );
     178        push_coord( L, c );
    190179        lua_pushcclosure( L, nlua_area_edges_closure, 2 );
    191180        return 1;
     
    203192static int nlua_area_corners( lua_State* L )
    204193{
    205         nv::rectangle* a = nlua_to_parea( L, 1 );
     194        nv::rectangle* a = to_parea( L, 1 );
    206195
    207196        lua_createtable(L, 4, 0);
    208         nlua_push_coord( L, a->ul );
     197        push_coord( L, a->ul );
    209198        lua_rawseti( L, -2, 1 );
    210         nlua_push_coord( L, a->ur() );
     199        push_coord( L, a->ur() );
    211200        lua_rawseti( L, -2, 2 );
    212         nlua_push_coord( L, a->ll() );
     201        push_coord( L, a->ll() );
    213202        lua_rawseti( L, -2, 3 );
    214         nlua_push_coord( L, a->lr );
     203        push_coord( L, a->lr );
    215204        lua_rawseti( L, -2, 4 );
    216205
     
    222211static int nlua_area_shrink( lua_State* L )
    223212{
    224         nv::rectangle* a = nlua_to_parea( L, 1 );
     213        nv::rectangle* a = to_parea( L, 1 );
    225214        a->shrink( static_cast< int >( lua_tointeger( L, 2 ) ) );
    226215        return 0;
     
    229218static int nlua_area_shrinked( lua_State* L )
    230219{
    231         nv::rectangle* a = nlua_to_parea( L, 1 );
    232         nlua_push_area( L, a->shrinked( static_cast< int >( lua_tointeger( L, 2 ) ) ) );
     220        nv::rectangle* a = to_parea( L, 1 );
     221        push_area( L, a->shrinked( static_cast< int >( lua_tointeger( L, 2 ) ) ) );
    233222        return 1;
    234223}
     
    236225static int nlua_area_expand( lua_State* L )
    237226{
    238         nv::rectangle* a = nlua_to_parea( L, 1 );
     227        nv::rectangle* a = to_parea( L, 1 );
    239228        a->expand( static_cast< int >( lua_tointeger( L, 2 ) ) );
    240229        return 0;
     
    243232static int nlua_area_expanded( lua_State* L )
    244233{
    245         nv::rectangle* a = nlua_to_parea( L, 1 );
    246         nlua_push_area( L, a->expanded( static_cast< int >( lua_tointeger( L, 2 ) ) ) );
     234        nv::rectangle* a = to_parea( L, 1 );
     235        push_area( L, a->expanded( static_cast< int >( lua_tointeger( L, 2 ) ) ) );
    247236        return 1;
    248237}
     
    250239static int nlua_area_clamp( lua_State* L )
    251240{
    252         nv::rectangle* a1 = nlua_to_parea( L, 1 );
    253         nv::rectangle* a2 = nlua_to_parea( L, 2 );
     241        nv::rectangle* a1 = to_parea( L, 1 );
     242        nv::rectangle* a2 = to_parea( L, 2 );
    254243        a1->clamp_to( *a2 );
    255244        return 0;
     
    258247static int nlua_area_clamped( lua_State* L )
    259248{
    260         nv::rectangle  a1 = nlua_to_area( L, 1 );
    261         nv::rectangle* a2 = nlua_to_parea( L, 2 );
     249        nv::rectangle  a1 = to_area( L, 1 );
     250        nv::rectangle* a2 = to_parea( L, 2 );
    262251        a1.clamp_to( *a2 );
    263         nlua_push_area( L, a1 );
     252        push_area( L, a1 );
    264253        return 1;
    265254}
     
    267256static int nlua_area_clamp_coord( lua_State* L )
    268257{
    269         nv::rectangle* a = nlua_to_parea( L, 1 );
    270         nv::ivec2*     c = nlua_to_pcoord( L, 2 );
     258        nv::rectangle* a = to_parea( L, 1 );
     259        nv::ivec2*     c = to_pcoord( L, 2 );
    271260        *c = glm::clamp( *c, a->ul, a->lr );
    272261        return 0;
     
    275264static int nlua_area_clamped_coord( lua_State* L )
    276265{
    277         nv::rectangle* a = nlua_to_parea( L, 1 );
    278         nv::ivec2*     c = nlua_to_pcoord( L, 2 );
    279         nlua_push_coord( L, glm::clamp( *c, a->ul, a->lr ) );
     266        nv::rectangle* a = to_parea( L, 1 );
     267        nv::ivec2*     c = to_pcoord( L, 2 );
     268        push_coord( L, glm::clamp( *c, a->ul, a->lr ) );
    280269        return 0;
    281270}
     
    283272static int nlua_area_fix( lua_State* L )
    284273{
    285         nv::rectangle* a = nlua_to_parea( L, 1 );
     274        nv::rectangle* a = to_parea( L, 1 );
    286275        if ( a->ul.x > a->lr.x ) a->ul.x = a->lr.x;
    287276        if ( a->ul.y > a->lr.y ) a->ul.y = a->lr.y;
     
    291280static int nlua_area_proper( lua_State* L )
    292281{
    293         nv::rectangle* a = nlua_to_parea( L, 1 );
     282        nv::rectangle* a = to_parea( L, 1 );
    294283        lua_pushboolean( L, a->ul.x <= a->lr.x && a->ul.y <= a->lr.y );
    295284        return 1;
     
    298287static int nlua_area_dim( lua_State* L )
    299288{
    300         nv::rectangle* a = nlua_to_parea( L, 1 );
    301         nlua_push_coord( L, a->ul - a->lr + nv::ivec2(1,1) );
     289        nv::rectangle* a = to_parea( L, 1 );
     290        push_coord( L, a->ul - a->lr + nv::ivec2(1,1) );
    302291        return 1;
    303292}
     
    305294static int nlua_area_size( lua_State* L )
    306295{
    307         nv::rectangle* a = nlua_to_parea( L, 1 );
     296        nv::rectangle* a = to_parea( L, 1 );
    308297        lua_pushinteger( L, a->get_enclosed_area() );
    309298        return 1;
     
    312301static int nlua_area_contains( lua_State* L )
    313302{
    314         lua_pushboolean( L, nlua_to_parea( L, 1 )->contains( nlua_to_coord( L, 2 ) ) );
     303        lua_pushboolean( L, to_parea( L, 1 )->contains( to_coord( L, 2 ) ) );
    315304        return 1;
    316305}
     
    318307static int nlua_area_is_edge( lua_State* L )
    319308{
    320         nv::rectangle a = nlua_to_area( L, 1 );
    321         nv::ivec2     c = nlua_to_coord( L, 2 );
     309        nv::rectangle a = to_area( L, 1 );
     310        nv::ivec2     c = to_coord( L, 2 );
    322311        lua_pushboolean( L, a.contains( c ) && ( c.x == a.ul.x || c.x == a.lr.x || c.y == a.ul.y || c.y == a.lr.y ) );
    323312        return 1;
     
    326315static int nlua_area_around( lua_State* L )
    327316{
    328         nv::ivec2 c = nlua_to_coord( L, 1 );
     317        nv::ivec2 c = to_coord( L, 1 );
    329318        int amount = static_cast< int >( lua_tointeger( L, 1 ) );
    330319        nv::ivec2 shift( amount, amount );
    331         nlua_push_area( L, nv::rectangle( c - shift, c + shift ) );
     320        push_area( L, nv::rectangle( c - shift, c + shift ) );
    332321        return 1;
    333322}
     
    335324static int nlua_area_tostring( lua_State* L )
    336325{
    337         nv::rectangle a = nlua_to_area( L, 1 );
     326        nv::rectangle a = to_area( L, 1 );
    338327        std::string s = "(";
    339328        s += nv::to_string(a.ul.x);
     
    351340static int nlua_area_random_edge_coord( lua_State* L )
    352341{
    353         nv::rectangle area = nlua_to_area( L, 1 );
     342        nv::rectangle area = to_area( L, 1 );
    354343        nv::ivec2 a   = area.ul;
    355344        nv::ivec2 b   = area.lr;
     
    368357                result = ( roll < ys ) ? nv::ivec2( a.x, a.y + roll + 1 ) : nv::ivec2( b.x, a.y + roll - ys + 1);
    369358        }
    370         nlua_push_coord( L, result );
     359        push_coord( L, result );
    371360        return 1;
    372361}
     
    374363static int nlua_area_random_inner_edge_coord( lua_State* L )
    375364{
    376         nv::rectangle area = nlua_to_area( L, 1 );
     365        nv::rectangle area = to_area( L, 1 );
    377366        nv::ivec2 a   = area.ul;
    378367        nv::ivec2 b   = area.lr;
     
    391380                result = ( roll < ys ) ? nv::ivec2( a.x, a.y + roll + 1 ) : nv::ivec2( b.x, a.y + roll - ys + 1);
    392381        }
    393         nlua_push_coord( L, result );
     382        push_coord( L, result );
    394383        return 1;
    395384}
     
    397386static int nlua_area_random_coord( lua_State* L )
    398387{
    399         nv::rectangle area = nlua_to_area( L, 1 );
    400         nlua_push_coord( L, nv::random::get().range( area.ul, area.lr ) );
     388        nv::rectangle area = to_area( L, 1 );
     389        push_coord( L, nv::random::get().range( area.ul, area.lr ) );
    401390        return 1;
    402391}
     
    404393static int nlua_area_random_subarea( lua_State* L )
    405394{
    406         nv::rectangle area  = nlua_to_area( L, 1 );
    407         nv::ivec2     dim   = nlua_to_coord( L, 2 );
     395        nv::rectangle area  = to_area( L, 1 );
     396        nv::ivec2     dim   = to_coord( L, 2 );
    408397        nv::ivec2     start = nv::random::get().range( area.ul, area.lr - dim );
    409         nlua_push_area( L, nv::rectangle( start, start + dim ) );
     398        push_area( L, nv::rectangle( start, start + dim ) );
    410399        return 1;
    411400}
     
    466455        };
    467456
    468         luaL_newmetatable( L, NLUA_AREA_METATABLE );
     457        luaL_newmetatable( L, nv::lua::detail::AREA_METATABLE );
    469458        nlua_register( L, nlua_area_m, -1 );
    470459        lua_createtable( L, 0, 0 );
     
    481470}
    482471
    483 void nlua_register_area( lua_State* L )
     472void nv::lua::register_area( lua_State* L )
    484473{
    485474        int stack = lua_gettop( L );
Note: See TracChangeset for help on using the changeset viewer.