You've already forked pico-launcher
mirror of
https://github.com/LNH-team/pico-launcher.git
synced 2026-01-09 16:28:48 -08:00
67 lines
1.8 KiB
C++
67 lines
1.8 KiB
C++
#pragma once
|
|
#include "core/math/Point.h"
|
|
#include "core/math/Rectangle.h"
|
|
#include "OamManager.h"
|
|
#include "PaletteManager.h"
|
|
#include "Rgb6Palette.h"
|
|
|
|
class GraphicsContext
|
|
{
|
|
public:
|
|
GraphicsContext(OamManager* oamManager, PaletteManager* paletteManager, const Rgb6Palette* rgb6Palette)
|
|
: _priority(3), _polygonId(0), _oamManager(oamManager)
|
|
, _paletteManager(paletteManager), _rgb6Palette(rgb6Palette)
|
|
, _clipArea(0, 0, 256, 192) { }
|
|
|
|
u32 SetPriority(u32 priority)
|
|
{
|
|
u32 oldPriority = _priority;
|
|
_priority = priority;
|
|
return oldPriority;
|
|
}
|
|
|
|
constexpr u32 GetPriority() const { return _priority; }
|
|
|
|
u32 SetPolygonId(u32 polygonId)
|
|
{
|
|
u32 oldPolygonId = _polygonId;
|
|
_polygonId = polygonId;
|
|
return oldPolygonId;
|
|
}
|
|
|
|
constexpr u32 GetPolygonId() const { return _polygonId; }
|
|
|
|
OamManager& GetOamManager() const { return *_oamManager; }
|
|
PaletteManager& GetPaletteManager() const { return *_paletteManager; }
|
|
const Rgb6Palette* GetRgb6Palette() const { return _rgb6Palette; }
|
|
|
|
virtual PaletteManager& GetPaletteManager(int scanline) const { return *_paletteManager; }
|
|
|
|
void SetClipArea(const Rectangle& clipArea, bool inverse = false)
|
|
{
|
|
_clipArea = clipArea;
|
|
_inverseClipArea = inverse;
|
|
}
|
|
|
|
constexpr bool IsVisible(const Rectangle& bounds) const
|
|
{
|
|
if (!Rectangle(0, 0, 256, 192).OverlapsWith(bounds))
|
|
return false;
|
|
return _inverseClipArea ? !_clipArea.Contains(bounds) : _clipArea.OverlapsWith(bounds);
|
|
}
|
|
|
|
void ResetClipArea()
|
|
{
|
|
SetClipArea(Rectangle(0, 0, 256, 192));
|
|
}
|
|
|
|
private:
|
|
u32 _priority;
|
|
u8 _polygonId;
|
|
|
|
OamManager* _oamManager;
|
|
PaletteManager* _paletteManager;
|
|
const Rgb6Palette* _rgb6Palette;
|
|
Rectangle _clipArea;
|
|
bool _inverseClipArea = false;
|
|
}; |