2020-11-06 14:56:32 +01:00
|
|
|
#pragma once
|
2020-11-08 16:37:59 +01:00
|
|
|
#include "gdrv.h"
|
|
|
|
#include "maths.h"
|
|
|
|
#include "zdrv.h"
|
|
|
|
|
2021-09-09 10:40:54 +02:00
|
|
|
enum class VisualTypes : char
|
2020-11-08 16:37:59 +01:00
|
|
|
{
|
2022-09-21 15:43:04 +02:00
|
|
|
Background = 0,
|
2020-11-08 16:37:59 +01:00
|
|
|
Sprite = 1,
|
|
|
|
Ball = 2
|
|
|
|
};
|
|
|
|
|
2022-09-21 15:43:04 +02:00
|
|
|
struct render_sprite
|
2020-11-08 16:37:59 +01:00
|
|
|
{
|
2022-09-21 15:43:04 +02:00
|
|
|
rectangle_type BmpRect{};
|
2020-11-15 15:39:00 +01:00
|
|
|
gdrv_bitmap8* Bmp;
|
2020-11-08 16:37:59 +01:00
|
|
|
zmap_header_type* ZMap;
|
2022-09-21 15:43:04 +02:00
|
|
|
bool DeleteFlag;
|
2021-09-09 10:40:54 +02:00
|
|
|
VisualTypes VisualType;
|
2022-09-21 15:43:04 +02:00
|
|
|
uint16_t Depth;
|
|
|
|
rectangle_type DirtyRectPrev{};
|
2020-11-08 16:37:59 +01:00
|
|
|
int ZMapOffestY;
|
|
|
|
int ZMapOffestX;
|
2022-09-21 15:43:04 +02:00
|
|
|
rectangle_type DirtyRect{};
|
|
|
|
std::vector<render_sprite*>* OccludedSprites;
|
|
|
|
rectangle_type BoundingRect{};
|
|
|
|
bool DirtyFlag{};
|
|
|
|
|
|
|
|
render_sprite(VisualTypes visualType, gdrv_bitmap8* bmp, zmap_header_type* zMap,
|
|
|
|
int xPosition, int yPosition, rectangle_type* boundingRect);
|
|
|
|
~render_sprite();
|
|
|
|
void set(gdrv_bitmap8* bmp, zmap_header_type* zMap, int xPos, int yPos);
|
|
|
|
void set_bitmap(gdrv_bitmap8* bmp);
|
|
|
|
void ball_set(gdrv_bitmap8* bmp, float depth, int xPos, int yPos);
|
2020-11-08 16:37:59 +01:00
|
|
|
};
|
|
|
|
|
2020-11-15 15:39:00 +01:00
|
|
|
|
2020-11-06 14:56:32 +01:00
|
|
|
class render
|
|
|
|
{
|
|
|
|
public:
|
2021-10-02 16:45:31 +02:00
|
|
|
static gdrv_bitmap8 *vscreen, *background_bitmap;
|
2021-09-25 15:52:19 +02:00
|
|
|
static SDL_Rect DestinationRect;
|
2020-11-08 16:37:59 +01:00
|
|
|
|
2022-09-21 15:43:04 +02:00
|
|
|
static void init(gdrv_bitmap8* bmp, int width, int height);
|
2020-11-15 15:39:00 +01:00
|
|
|
static void uninit();
|
2021-10-25 05:42:36 +02:00
|
|
|
static void recreate_screen_texture();
|
2020-11-06 14:56:32 +01:00
|
|
|
static void update();
|
2022-09-21 15:43:04 +02:00
|
|
|
static void AddSprite(render_sprite& sprite);
|
|
|
|
static void RemoveSprite(render_sprite& sprite);
|
|
|
|
static void set_background_zmap(zmap_header_type* zMap, int offsetX, int offsetY);
|
2021-09-25 15:52:19 +02:00
|
|
|
static void shift(int offsetX, int offsetY);
|
|
|
|
static void build_occlude_list();
|
|
|
|
static void SpriteViewer(bool* show);
|
|
|
|
static void PresentVScreen();
|
|
|
|
private:
|
2022-09-21 15:43:04 +02:00
|
|
|
static std::vector<render_sprite*> sprite_list, ball_list;
|
2021-09-25 15:52:19 +02:00
|
|
|
static zmap_header_type* background_zmap;
|
2022-09-21 15:43:04 +02:00
|
|
|
static int zmap_offsetX, zmap_offsetY, offset_x, offset_y;
|
2021-09-25 15:52:19 +02:00
|
|
|
static rectangle_type vscreen_rect;
|
2021-10-02 16:45:31 +02:00
|
|
|
static gdrv_bitmap8 *ball_bitmap[20];
|
|
|
|
static zmap_header_type* zscreen;
|
2021-09-25 15:52:19 +02:00
|
|
|
|
2022-09-21 15:43:04 +02:00
|
|
|
static void repaint(const render_sprite& sprite);
|
2020-11-15 15:39:00 +01:00
|
|
|
static void paint_balls();
|
|
|
|
static void unpaint_balls();
|
2020-11-06 14:56:32 +01:00
|
|
|
};
|