Ignore:
Timestamp:
12/13/02 20:27:16 (10 years ago)
Author:
sam
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.