2021-10-31 22:13:51 +00:00
|
|
|
// Copyright (c) Jon Thysell <http://jonthysell.com>
|
|
|
|
// Licensed under the MIT License.
|
|
|
|
|
|
|
|
#include "LevelEndScene.h"
|
|
|
|
|
2021-11-08 22:47:31 +00:00
|
|
|
#define LevelTextScale 4
|
|
|
|
#define HalfStarScale 3
|
|
|
|
#define ScoreTextScale 1
|
|
|
|
|
2021-10-31 22:13:51 +00:00
|
|
|
void LevelEndScene_Init(GameWindow *pGameWindow)
|
|
|
|
{
|
2021-11-08 22:47:31 +00:00
|
|
|
Rect r;
|
|
|
|
|
|
|
|
const Rect *pContentRect = &(pGameWindow->Window->portRect);
|
|
|
|
|
|
|
|
// Setup level
|
|
|
|
GetScaledPicFrame(pGameWindow->Engine.SetB ? pGameWindow->Bitmaps.BCharPict : pGameWindow->Bitmaps.ACharPict, LevelTextScale, &(pGameWindow->LevelEndScene.LevelRect));
|
|
|
|
Bitmaps_GetNumberRect(&(pGameWindow->Bitmaps), 1 + pGameWindow->Engine.Level, LevelTextScale, &r);
|
|
|
|
ConcatenateRect(&(pGameWindow->LevelEndScene.LevelRect), &r, &(pGameWindow->LevelEndScene.LevelRect));
|
|
|
|
|
|
|
|
GetBoxRect(pContentRect, Top, &r);
|
|
|
|
CenterRect(&r, &(pGameWindow->LevelEndScene.LevelRect));
|
|
|
|
|
|
|
|
// Setup half-stars
|
|
|
|
Bitmaps_GetHalfStarsRect(&(pGameWindow->Bitmaps), GameEngine_GetHalfStars(&(pGameWindow->Engine)), MaxStars, HalfStarScale, &(pGameWindow->LevelEndScene.HalfStarsRect));
|
|
|
|
|
|
|
|
GetBoxRect(pContentRect, Center, &r);
|
|
|
|
CenterRect(&r, &(pGameWindow->LevelEndScene.HalfStarsRect));
|
|
|
|
|
|
|
|
// Setup score
|
|
|
|
Bitmaps_GetNumberRect(&(pGameWindow->Bitmaps), pGameWindow->Engine.Score, ScoreTextScale, &(pGameWindow->LevelEndScene.ScoreRect));
|
|
|
|
GetScaledPicFrame(pGameWindow->Bitmaps.SlashCharPict, ScoreTextScale, &r);
|
|
|
|
ConcatenateRect(&(pGameWindow->LevelEndScene.ScoreRect), &r, &(pGameWindow->LevelEndScene.ScoreRect));
|
|
|
|
Bitmaps_GetNumberRect(&(pGameWindow->Bitmaps), PerfectScore, ScoreTextScale, &r);
|
|
|
|
ConcatenateRect(&(pGameWindow->LevelEndScene.ScoreRect), &r, &(pGameWindow->LevelEndScene.ScoreRect));
|
|
|
|
|
|
|
|
GetBoxRect(pContentRect, Bottom, &r);
|
|
|
|
CenterRect(&r, &(pGameWindow->LevelEndScene.ScoreRect));
|
|
|
|
|
|
|
|
// Setup retry button
|
|
|
|
GetPictureRect(pGameWindow->Bitmaps.RetryButtonPict, &(pGameWindow->LevelEndScene.RetryButtonRect));
|
|
|
|
|
|
|
|
GetBoxRect(pContentRect, BottomLeft, &r);
|
|
|
|
CenterRect(&r, &(pGameWindow->LevelEndScene.RetryButtonRect));
|
|
|
|
|
|
|
|
// Setup next button
|
|
|
|
GetPictureRect(pGameWindow->Bitmaps.NextButtonPict, &(pGameWindow->LevelEndScene.NextButtonRect));
|
|
|
|
|
|
|
|
GetBoxRect(pContentRect, BottomRight, &r);
|
|
|
|
CenterRect(&r, &(pGameWindow->LevelEndScene.NextButtonRect));
|
2021-10-31 22:13:51 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void LevelEndScene_Draw(const GameWindow *pGameWindow, bool fullRefresh)
|
|
|
|
{
|
2021-11-08 22:47:31 +00:00
|
|
|
// Draw level
|
|
|
|
MoveTo(pGameWindow->LevelEndScene.LevelRect.left, pGameWindow->LevelEndScene.LevelRect.top);
|
|
|
|
if (pGameWindow->Engine.SetB)
|
2021-10-31 22:13:51 +00:00
|
|
|
{
|
2021-11-08 22:47:31 +00:00
|
|
|
Bitmaps_DrawBChar(&(pGameWindow->Bitmaps), LevelTextScale);
|
2021-10-31 22:13:51 +00:00
|
|
|
}
|
2021-11-08 22:47:31 +00:00
|
|
|
else
|
|
|
|
{
|
|
|
|
Bitmaps_DrawAChar(&(pGameWindow->Bitmaps), LevelTextScale);
|
|
|
|
}
|
|
|
|
Bitmaps_DrawNumber(&(pGameWindow->Bitmaps), 1 + pGameWindow->Engine.Level, LevelTextScale);
|
2021-10-31 22:13:51 +00:00
|
|
|
|
2021-11-08 22:47:31 +00:00
|
|
|
// Draw half-stars
|
|
|
|
MoveTo(pGameWindow->LevelEndScene.HalfStarsRect.left, pGameWindow->LevelEndScene.HalfStarsRect.top);
|
|
|
|
Bitmaps_DrawHalfStars(&(pGameWindow->Bitmaps), GameEngine_GetHalfStars(&(pGameWindow->Engine)), MaxStars, HalfStarScale);
|
2021-10-31 22:13:51 +00:00
|
|
|
|
2021-11-08 22:47:31 +00:00
|
|
|
// Draw score
|
|
|
|
MoveTo(pGameWindow->LevelEndScene.ScoreRect.left, pGameWindow->LevelEndScene.ScoreRect.top);
|
|
|
|
Bitmaps_DrawNumber(&(pGameWindow->Bitmaps), pGameWindow->Engine.Score, ScoreTextScale);
|
|
|
|
Bitmaps_DrawSlashChar(&(pGameWindow->Bitmaps), ScoreTextScale);
|
|
|
|
Bitmaps_DrawNumber(&(pGameWindow->Bitmaps), PerfectScore, ScoreTextScale);
|
2021-10-31 22:13:51 +00:00
|
|
|
|
2021-11-08 22:47:31 +00:00
|
|
|
// Draw retry button
|
|
|
|
DrawPicture(pGameWindow->Bitmaps.RetryButtonPict, &(pGameWindow->LevelEndScene.RetryButtonRect));
|
2021-10-31 22:13:51 +00:00
|
|
|
|
2021-11-08 22:47:31 +00:00
|
|
|
// Draw next button
|
|
|
|
DrawPicture(pGameWindow->Bitmaps.NextButtonPict, &(pGameWindow->LevelEndScene.NextButtonRect));
|
2021-10-31 22:13:51 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void LevelEndScene_Click(GameWindow *pGameWindow, const Point *pPosition)
|
|
|
|
{
|
2021-11-08 22:47:31 +00:00
|
|
|
if (PtInRect(*pPosition, &(pGameWindow->LevelEndScene.RetryButtonRect)))
|
2021-10-31 22:13:51 +00:00
|
|
|
{
|
|
|
|
GameEngine_ResetLevel(&(pGameWindow->Engine));
|
2021-11-08 22:47:31 +00:00
|
|
|
GameWindow_SetScene(pGameWindow, Play);
|
2021-10-31 22:13:51 +00:00
|
|
|
}
|
2021-11-08 22:47:31 +00:00
|
|
|
else if (PtInRect(*pPosition, &(pGameWindow->LevelEndScene.NextButtonRect)))
|
2021-10-31 22:13:51 +00:00
|
|
|
{
|
|
|
|
GameEngine_NextLevel(&(pGameWindow->Engine));
|
2021-11-08 22:47:31 +00:00
|
|
|
GameWindow_SetScene(pGameWindow, GameEngine_IsGameOver(&(pGameWindow->Engine)) ? GameEnd : Play);
|
2021-10-31 22:13:51 +00:00
|
|
|
}
|
|
|
|
}
|