diff options
Diffstat (limited to 'src/base')
| -rw-r--r-- | src/base/arena.c | 155 | ||||
| -rw-r--r-- | src/base/arena.h | 2 | ||||
| -rw-r--r-- | src/base/shot.c | 2 |
3 files changed, 111 insertions, 48 deletions
diff --git a/src/base/arena.c b/src/base/arena.c index 019dbb4..1284e95 100644 --- a/src/base/arena.c +++ b/src/base/arena.c @@ -106,14 +106,14 @@ void findFreeSpace(arena_t *arena, int *x, int *y, int w, int h) *y = z_y; } -void getCenterScreen(int *screen_x, int *screen_y, int x, int y) +void getCenterScreen(int *screen_x, int *screen_y, int x, int y, int screen_size_x, int screen_size_y) { arena_t *arena; arena = getCurrentArena(); - *screen_x = x - WINDOW_SIZE_X/2; - *screen_y = y - WINDOW_SIZE_Y/2; + *screen_x = x - screen_size_x/2; + *screen_y = y - screen_size_y/2; if( *screen_x < 0 ) { @@ -125,19 +125,39 @@ void getCenterScreen(int *screen_x, int *screen_y, int x, int y) *screen_y = 0; } - if( *screen_x + WINDOW_SIZE_X >= arena->w ) + if( *screen_x + screen_size_x >= arena->w ) { - *screen_x = arena->w - WINDOW_SIZE_X; + *screen_x = arena->w - screen_size_x; } - if( *screen_y + WINDOW_SIZE_Y >= arena->h ) + if( *screen_y + screen_size_y >= arena->h ) { - *screen_y = arena->h - WINDOW_SIZE_Y; + *screen_y = arena->h - screen_size_y; } } #ifndef PUBLIC_SERVER +static void drawBackground(arena_t *arena, int screen_x, int screen_y) +{ + int i, j; + + for( i = screen_y/arena->background->h ; + i <= screen_y/arena->background->h + WINDOW_SIZE_Y/arena->background->h+1 ; i++ ) + { + for( j = screen_x/arena->background->w ; + j <= screen_x/arena->background->w + WINDOW_SIZE_X/arena->background->w+1 ; j++ ) + { + addLayer(arena->background, + j * arena->background->w, + i * arena->background->h, + 0, 0, arena->background->w, arena->background->h, -100); + + //count++; + } + } +} + static void action_drawTux(space_t *space, tux_t *tux, void *p) { drawTux(tux); @@ -153,75 +173,118 @@ static void action_drawShot(space_t *space, shot_t *shot, void *p) drawShot(shot); } -#if 0 +static void drawObjects(arena_t *arena, int screen_x, int screen_y) +{ + actionSpaceFromLocation(arena->spaceTux, action_drawTux, NULL, + screen_x, screen_y, WINDOW_SIZE_X, WINDOW_SIZE_Y); -#endif + actionSpaceFromLocation(arena->spaceItem, action_drawItem, NULL, + screen_x, screen_y, WINDOW_SIZE_X, WINDOW_SIZE_Y); -void drawArena(arena_t *arena) + actionSpaceFromLocation(arena->spaceShot, action_drawShot, NULL, + screen_x, screen_y, WINDOW_SIZE_X, WINDOW_SIZE_Y); + + drawModule(screen_x, screen_y, WINDOW_SIZE_X, WINDOW_SIZE_Y); +} + +static void drawSplitArenaForTux(arena_t *arena, tux_t *tux, int location_x, int location_y) { int screen_x, screen_y; + + getCenterScreen(&screen_x, &screen_y, tux->x, tux->y, WINDOW_SIZE_X/2, WINDOW_SIZE_Y); + + drawBackground(arena, screen_x, screen_y); + drawObjects(arena, screen_x, screen_y); + + drawLayerSplit(location_x, location_y, screen_x, screen_y, WINDOW_SIZE_X/2, WINDOW_SIZE_Y); +} + +void drawSplitArena(arena_t *arena) +{ tux_t *tux = NULL; - int i, j; - //int count = 0; tux = getControlTux(TUX_CONTROL_KEYBOARD_RIGHT); - if( tux == NULL ) + if( tux != NULL ) { - return; + drawSplitArenaForTux(arena, tux, WINDOW_SIZE_X/2, 0); } - screen_x = tux->x - WINDOW_SIZE_X/2; - screen_y = tux->y - WINDOW_SIZE_Y/2; + tux = getControlTux(TUX_CONTROL_KEYBOARD_LEFT); + if( tux != NULL ) + { + drawSplitArenaForTux(arena, tux, 0, 0); + } +} - getCenterScreen(&screen_x, &screen_y, tux->x, tux->y); +void drawCenterArena(arena_t *arena) +{ + int screen_x, screen_y; + tux_t *tux = NULL; - for( i = screen_y/arena->background->h ; - i <= screen_y/arena->background->h + WINDOW_SIZE_Y/arena->background->h+1 ; i++ ) - { - for( j = screen_x/arena->background->w ; - j <= screen_x/arena->background->w + WINDOW_SIZE_X/arena->background->w+1 ; j++ ) - { - addLayer(arena->background, - j * arena->background->w, - i * arena->background->h, - 0, 0, arena->background->w, arena->background->h, -100); + tux = getControlTux(TUX_CONTROL_KEYBOARD_RIGHT); - //count++; - } + if( tux == NULL ) + { + return; } - //printf("arena count = %d\n", count); + getCenterScreen(&screen_x, &screen_y, tux->x, tux->y, WINDOW_SIZE_X, WINDOW_SIZE_Y); - actionSpaceFromLocation(arena->spaceTux, action_drawTux, NULL, - screen_x, screen_y, WINDOW_SIZE_X, WINDOW_SIZE_Y); + drawBackground(arena, screen_x, screen_y); + drawObjects(arena, screen_x, screen_y); + drawLayerCenter(tux->x, tux->y); +} - actionSpaceFromLocation(arena->spaceItem, action_drawItem, NULL, - screen_x, screen_y, WINDOW_SIZE_X, WINDOW_SIZE_Y); +void drawSimpleArena(arena_t *arena) +{ + int screen_x, screen_y; + tux_t *tux = NULL; - actionSpaceFromLocation(arena->spaceShot, action_drawShot, NULL, - screen_x, screen_y, WINDOW_SIZE_X, WINDOW_SIZE_Y); + tux = getControlTux(TUX_CONTROL_KEYBOARD_RIGHT); - //printSpace(arena->spaceShot); + if( tux == NULL ) + { + return; + } - drawModule(screen_x, screen_y, WINDOW_SIZE_X, WINDOW_SIZE_Y); -/* - my_time_t t; + screen_x = 0; + screen_y = 0; - t = getMyTime(); -*/ + tux = getControlTux(TUX_CONTROL_KEYBOARD_RIGHT); + drawBackground(arena, screen_x, screen_y); + drawObjects(arena, screen_x, screen_y); + drawLayer(tux->x, tux->y); +} - if( tux == NULL ) +static int isBigArena(arena_t *arena) +{ + if( arena->w > WINDOW_SIZE_X || arena->h > WINDOW_SIZE_Y ) { - drawLayerCenter(WINDOW_SIZE_X/2, WINDOW_SIZE_Y/2); + return 1; } else { - drawLayerCenter(tux->x, tux->y); + return 0; + } +} + +void drawArena(arena_t *arena) +{ + if( isBigArena(arena) && getNetTypeGame() == NET_GAME_TYPE_NONE ) + { + drawSplitArena(arena); + return; + } + + if( isBigArena(arena) ) + { + drawCenterArena(arena); + return; } -// printf("time = %d\n", getMyTime() - t ); + drawSimpleArena(arena); } #endif diff --git a/src/base/arena.h b/src/base/arena.h index 2adf0c5..392738b 100644 --- a/src/base/arena.h +++ b/src/base/arena.h @@ -41,7 +41,7 @@ extern arena_t* newArena(int w, int h); extern int conflictSpace(int x1,int y1,int w1,int h1,int x2,int y2,int w2,int h2); extern int isFreeSpace(arena_t *arena, int x, int y, int w, int h); extern void findFreeSpace(arena_t *arena, int *x, int *y, int w, int h); -extern void getCenterScreen(int *screen_x, int *screen_y, int x, int y); +extern void getCenterScreen(int *screen_x, int *screen_y, int x, int y, int screen_size_x, int screen_size_y); #ifndef PUBLIC_SERVER extern void drawArena(arena_t *arena); #endif diff --git a/src/base/shot.c b/src/base/shot.c index 955330e..86dfec3 100644 --- a/src/base/shot.c +++ b/src/base/shot.c @@ -346,7 +346,7 @@ void checkShotIsInTuxScreen(arena_t *arena) continue; } - getCenterScreen(&screen_x, &screen_y, thisTux->x, thisTux->y); + getCenterScreen(&screen_x, &screen_y, thisTux->x, thisTux->y, WINDOW_SIZE_X, WINDOW_SIZE_Y); actionSpaceFromLocation(arena->spaceShot, action_check, thisClient, screen_x, screen_y, WINDOW_SIZE_X, WINDOW_SIZE_Y); |