SceneObject.h
SceneObject.h
CPP1/* Copyright Statement:2 *3 * (C) 2021-2024 Cubios Inc. All rights reserved.4 */56#ifndef WASMLIBS_CPP_SCENEOBJECT_H_7#define WASMLIBS_CPP_SCENEOBJECT_H_89#include "Math/Transform.h"10#include "Math/Color.h"11#include "Object.h"1213namespace Cubios14{15class Screen;16class SceneObject: public Object17{18public:19 SceneObject():Parent(nullptr),ScreenAngle(0),Visible(true),InBegin(false){}20 virtual ~SceneObject(){}21 virtual void Render() = 0;2223 //Inplace setters24 SceneObject* SetColor(uint32_t v) { this->Color.Set(v); return this;}25 SceneObject* SetA(uint8_t a) {this->Color.SetA(a); return this;}26 SceneObject* SetAf(float a) {this->Color.SetAf(a); return this;}27 SceneObject* SetAfSafe(float a) {this->Color.SetAfSafe(a); return this;}28 SceneObject* SetR(uint8_t r) {this->Color.SetR(r); return this;}29 SceneObject* SetG(uint8_t g) {this->Color.SetG(g); return this;}30 SceneObject* SetB(uint8_t b) {this->Color.SetB(b); return this;}3132 SceneObject* SetVisible(bool v) {this->Visible = v; return this;}3334 SceneObject* SetTransform(const Math::Transform& t) {this->Transform = t; return this;}35 SceneObject* SetPosition(const Math::Vec2& p) {this->Transform.Position=p; return this;}36 SceneObject* SetPosition(float x, float y) {this->Transform.Position.X = x; this->Transform.Position.Y = y; return this;}37 SceneObject* SetRotation(int r) {this->Transform.Rotation = (360+r%360)%360; return this;}38 SceneObject* SetMirroring(unsigned int m) {this->Transform.Mirroring = m; return this;}39 SceneObject* SetScale(unsigned int s) {this->Transform.ScaleX = s; this->Transform.ScaleY = s; return this;}40 SceneObject* SetScale(unsigned int sx, unsigned int sy) {this->Transform.ScaleX = sx; this->Transform.ScaleY = sy; return this;}41 SceneObject* SetXScale(unsigned int s) {this->Transform.ScaleX = s; return this;}42 SceneObject* SetYScale(unsigned int s) {this->Transform.ScaleY = s; return this;}4344 const Math::Vec2 ScreenPosition()45 {46 Math::Vec2 pos = this->Transform.Position;4748 if(this->Parent==nullptr) return pos;4950 switch(ScreenAngle)51 {52 case 0:53 case 360:54 pos.Set(this->Transform.Position.X,this->Transform.Position.Y);55 break;56 case 90:57 pos.Set(240-this->Transform.Position.Y,this->Transform.Position.X);58 break;59 case 180:60 pos.Set(240-this->Transform.Position.X,240-this->Transform.Position.Y);61 break;62 case 270:63 pos.Set(this->Transform.Position.Y,240-this->Transform.Position.X);64 break;65 default:66 break;67 }6869 return pos;70 }7172 SceneObject* Move(const Math::Vec2& v) { return this->Move(v.X, v.Y); }73 SceneObject* Move(float dx, float dy)74 {75 if(this->Parent==nullptr) return this;7677 if(!this->InBegin)78 {79 LOG_w("SceneObject: Move() can only be called within Begin/End block!\n");80 return this;81 }8283 switch(ScreenAngle)84 {85 case 0:86 case 360:87 {88 this->Transform.Position.X+=dx;89 this->Transform.Position.Y+=dy;90 }91 break;9293 case 90:94 {95 this->Transform.Position.X-=dy;96 this->Transform.Position.Y+=dx;97 }98 break;99100 case 180:101 {102 this->Transform.Position.X-=dx;103 this->Transform.Position.Y-=dy;104 }105 break;106107 case 270:108 {109 this->Transform.Position.X+=dy;110 this->Transform.Position.Y-=dx;111 }112 break;113114 default:115 break;116 }117118 return this;119 }120public:121 Math::Transform Transform;122 Math::Color Color;123124 uint32_t ScreenAngle;125 bool Visible;126127 Screen* Parent;128 bool InBegin;129};130131}132#endif /* WASMLIBS_CPP_SCENEOBJECT_H_ */133
Wrapped for easier reading. Turn wrap off to inspect exact line lengths.