mirror of
https://github.com/jonthysell/MacLO.git
synced 2024-09-27 14:55:32 +00:00
Added initial playfield rendering
This commit is contained in:
parent
cf5daf9dc7
commit
c90e42305f
@ -3,6 +3,8 @@
|
|||||||
|
|
||||||
#include "GameWindow.h"
|
#include "GameWindow.h"
|
||||||
|
|
||||||
|
void GameWindow_DrawPlayfield(const GameWindow *pGameWindow);
|
||||||
|
|
||||||
void GameWindow_Init(GameWindow *pGameWindow)
|
void GameWindow_Init(GameWindow *pGameWindow)
|
||||||
{
|
{
|
||||||
if (pGameWindow->Window != nil)
|
if (pGameWindow->Window != nil)
|
||||||
@ -17,18 +19,99 @@ void GameWindow_Init(GameWindow *pGameWindow)
|
|||||||
ShowError("\pGameWindow resource WIND BaseResID missing!", true);
|
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);
|
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);
|
SetPort(pGameWindow->Window);
|
||||||
|
|
||||||
MoveTo(10, 20);
|
if (fullRefresh)
|
||||||
DrawString("\pHello MacLO");
|
{
|
||||||
|
// 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);
|
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 "MacCommon.h"
|
||||||
#include "GameEngine.h"
|
#include "GameEngine.h"
|
||||||
|
|
||||||
|
#define PlayfieldMargin 5
|
||||||
|
#define LightMargin 10
|
||||||
|
#define LightSize 50
|
||||||
|
#define LightCornerSize 10
|
||||||
|
|
||||||
typedef struct GameWindow
|
typedef struct GameWindow
|
||||||
{
|
{
|
||||||
WindowPtr Window;
|
WindowPtr Window;
|
||||||
GameEngine Engine;
|
GameEngine Engine;
|
||||||
|
Rect PlayfieldRect;
|
||||||
} GameWindow;
|
} GameWindow;
|
||||||
|
|
||||||
void GameWindow_Init(GameWindow *pGameWindow);
|
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
|
#endif
|
||||||
|
14
src/MacLO.c
14
src/MacLO.c
@ -58,7 +58,7 @@ void MacLO_AppInit()
|
|||||||
|
|
||||||
// Setup the game window
|
// Setup the game window
|
||||||
GameWindow_Init(&gGameWindow);
|
GameWindow_Init(&gGameWindow);
|
||||||
GameWindow_Draw(&gGameWindow);
|
GameWindow_Draw(&gGameWindow, true);
|
||||||
GameWindow_Show(&gGameWindow);
|
GameWindow_Show(&gGameWindow);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -103,7 +103,7 @@ void MacLO_HandleUpdate(const EventRecord *pEvent)
|
|||||||
|
|
||||||
if (window == gGameWindow.Window)
|
if (window == gGameWindow.Window)
|
||||||
{
|
{
|
||||||
GameWindow_Draw(&gGameWindow);
|
GameWindow_Draw(&gGameWindow, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
EndUpdate(window);
|
EndUpdate(window);
|
||||||
@ -114,19 +114,25 @@ void MacLO_HandleMouseDown(const EventRecord *pEvent)
|
|||||||
WindowPtr window;
|
WindowPtr window;
|
||||||
long windowPart;
|
long windowPart;
|
||||||
long menuChoice;
|
long menuChoice;
|
||||||
|
Point mousePosition;
|
||||||
|
|
||||||
windowPart = FindWindow(pEvent->where, &window);
|
windowPart = FindWindow(pEvent->where, &window);
|
||||||
|
mousePosition = pEvent->where;
|
||||||
|
|
||||||
switch (windowPart)
|
switch (windowPart)
|
||||||
{
|
{
|
||||||
case inMenuBar:
|
case inMenuBar:
|
||||||
menuChoice = MenuSelect(pEvent->where);
|
menuChoice = MenuSelect(mousePosition);
|
||||||
MacLO_HandleMenuChoice(menuChoice);
|
MacLO_HandleMenuChoice(menuChoice);
|
||||||
case inSysWindow:
|
case inSysWindow:
|
||||||
SystemClick(pEvent, window);
|
SystemClick(pEvent, window);
|
||||||
break;
|
break;
|
||||||
case inDrag:
|
case inDrag:
|
||||||
DragWindow(window, pEvent->where, &((*GetGrayRgn())->rgnBBox));
|
DragWindow(window, mousePosition, &((*GetGrayRgn())->rgnBBox));
|
||||||
|
break;
|
||||||
|
case inContent:
|
||||||
|
GlobalToLocal(&mousePosition);
|
||||||
|
GameWindow_Click(&gGameWindow, &mousePosition);
|
||||||
break;
|
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