From d2058dce75ceb67f27c50e9f27d755a4d30c9003 Mon Sep 17 00:00:00 2001 From: chai Date: Tue, 13 Nov 2018 21:33:25 +0800 Subject: =?UTF-8?q?*=E4=BF=AE=E6=94=B9=E6=B8=B2=E6=9F=93=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/libjin/Graphics/je_sprite.cpp | 72 +++++++++++++++++++++++++++++++++------ 1 file changed, 62 insertions(+), 10 deletions(-) (limited to 'src/libjin/Graphics/je_sprite.cpp') diff --git a/src/libjin/Graphics/je_sprite.cpp b/src/libjin/Graphics/je_sprite.cpp index 4ef32a4..9ee4fc1 100644 --- a/src/libjin/Graphics/je_sprite.cpp +++ b/src/libjin/Graphics/je_sprite.cpp @@ -12,6 +12,12 @@ namespace JinEngine Sprite::Sprite() : mShader(nullptr) , mGraphic(nullptr) + , mScale(1, 1) + , mColor(255, 255, 255, 255) + { + } + + Sprite::~Sprite() { } @@ -22,37 +28,81 @@ namespace JinEngine void Sprite::setOrigin(Origin origin) { - + int l = 0, r = 0, t = 0, b = 0; + if (mGraphic != nullptr) + { + r = mGraphic->getWidth(); + b = mGraphic->getHeight(); + } + switch (origin) + { + case TopLeft: + mOrigin.x = l; + mOrigin.y = t; + break; + case TopCenter: + mOrigin.x = r/2.f; + mOrigin.y = t; + break; + case TopRight: + mOrigin.x = r; + mOrigin.y = t; + break; + case MiddleLeft: + mOrigin.x = l; + mOrigin.y = b/2.f; + break; + case MiddleCenter: + mOrigin.x = r/2.f; + mOrigin.y = b/2.f; + break; + case MiddleRight: + mOrigin.x = r; + mOrigin.y = b/2.f; + break; + case BottomLeft: + mOrigin.x = l; + mOrigin.y = b; + break; + case BottomCenter: + mOrigin.x = r/2.f; + mOrigin.y = b; + break; + case BottomRight: + mOrigin.x = r; + mOrigin.y = b; + break; + } } void Sprite::setOrigin(int x, int y) { - + mOrigin.set(x, y); } void Sprite::setPosition(int x, int y) { - + mPosition.set(x, y); } void Sprite::setScale(float x, float y) { - + mScale.set(x, y); } void Sprite::setColor(Color color) { - + mColor = color; } - void Sprite::setShader(const Shader* shader) + void Sprite::setShader(Shader* shader) { - + mShader = shader; } void Sprite::setGraphic(const Graphic* graphic) { - + mGraphic = graphic; } void Sprite::render() @@ -60,8 +110,10 @@ namespace JinEngine Shader* shader = Shader::getCurrentShader(); Color c = gl.getColor(); gl.setColor(mColor); - mShader->use(); - mGraphic->render(mPosition.x, mPosition.y, mScale.x, mScale.y, mRotation, mOrigin.x, mOrigin.y); + if(mShader != nullptr) + mShader->use(); + if(mGraphic != nullptr) + mGraphic->render(mPosition.x, mPosition.y, mScale.x, mScale.y, mRotation, mOrigin.x, mOrigin.y); shader->use(); gl.setColor(c); } -- cgit v1.1-26-g67d0