mirror of
https://github.com/jonthysell/MacLO.git
synced 2024-06-17 19:29:29 +00:00
Added initial playfield rendering
This commit is contained in:
parent
cf5daf9dc7
commit
c90e42305f
|
@ -3,6 +3,8 @@
|
|||
|
||||
#include "GameWindow.h"
|
||||
|
||||
void GameWindow_DrawPlayfield(const GameWindow *pGameWindow);
|
||||
|
||||
void GameWindow_Init(GameWindow *pGameWindow)
|
||||
{
|
||||
if (pGameWindow->Window != nil)
|
||||
|
@ -17,18 +19,99 @@ void GameWindow_Init(GameWindow *pGameWindow)
|
|||
ShowError("\pGameWindow resource WIND BaseResID missing!", true);
|
||||
}
|
||||
|
||||
// Setup rects
|
||||
pGameWindow->PlayfieldRect.left = PlayfieldMargin;
|
||||
pGameWindow->PlayfieldRect.top = PlayfieldMargin;
|
||||
pGameWindow->PlayfieldRect.right = (2 * PlayfieldMargin) + (PuzzleSize * (LightSize + LightMargin)) - LightMargin;
|
||||
pGameWindow->PlayfieldRect.bottom = (2 * PlayfieldMargin) + (PuzzleSize * (LightSize + LightMargin)) - LightMargin;;
|
||||
|
||||
// Load first level
|
||||
GameEngine_LoadLevel(&(pGameWindow->Engine), 0, false);
|
||||
|
||||
}
|
||||
|
||||
void GameWindow_Draw(GameWindow *pGameWindow)
|
||||
void GameWindow_Draw(const GameWindow *pGameWindow, Boolean fullRefresh)
|
||||
{
|
||||
const Rect *pContentRect = &(pGameWindow->Window->portRect);
|
||||
|
||||
SetPort(pGameWindow->Window);
|
||||
|
||||
MoveTo(10, 20);
|
||||
DrawString("\pHello MacLO");
|
||||
if (fullRefresh)
|
||||
{
|
||||
// Fill background
|
||||
ForeColor(blackColor);
|
||||
PaintRect(pContentRect);
|
||||
}
|
||||
|
||||
void GameWindow_Show(GameWindow *pGameWindow)
|
||||
GameWindow_DrawPlayfield(pGameWindow);
|
||||
}
|
||||
|
||||
void GameWindow_DrawPlayfield(const GameWindow *pGameWindow)
|
||||
{
|
||||
int8_t r, c;
|
||||
Rect lightRect;
|
||||
|
||||
SetPort(pGameWindow->Window);
|
||||
|
||||
// Draw lights
|
||||
for (r = 0; r < PuzzleSize; r++)
|
||||
{
|
||||
lightRect.top = PlayfieldMargin + (r * (LightMargin + LightSize));
|
||||
lightRect.bottom = lightRect.top + LightSize;
|
||||
|
||||
for (c = 0; c < PuzzleSize; c++)
|
||||
{
|
||||
lightRect.left = PlayfieldMargin + (c * (LightMargin + LightSize));
|
||||
lightRect.right = lightRect.left + LightSize;
|
||||
|
||||
if (GameEngine_GetLight(&(pGameWindow->Engine), c, r))
|
||||
{
|
||||
// Draw ON light
|
||||
ForeColor(whiteColor);
|
||||
PaintRoundRect(&lightRect, LightCornerSize, LightCornerSize);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Draw OFF light
|
||||
ForeColor(blackColor);
|
||||
PaintRoundRect(&lightRect, LightCornerSize, LightCornerSize);
|
||||
ForeColor(whiteColor);
|
||||
FrameRoundRect(&lightRect, LightCornerSize, LightCornerSize);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GameWindow_Show(const GameWindow *pGameWindow)
|
||||
{
|
||||
ShowWindow(pGameWindow->Window);
|
||||
}
|
||||
|
||||
void GameWindow_Click(GameWindow *pGameWindow, const Point *pPosition)
|
||||
{
|
||||
int8_t r, c;
|
||||
Rect lightRect;
|
||||
|
||||
if (PtInRect(*pPosition, &(pGameWindow->PlayfieldRect)))
|
||||
{
|
||||
for (r = 0; r < PuzzleSize; r++)
|
||||
{
|
||||
lightRect.top = PlayfieldMargin + (r * (LightMargin + LightSize));
|
||||
lightRect.bottom = lightRect.top + LightSize;
|
||||
|
||||
for (c = 0; c < PuzzleSize; c++)
|
||||
{
|
||||
lightRect.left = PlayfieldMargin + (c * (LightMargin + LightSize));
|
||||
lightRect.right = lightRect.left + LightSize;
|
||||
|
||||
if (PtInRect(*pPosition, &lightRect))
|
||||
{
|
||||
GameEngine_ToggleLights(&(pGameWindow->Engine), c, r);
|
||||
GameWindow_DrawPlayfield(pGameWindow);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,14 +7,23 @@
|
|||
#include "MacCommon.h"
|
||||
#include "GameEngine.h"
|
||||
|
||||
#define PlayfieldMargin 5
|
||||
#define LightMargin 10
|
||||
#define LightSize 50
|
||||
#define LightCornerSize 10
|
||||
|
||||
typedef struct GameWindow
|
||||
{
|
||||
WindowPtr Window;
|
||||
GameEngine Engine;
|
||||
Rect PlayfieldRect;
|
||||
} GameWindow;
|
||||
|
||||
void GameWindow_Init(GameWindow *pGameWindow);
|
||||
void GameWindow_Draw(GameWindow *pGameWindow);
|
||||
void GameWindow_Show(GameWindow *pGameWindow);
|
||||
|
||||
void GameWindow_Draw(const GameWindow *pGameWindow, Boolean fullRefresh);
|
||||
void GameWindow_Show(const GameWindow *pGameWindow);
|
||||
|
||||
void GameWindow_Click(GameWindow *pGameWindow, const Point *pPosition);
|
||||
|
||||
#endif
|
||||
|
|
14
src/MacLO.c
14
src/MacLO.c
|
@ -58,7 +58,7 @@ void MacLO_AppInit()
|
|||
|
||||
// Setup the game window
|
||||
GameWindow_Init(&gGameWindow);
|
||||
GameWindow_Draw(&gGameWindow);
|
||||
GameWindow_Draw(&gGameWindow, true);
|
||||
GameWindow_Show(&gGameWindow);
|
||||
}
|
||||
|
||||
|
@ -103,7 +103,7 @@ void MacLO_HandleUpdate(const EventRecord *pEvent)
|
|||
|
||||
if (window == gGameWindow.Window)
|
||||
{
|
||||
GameWindow_Draw(&gGameWindow);
|
||||
GameWindow_Draw(&gGameWindow, true);
|
||||
}
|
||||
|
||||
EndUpdate(window);
|
||||
|
@ -114,19 +114,25 @@ void MacLO_HandleMouseDown(const EventRecord *pEvent)
|
|||
WindowPtr window;
|
||||
long windowPart;
|
||||
long menuChoice;
|
||||
Point mousePosition;
|
||||
|
||||
windowPart = FindWindow(pEvent->where, &window);
|
||||
mousePosition = pEvent->where;
|
||||
|
||||
switch (windowPart)
|
||||
{
|
||||
case inMenuBar:
|
||||
menuChoice = MenuSelect(pEvent->where);
|
||||
menuChoice = MenuSelect(mousePosition);
|
||||
MacLO_HandleMenuChoice(menuChoice);
|
||||
case inSysWindow:
|
||||
SystemClick(pEvent, window);
|
||||
break;
|
||||
case inDrag:
|
||||
DragWindow(window, pEvent->where, &((*GetGrayRgn())->rgnBBox));
|
||||
DragWindow(window, mousePosition, &((*GetGrayRgn())->rgnBBox));
|
||||
break;
|
||||
case inContent:
|
||||
GlobalToLocal(&mousePosition);
|
||||
GameWindow_Click(&gGameWindow, &mousePosition);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
BIN
src/MacLO.pi.bin
BIN
src/MacLO.pi.bin
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue
Block a user