LaserTank: Fix bugs

Fix start position to 15 level
Fix draw window and fix resize
Fix mouse position

git-svn-id: svn://kolibrios.org@5474 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
ZblCoder 2015-02-25 22:06:51 +00:00
parent 9ee2e28866
commit 1c2d34b341
5 changed files with 46 additions and 24 deletions

Binary file not shown.

View File

@ -44,6 +44,7 @@
#define FIELD_CRATER 25 #define FIELD_CRATER 25
char* header = "Laser Tank"; char* header = "Laser Tank";
bool w_redraw = true;
struct Level struct Level
{ {
@ -54,14 +55,20 @@ void pause(int time)
{ {
kos_Pause(time); kos_Pause(time);
Byte keyCode; Byte keyCode;
Dword buttons;
int mX, mY;
for (int i = 0; i < 10; ++i) for (int i = 0; i < 10; ++i)
{
kos_GetKey(keyCode); kos_GetKey(keyCode);
kos_GetMouseState(buttons, mX, mY);
}
} }
Level *levels; Level *levels;
int levelCount = 0; int levelCount = 0;
int levelIndex = 0; int levelIndex = 0;
int levelPage = 0; int levelPage = 0;
float clickTime = 0;
RGBA img_tank[576]; RGBA img_tank[576];
RGB img_water[576]; RGB img_water[576];
@ -176,6 +183,8 @@ void SetMode(int mode)
{ {
gameMode = mode; gameMode = mode;
draw_window(); draw_window();
pause(40);
} }
bool IsWater(Point pos) bool IsWater(Point pos)
@ -928,6 +937,10 @@ void player_move(Point vector, float angle)
void key_press(int key) void key_press(int key)
{ {
sProcessInfo sPI;
kos_ProcessInfo(&sPI);
if (sPI.rawData[70] & 0x04)
return;
//rtlDebugOutString(ftoa(key)); //rtlDebugOutString(ftoa(key));
switch (gameMode) switch (gameMode)
@ -992,15 +1005,15 @@ void key_press(int key)
case MODE_PAUSE: case MODE_PAUSE:
if (key == 27) if (key == 27)
SetMode(MODE_LEVELS); SetMode(MODE_LEVELS);
else
if ((key == 32 || key == 13) && (gameStatus == GAME_NONE || (gameStatus == GAME_VICTORY && levelIndex < (levelCount - 1)))) if ((key == 32 || key == 13) && (gameStatus == GAME_NONE || (gameStatus == GAME_VICTORY && levelIndex < (levelCount - 1))))
{ {
if (gameStatus == GAME_VICTORY) if (gameStatus == GAME_VICTORY)
openLevel(levelIndex + 1); openLevel(levelIndex + 1);
SetMode(MODE_GAME); SetMode(MODE_GAME);
} }
else
if (key == 114 || (gameStatus == GAME_DEFEAT && (key == 32 || key == 13))) if (key == 114)
{ {
openLevel(levelIndex); openLevel(levelIndex);
SetMode(MODE_GAME); SetMode(MODE_GAME);
@ -1146,9 +1159,18 @@ void draw_level_number(Point position, int number, RGB color) // 0x252317
} }
void draw_window(void) void draw_window(void)
{
if (w_redraw)
{ {
kos_WindowRedrawStatus(1); kos_WindowRedrawStatus(1);
kos_DefineAndDrawWindow(10, 40, 384 + 9, 384 + 25, 0x33, 0x444444, 0, 0, (Dword)header);
//kos_DefineAndDrawWindow(50, 50, 640, 506 - 22 + kos_GetSkinHeight(), 0x74, 0xEEEEEE, 0, 0, (Dword)windowTitle);
kos_DefineAndDrawWindow(10, 40, 384 + 9, 384 + 25, 0x74, 0x444444, 0, 0, (Dword)header);
kos_WindowRedrawStatus(2);
w_redraw = false;
}
Point level_pos = Point(0, 0); Point level_pos = Point(0, 0);
switch (gameMode) switch (gameMode)
{ {
@ -1251,7 +1273,6 @@ void draw_window(void)
} }
break; break;
} }
kos_WindowRedrawStatus(2);
} }
void LevelsLoad() void LevelsLoad()
@ -1449,6 +1470,7 @@ void kos_Main()
switch (kos_WaitForEvent()) switch (kos_WaitForEvent())
{ {
case 1: case 1:
w_redraw = true;
draw_window(); draw_window();
break; break;
case 2: case 2:

View File

@ -115,14 +115,14 @@ void CKosImage::Draw(Point position, float angle)
alpha = (float)addPixel.a / 255.0f; alpha = (float)addPixel.a / 255.0f;
if (this->mode = DRAW_ALPHA) if (this->mode == DRAW_ALPHA)
{ {
newPixel.r = di((double)(pixel.r * (1 - alpha) + addPixel.r * alpha)); newPixel.r = di((double)(pixel.r * (1 - alpha) + addPixel.r * alpha));
newPixel.g = di((double)(pixel.g * (1 - alpha) + addPixel.g * alpha)); newPixel.g = di((double)(pixel.g * (1 - alpha) + addPixel.g * alpha));
newPixel.b = di((double)(pixel.b * (1 - alpha) + addPixel.b * alpha)); newPixel.b = di((double)(pixel.b * (1 - alpha) + addPixel.b * alpha));
} }
else else
if (this->mode = DRAW_ALPHA_ADD) if (this->mode == DRAW_ALPHA_ADD)
{ {
newPixel.r = di(min(255, (double)(pixel.r * (1 - alpha) + addPixel.r * alpha))); newPixel.r = di(min(255, (double)(pixel.r * (1 - alpha) + addPixel.r * alpha)));
newPixel.g = di(min(255, (double)(pixel.g * (1 - alpha) + addPixel.g * alpha))); newPixel.g = di(min(255, (double)(pixel.g * (1 - alpha) + addPixel.g * alpha)));

View File

@ -3,7 +3,7 @@
#include "kosSyst.h" #include "kosSyst.h"
#include "kosFile.h" #include "kosFile.h"
#include "mcsmemm.H" #include "mcsmemm.h"
#include <stdarg.h> #include <stdarg.h>

View File

@ -315,7 +315,6 @@ void kos_WriteTextToWindow(
kos_sysfunc4(arg2, textPtr, arg1, textLen); kos_sysfunc4(arg2, textPtr, arg1, textLen);
} }
// ôóíêöèÿ 5 ïàóçà, â ñîòûõ äîëÿõ ñåêóíäû // ôóíêöèÿ 5 ïàóçà, â ñîòûõ äîëÿõ ñåêóíäû
void kos_Pause( Dword value ) void kos_Pause( Dword value )
{ {
@ -328,7 +327,6 @@ void kos_Pause( Dword value )
} }
} }
// ôóíêöèÿ 7 íàðèñîâàòü èçîáðàæåíèå // ôóíêöèÿ 7 íàðèñîâàòü èçîáðàæåíèå
void kos_PutImage( RGB * imagePtr, Word sizeX, Word sizeY, Word x, Word y ) void kos_PutImage( RGB * imagePtr, Word sizeX, Word sizeY, Word x, Word y )
{ {
@ -517,9 +515,11 @@ void kos_GetMouseState( Dword & buttons, int & cursorX, int & cursorY )
// //
kos_ProcessInfo( &sPI ); kos_ProcessInfo( &sPI );
// //
int left = (int)((sPI.processInfo.x_size - 384) / 2);
int top = sPI.processInfo.y_size - 384 - left;
buttons = mB; buttons = mB;
cursorX = curX - sPI.processInfo.x_start; cursorX = curX - sPI.processInfo.x_start - left;
cursorY = curY - sPI.processInfo.y_start; cursorY = curY - sPI.processInfo.y_start - top;
} }