SpaceCadetPinball/SpaceCadetPinball/render.cpp

99 lines
2.4 KiB
C++
Raw Normal View History

2020-11-06 14:56:32 +01:00
#include "pch.h"
#include "render.h"
2020-11-08 16:37:59 +01:00
#include "memory.h"
2020-11-06 14:56:32 +01:00
int render::blit = 0;
2020-11-08 16:37:59 +01:00
int render::many_dirty, render::many_sprites, render::many_balls;
render_sprite_type_struct **render::dirty_list = new render_sprite_type_struct*[1000], **render::sprite_list = new
render_sprite_type_struct* [1000], **render::ball_list = new render_sprite_type_struct* [
1000];
zmap_header_type* render::background_zmap;
int render::zmap_offset, render::zmap_offsetY;
2020-11-06 14:56:32 +01:00
void render::update()
{
}
2020-11-07 16:41:14 +01:00
void render::paint()
{
/*render_paint_balls();
gdrv_blat((int)&vscreen, xDest, yDest);
render_unpaint_balls();*/
2020-11-08 16:37:59 +01:00
}
int render::sprite_modified(render_sprite_type_struct* sprite)
{
int result = 0; // eax
if (sprite->VisualType == VisualType::Ball)
return result;
result = many_dirty;
if (many_dirty < 999)
dirty_list[many_dirty++] = sprite;
return result;
}
render_sprite_type_struct* render::create_sprite(VisualType visualType, gdrv_bitmap8* rootBmp8, zmap_header_type* zMap,
int xPosition, int yPosition, visual_rect* rect)
{
render_sprite_type_struct* sprite = (render_sprite_type_struct*)memory::allocate(0x5Cu);
render_sprite_type_struct* result = nullptr;
if (!sprite)
return result;
sprite->YPosition = yPosition;
sprite->RootBmp8 = rootBmp8;
sprite->XPosition = xPosition;
sprite->VisualType = visualType;
sprite->Unknown6_0 = 0;
sprite->Unknown17 = 0;
sprite->Unknown18 = 0;
if (rect)
{
sprite->Rect = *rect;
}
else
{
sprite->Rect.Width = -1;
sprite->Rect.Height = -1;
sprite->Rect.XPosition = 0;
sprite->Rect.YPosition = 0;
}
if (rootBmp8)
{
sprite->Bmp8Width = rootBmp8->Width;
sprite->Bmp8Height = rootBmp8->Height;
}
else
{
sprite->Bmp8Width = 0;
sprite->Bmp8Height = 0;
}
sprite->ZMap = zMap;
sprite->ZMapOffestX = 0;
sprite->ZMapOffestY = 0;
if (!zMap && visualType != VisualType::Ball)
{
sprite->ZMap = background_zmap;
sprite->ZMapOffestY = xPosition - zmap_offset;
sprite->ZMapOffestX = yPosition - zmap_offsetY;
}
sprite->XPosition2 = sprite->XPosition;
sprite->YPosition2 = sprite->YPosition;
sprite->Bmp8Width2 = sprite->Bmp8Width;
sprite->Bmp8Height2 = sprite->Bmp8Height;
if (visualType == VisualType::Ball)
{
ball_list[many_balls++] = sprite;
}
else
{
sprite_list[many_sprites++] = sprite;
sprite_modified(sprite);
}
result = sprite;
return result;
}