Ignore:
Timestamp:
Dec 13, 2002, 8:27:16 PM (18 years ago)
Author:
Sam Hocevar
Message:
  • moved nuke from explosions to weapons.
  • used a cool Bresenham algorithm to draw the nuke circles.
  • nuke collides with aliens.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • ttyvaders/trunk/collide.c

    r12 r16  
    88    int i;
    99
    10     for( i = 0; i < SHOTS; i++ )
     10    for( i = 0; i < WEAPONS; i++ )
    1111    {
    1212        if( wp->y[i] >= 0 )
     
    6060    int i, j;
    6161
    62     for( i = 0; i < SHOTS; i++ )
     62    for( i = 0; i < WEAPONS; i++ )
    6363    {
    6464        if( wp->y[i] >= 0 )
    6565        {
    6666            int ok = 0;
     67            int r;
    6768
    68             for( j = 0; j < ALIENS; j++ )
     69            switch( wp->type[i] )
    6970            {
    70                 if( wp->x[i] >= al->x[j]
    71                      && wp->x[i] <= al->x[j] + 4
    72                      && wp->y[i] >= al->y[j]
    73                      && wp->y[i] <= al->y[j] + 2 )
     71            case 2:
     72                /* Big nuke */
     73                r = (34 - wp->n[i]) * (34 - wp->n[i]) / 10;
     74
     75                for( j = 0; j < ALIENS; j++ )
    7476                {
    75                     al->life[j]--;
    76                     if( al->life[j] == 0 )
     77                    if( al->x[j] < 0 )
    7778                    {
     79                        continue;
     80                    }
     81
     82                    if( (al->x[j] - wp->x[i]) * (al->x[j] - wp->x[i])
     83                          + 4 * (al->y[j] - wp->y[i]) * (al->y[j] - wp->y[i])
     84                        <= r * r )
     85                    {
     86                        /* Kill alien, not nuke */
     87                        add_explosion( g, ex, al->x[j], al->y[j], 0, 0, 1 );
    7888                        al->x[j] = -1;
    7989                        al->y[j] = -1;
    80                         add_explosion( g, ex, wp->x[i], wp->y[i], 0, 0, 1 );
    8190                    }
    82                     ok = 1;
    8391                }
    84                 else if( wp->x[i] >= al->x[j]
    85                           && wp->x[i] <= al->x[j] + 4
    86                           && wp->y[i]+1 >= al->y[j]
    87                           && wp->y[i]+1 <= al->y[j] + 2 )
     92                break;
     93
     94            case 1:
     95            default:
     96                for( j = 0; j < ALIENS; j++ )
    8897                {
    89                     al->life[j]--;
    90                     if( al->life[j] == 0 )
     98                    if( wp->x[i] >= al->x[j]
     99                         && wp->x[i] <= al->x[j] + 4
     100                         && wp->y[i] >= al->y[j]
     101                         && wp->y[i] <= al->y[j] + 2 )
    91102                    {
    92                         al->x[j] = -1;
    93                         al->y[j] = -1;
    94                         add_explosion( g, ex, wp->x[i], wp->y[i]+1, 0, 0, 1 );
     103                        al->life[j]--;
     104                        if( al->life[j] == 0 )
     105                        {
     106                            al->x[j] = -1;
     107                            al->y[j] = -1;
     108                            add_explosion( g, ex, wp->x[i], wp->y[i], 0, 0, 1 );
     109                        }
     110                        ok = 1;
    95111                    }
    96                     ok = 1;
     112                    else if( wp->x[i] >= al->x[j]
     113                              && wp->x[i] <= al->x[j] + 4
     114                              && wp->y[i]+1 >= al->y[j]
     115                              && wp->y[i]+1 <= al->y[j] + 2 )
     116                    {
     117                        al->life[j]--;
     118                        if( al->life[j] == 0 )
     119                        {
     120                            al->x[j] = -1;
     121                            al->y[j] = -1;
     122                            add_explosion( g, ex, wp->x[i], wp->y[i]+1, 0, 0, 1 );
     123                        }
     124                        ok = 1;
     125                    }
    97126                }
    98             }
    99127
    100             if( ok )
    101             {
    102                 wp->y[i] = -1;
     128                if( ok )
     129                {
     130                    wp->y[i] = -1;
     131                }
     132                break;
    103133            }
    104134        }
Note: See TracChangeset for help on using the changeset viewer.