summaryrefslogtreecommitdiff
path: root/src/base
diff options
context:
space:
mode:
authororoborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e>2008-08-22 11:55:33 +0000
committeroroborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e>2008-08-22 11:55:33 +0000
commit1e656ce31aca56aa802245b220850ebba6672d93 (patch)
tree2d10ae7ad3d8bc3d77733683ab2ea24c7f461ad9 /src/base
parent3e36d08598a3ab43ddce32f2b34295447d32e38e (diff)
- podpora split screenu v bigArenacha pri hre na jednom PC :)
( zatial teka technikca verzia ) git-svn-id: http://opensvn.csie.org/tuxanci_ng@238 0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e
Diffstat (limited to 'src/base')
-rw-r--r--src/base/arena.c155
-rw-r--r--src/base/arena.h2
-rw-r--r--src/base/shot.c2
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);