From 11717f42ebe74ab88b118b52f0df50f0a86e9d0e Mon Sep 17 00:00:00 2001 From: Wellinator Date: Fri, 2 Apr 2021 09:01:14 -0300 Subject: [PATCH 01/13] Initial setup for Cube sample --- src/samples/cube/Makefile | 33 +++++ src/samples/cube/camera.cpp | 67 +++++++++ src/samples/cube/camera.hpp | 41 ++++++ src/samples/cube/cube.cpp | 32 +++++ src/samples/cube/cube.hpp | 28 ++++ src/samples/cube/main.cpp | 10 ++ src/samples/cube/managers/light_manager.cpp | 148 ++++++++++++++++++++ src/samples/cube/managers/light_manager.hpp | 38 +++++ 8 files changed, 397 insertions(+) create mode 100644 src/samples/cube/Makefile create mode 100644 src/samples/cube/camera.cpp create mode 100644 src/samples/cube/camera.hpp create mode 100644 src/samples/cube/cube.cpp create mode 100644 src/samples/cube/cube.hpp create mode 100644 src/samples/cube/main.cpp create mode 100644 src/samples/cube/managers/light_manager.cpp create mode 100644 src/samples/cube/managers/light_manager.hpp diff --git a/src/samples/cube/Makefile b/src/samples/cube/Makefile new file mode 100644 index 0000000..7d1b17f --- /dev/null +++ b/src/samples/cube/Makefile @@ -0,0 +1,33 @@ +EE_BIN = cube.elf + +TYRA_DIR = ./../../engine + +EE_OBJS = \ + managers/light_manager.o \ + camera.o \ + cube.o \ + main.o + +EE_LIBS = -ltyra + +all: $(EE_BIN) + $(EE_STRIP) --strip-all $(EE_BIN) + mv $(EE_BIN) bin/$(EE_BIN) + rm $(EE_OBJS) + +rebuild-engine: + cd $(TYRA_DIR) && make clean && make + +clean: + rm -f $(EE_OBJS) + +run: $(EE_BIN) + killall -v ps2client || true + ps2client reset + ps2client reset + $(EE_STRIP) --strip-all $(EE_BIN) + mv $(EE_BIN) bin/$(EE_BIN) + rm $(EE_OBJS) + cd bin/ && ps2client execee host:$(EE_BIN) + +include $(TYRA_DIR)/Makefile.pref diff --git a/src/samples/cube/camera.cpp b/src/samples/cube/camera.cpp new file mode 100644 index 0000000..e797c0f --- /dev/null +++ b/src/samples/cube/camera.cpp @@ -0,0 +1,67 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2020, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#include "camera.hpp" + +#include +#include + +const float CAMERA_Y = 30.0F; + +// ---- +// Constructors/Destructors +// ---- + +Camera::Camera(ScreenSettings *t_screen) : CameraBase(t_screen, &position) +{ + PRINT_LOG("Initializing camera"); + verticalLevel = 80.0F; + PRINT_LOG("Camera initialized!"); +} + +Camera::~Camera() {} + +// ---- +// Methods +// ---- + +void Camera::update(Pad &t_pad, Mesh &t_mesh) +{ + rotate(t_pad); + followBy(t_mesh); + lookAt(t_mesh.position); +} + +/** Set camera rotation by pad right joy and update unit circle + * https://en.wikipedia.org/wiki/Unit_circle + * https://www.desmos.com/calculator/3e7iypw4ow + */ +void Camera::rotate(Pad &t_pad) +{ + if (t_pad.rJoyH <= 100) + horizontalLevel -= 0.08; + else if (t_pad.rJoyH >= 200) + horizontalLevel += 0.08; + if (t_pad.rJoyV <= 50 && verticalLevel > 25.0F) + verticalLevel -= 0.9F; + else if (t_pad.rJoyV >= 200 && verticalLevel < 80.0F) + verticalLevel += 0.9F; + unitCirclePosition.x = (sin(horizontalLevel) * verticalLevel); + unitCirclePosition.y = CAMERA_Y; + unitCirclePosition.z = (cos(horizontalLevel) * verticalLevel); +} + +/** Rotate camera around 3D object */ +void Camera::followBy(Mesh &t_mesh) +{ + position.x = unitCirclePosition.x + t_mesh.position.x; + position.y = unitCirclePosition.y + t_mesh.position.y; + position.z = unitCirclePosition.z + t_mesh.position.z; +} diff --git a/src/samples/cube/camera.hpp b/src/samples/cube/camera.hpp new file mode 100644 index 0000000..49735d2 --- /dev/null +++ b/src/samples/cube/camera.hpp @@ -0,0 +1,41 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2020, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#ifndef _CAMERA_ +#define _CAMERA_ + +#include +#include +#include +#include +#include +#include + +/** 3D camera which follow by 3D object. Can be rotated via pad */ +class Camera : public CameraBase +{ + +public: + Vector3 up, position, unitCirclePosition; + float horizontalLevel, verticalLevel; + + Camera(ScreenSettings *t_screen); + ~Camera(); + + void update(Pad &t_pad, Mesh &t_mesh); + void rotate(Pad &t_pad); + void followBy(Mesh &t_mesh); + +protected: + Vector3 *getPosition() { return &position; }; + ScreenSettings screen; +}; + +#endif diff --git a/src/samples/cube/cube.cpp b/src/samples/cube/cube.cpp new file mode 100644 index 0000000..c0b4399 --- /dev/null +++ b/src/samples/cube/cube.cpp @@ -0,0 +1,32 @@ +#include "cube.hpp" + +Cube::Cube(Engine *t_engine) + : engine(t_engine), camera(&t_engine->screen) +{ + return; +} + +Cube::~Cube() +{ + return; +} + +void Cube::onInit(){ + setBgColorAndAmbientColor(); + engine->renderer->setCameraDefinitions(&camera.view, &camera.unitCirclePosition, camera.planes); +} + +void Cube::onUpdate(){ + lightManager.update(); +} + +void Cube::setBgColorAndAmbientColor() +{ + color_t bgColor; + bgColor.r = 0x20; + bgColor.g = 0x20; + bgColor.b = 0x20; + engine->renderer->setWorldColor(bgColor); + Vector3 ambient = Vector3(0.003F, 0.003F, 0.003F); + engine->renderer->setAmbientLight(ambient); +} \ No newline at end of file diff --git a/src/samples/cube/cube.hpp b/src/samples/cube/cube.hpp new file mode 100644 index 0000000..b46c0bc --- /dev/null +++ b/src/samples/cube/cube.hpp @@ -0,0 +1,28 @@ +#ifndef _CUBE_ +#define _CUBE_ + +#include +#include +#include +#include "managers/light_manager.hpp" +#include "./camera.hpp" + +class Cube : public Game +{ + +public: + Cube(Engine *t_engine); + ~Cube(); + + void onInit(); + void onUpdate(); + + Engine *engine; + +private: + void setBgColorAndAmbientColor(); + LightManager lightManager; + Camera camera; +}; + +#endif \ No newline at end of file diff --git a/src/samples/cube/main.cpp b/src/samples/cube/main.cpp new file mode 100644 index 0000000..1b62314 --- /dev/null +++ b/src/samples/cube/main.cpp @@ -0,0 +1,10 @@ +#include "cube.hpp" + +int main() +{ + Engine engine = Engine(); + Cube game = Cube(&engine); + game.engine->init(&game, 128); + SleepThread(); + return 0; +} \ No newline at end of file diff --git a/src/samples/cube/managers/light_manager.cpp b/src/samples/cube/managers/light_manager.cpp new file mode 100644 index 0000000..a87f322 --- /dev/null +++ b/src/samples/cube/managers/light_manager.cpp @@ -0,0 +1,148 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2020, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#include "light_manager.hpp" +#include + +// ---- +// Constructors/Destructors +// ---- + +LightManager::LightManager() +{ + PRINT_LOG("Creating light manager!"); + bulbsCount = 2; + + bulbs = new LightBulb[2]; + bulb1Dir = 0; + bulbs[0].intensity = 1; + bulbs[0].position.set(30.00F, 30.00F, -30.00F); + + bulb2Dir = 1; + bulbs[1].intensity = 1; + bulbs[1].position.set(-30.00F, 30.00F, 30.00F); + + audioOffset = audioTick = 0; + + PRINT_LOG("Light manager created!"); +} + +LightManager::~LightManager() +{ + delete[] bulbs; +} + +// ---- +// Methods +// ---- + +/** Light bulb moving test */ +void LightManager::update() +{ + updateBulb1(); + updateBulb2(); +} + +void LightManager::updateBulb1() +{ + if (bulb1Dir == 1) + { + if (areLightsInverted) + { + bulbs[0].position.x += 0.6F; + bulbs[0].position.z -= 0.6F; + } + else + { + bulbs[0].position.x += 0.6F; + bulbs[0].position.z += 0.6F; + } + } + else + { + if (areLightsInverted) + { + bulbs[0].position.x -= 0.6F; + bulbs[0].position.z += 0.6F; + } + else + { + bulbs[0].position.x -= 0.6F; + bulbs[0].position.z -= 0.6F; + } + } +} + +void LightManager::updateBulb2() +{ + if (bulb2Dir == 1) + { + if (areLightsInverted) + { + bulbs[1].position.x -= 0.6F; + bulbs[1].position.z += 0.6F; + } + else + { + bulbs[1].position.x += 0.6F; + bulbs[1].position.z += 0.6F; + } + } + else + { + if (areLightsInverted) + { + bulbs[1].position.x += 0.6F; + bulbs[1].position.z -= 0.6F; + } + else + { + bulbs[1].position.x -= 0.6F; + bulbs[1].position.z -= 0.6F; + } + } +} + +/** Called by audio thread */ +void LightManager::onAudioTick() +{ + bulb1Dir = bulb1Dir == 1 ? 0 : 1; + bulb2Dir = bulb2Dir == 1 ? 0 : 1; + if (audioTick++ > 17) + { + if (++audioOffset > 3) + { + audioOffset = 0; + if (areLightsInverted) + { + areLightsInverted = false; + bulbs[0].position.x = 20.0F; + bulbs[0].position.z = -20.0F; + + bulbs[1].position.x = -20.0F; + bulbs[1].position.z = 20.0F; + } + else + { + areLightsInverted = true; + bulbs[0].position.x = 20.0F; + bulbs[0].position.z = 20.0F; + + bulbs[1].position.x = -20.0F; + bulbs[1].position.z = -20.0F; + } + } + } + else + { + bulbs[0].intensity += 9; + bulbs[1].intensity += 9; + } +} diff --git a/src/samples/cube/managers/light_manager.hpp b/src/samples/cube/managers/light_manager.hpp new file mode 100644 index 0000000..dbc3bf8 --- /dev/null +++ b/src/samples/cube/managers/light_manager.hpp @@ -0,0 +1,38 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2020, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Sandro Sobczyński +*/ + +#ifndef _LIGHT_MANAGER_ +#define _LIGHT_MANAGER_ + +#include +#include + +/** Class which is maintaining floors objects */ +class LightManager +{ + +public: + LightManager(); + ~LightManager(); + + LightBulb *bulbs; + u8 bulbsCount; + void update(); + void onAudioTick(); + +private: + u8 bulb1Dir, bulb2Dir; + void updateBulb1(); + void updateBulb2(); + u8 audioOffset, areLightsInverted; + u32 audioTick; +}; + +#endif From e43fae88e8c6fcfd77eb0fdda3dda2063b2c39f1 Mon Sep 17 00:00:00 2001 From: Wellinator Date: Wed, 7 Apr 2021 08:17:10 -0300 Subject: [PATCH 02/13] Setup initial cube sample --- src/samples/cube/Makefile | 5 +- src/samples/cube/bin/AUDSRV.IRX | Bin 0 -> 22089 bytes src/samples/cube/bin/meshes/cube/Material.png | Bin 0 -> 266 bytes src/samples/cube/bin/meshes/cube/cube.mtl | 13 ++++ src/samples/cube/bin/meshes/cube/cube.obj | 46 ++++++++++++++ src/samples/cube/cube.cpp | 32 ---------- src/samples/cube/cube.hpp | 28 --------- src/samples/cube/cubes.cpp | 37 +++++++++++ src/samples/cube/cubes.hpp | 32 ++++++++++ src/samples/cube/main.cpp | 5 +- src/samples/cube/objects/cube.cpp | 58 ++++++++++++++++++ src/samples/cube/objects/cube.hpp | 26 ++++++++ 12 files changed, 218 insertions(+), 64 deletions(-) create mode 100644 src/samples/cube/bin/AUDSRV.IRX create mode 100644 src/samples/cube/bin/meshes/cube/Material.png create mode 100644 src/samples/cube/bin/meshes/cube/cube.mtl create mode 100644 src/samples/cube/bin/meshes/cube/cube.obj delete mode 100644 src/samples/cube/cube.cpp delete mode 100644 src/samples/cube/cube.hpp create mode 100644 src/samples/cube/cubes.cpp create mode 100644 src/samples/cube/cubes.hpp create mode 100644 src/samples/cube/objects/cube.cpp create mode 100644 src/samples/cube/objects/cube.hpp diff --git a/src/samples/cube/Makefile b/src/samples/cube/Makefile index 7d1b17f..09c7d18 100644 --- a/src/samples/cube/Makefile +++ b/src/samples/cube/Makefile @@ -3,9 +3,10 @@ EE_BIN = cube.elf TYRA_DIR = ./../../engine EE_OBJS = \ - managers/light_manager.o \ + managers/light_manager.o \ + objects/cube.o \ camera.o \ - cube.o \ + cubes.o \ main.o EE_LIBS = -ltyra diff --git a/src/samples/cube/bin/AUDSRV.IRX b/src/samples/cube/bin/AUDSRV.IRX new file mode 100644 index 0000000000000000000000000000000000000000..8699022a069ae2e0c95039b69342dc202a4fff9e GIT binary patch literal 22089 zcmb7s4}6qYmG-%BCSky|9n!Q;F}3f&04b(8ZPOZXT&E$l=}OmBQE|m3e)WF7=D3RgM(&0i5oRpY4;XzAsW@f*(JSJa1@b;*bQ;zpxBSA7M(;f^+qHUOXT?$OGj75cJXa?Hg*fj1l02|bj-a&M}B@m zPkuq+{b7~QzPdE|u*&%k+lFD+aIxKN7kVwdK%_ie6;7~i3ENR7T?_uwypNO=`ru`; zKz#af^g*>ebs#BUI1r-kHPD;L=Or;XCTpNOF)}47wC{JbCCLX$gLGz5On!DSl|Tt8STKdiF84d+&it*?%A| zpRxV19sQkLwHWC^l4a}go`{Q}UBhVSFxokccA~GEZ6BoI2OP_|j-`=$TdqSS8ZXkr z_sx*89n4>a{8Q+=H2SL!{Z>XFKt14x!O!W>K>s7KDG{RC=%)en(;bqD7>On0GIpQ} zPlzW89j?vcT-)wPxwwqOJ_CPVJTWtyiA1C%Sq)h=%GBUV;bFd7lxMyqbk`tn9mb9| zij<~B_9Y)h9wU*Y#O5W9l%+c!I|7U(V^W&@2-0HElmBX@mi%i_HjuJpBE|BNbZyx{ z@^D1Tmm`h*ezbvgRihsEccMCD^YQ(-rd46gK8gNfpRf$$aSPJPQOOUGE2Ze$CDmDQK{|Du^O5h%>Y~29X|BKg+_ZRN zxym>`lG#zixeH@j$#HS>R`c9^M8D#k7G0H`xF6-5|G0Lt{4+NM=&v=h26M#!WUSeL zGw@C4uUM8)Pc3{juXQk%nJ0SVK(ZF&TL&9c7~>j@aW%%*mc!Vx59@TUDA&GbxpMdn zV=cC7AFwQ4x$4M}pK}wV8IKZkOxIkv72&a1S;#U%ZlbI}#R5cP6S_&EIr z>s@ed0KW=?sU0ypA9p+kd-5r~SHPCnElY$F&_9hVOm}?Z=4IntV}i1z1d(Nl>M)q& zBavkiti@B7w6d}o-j~|)J`d_1z6$lyMjs=Id+*gMa~j+G5%o{bKOG;l>zHI%K2m1q zq>fKqEc>?RpN7xG;U|8s{rNm+|F`Blq;Af;>`T4}m_IqECQ!i7xwNlZ?L%D06JbWG z=WLH4ZD45e9M3s7ocI9j_HE_7%J)*q$BBN9rN5=r-)dAp`pD`p&QpUtXoKB5a8D2- zmWkA5;}v}pA|@EKe!gZOx6-C1Tn8fQMx;mK%UlP19{8(`ZR+uR4c{*H_$KG+i&(1!F_h-fftY?(}dUm=hkRx_K$8u451by+Ip@{4p zdI#4XhwW=i{%rOe(96EXctogoP}>K+W*+kH z9blj25eM8qiL6oG&q7B%-dX34@n6nLC-*v`>sUnF63ZY+Soeo z`mQbcE8E86zP`LIi5R8>sn6T;i`-l-c~i@I%(eL$*fx;-g|(?z-+N)xqv*5uplwlY zTXdM zI6j<{60tnaU(~U7D2jONVZR3R+}sl_)WdZov#KpwF0IHbvS4oQc6?MC?7k_6x_qAV zx=zq1I6pfv#zX-S5~5*ovAXM2ahCYXM^NCc?Rc%3{v*O z*Y`nYV|3!Tv(HvyzHsgH1r@o@ERr2H+;4Kd;eK-i=Ubf7a3)1AlTJhzOa8XSwr!Y; zZOKvH-}Yd>b!%zrN$xc{-}^lrZRMPgP%USnBPE!N^DIA({#>>THV&;(J(o-4S)sUG zM8+{@`-ZMD7t5*d!X^0c{X3BT<$WmF% z)P-|=a(&swdEa~qPrKPqZ@Z+9m6zySatZI(LvM3bK85jfx|Zo4;wWrj|9bgumHRSY ze)bYM&nbyeBnf|cE!JwD?YUNSeV(~(0Q;I)dIjF6W@6Z@W#sjENB*EE%JX7b`uLSR zAI?kn?0qhI&)~jV?u|~)4B*T<3I7{Aa4+�^gwJP|q;W)$}Kx2N<8+>#)wqLbrc7 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 -{ - return; -} - -Cube::~Cube() -{ - return; -} - -void Cube::onInit(){ - setBgColorAndAmbientColor(); - engine->renderer->setCameraDefinitions(&camera.view, &camera.unitCirclePosition, camera.planes); -} - -void Cube::onUpdate(){ - lightManager.update(); -} - -void Cube::setBgColorAndAmbientColor() -{ - color_t bgColor; - bgColor.r = 0x20; - bgColor.g = 0x20; - bgColor.b = 0x20; - engine->renderer->setWorldColor(bgColor); - Vector3 ambient = Vector3(0.003F, 0.003F, 0.003F); - engine->renderer->setAmbientLight(ambient); -} \ No newline at end of file diff --git a/src/samples/cube/cube.hpp b/src/samples/cube/cube.hpp deleted file mode 100644 index b46c0bc..0000000 --- a/src/samples/cube/cube.hpp +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef _CUBE_ -#define _CUBE_ - -#include -#include -#include -#include "managers/light_manager.hpp" -#include "./camera.hpp" - -class Cube : public Game -{ - -public: - Cube(Engine *t_engine); - ~Cube(); - - void onInit(); - void onUpdate(); - - Engine *engine; - -private: - void setBgColorAndAmbientColor(); - LightManager lightManager; - Camera camera; -}; - -#endif \ No newline at end of file diff --git a/src/samples/cube/cubes.cpp b/src/samples/cube/cubes.cpp new file mode 100644 index 0000000..3e61895 --- /dev/null +++ b/src/samples/cube/cubes.cpp @@ -0,0 +1,37 @@ +#include "cubes.hpp" + +Cubes::Cubes(Engine *t_engine) + : engine(t_engine), camera(&t_engine->screen) +{ + PRINT_LOG("Initing cubes sample"); +} + +Cubes::~Cubes() +{ + return; +} + +void Cubes::onInit(){ + texRepo = engine->renderer->getTextureRepository(); + cube = new Cube(texRepo); + setBgColorAndAmbientColor(); + engine->renderer->setCameraDefinitions(&camera.view, &camera.unitCirclePosition, camera.planes); +} + +void Cubes::onUpdate(){ + lightManager.update(); + camera.update(engine->pad, cube->mesh); + cube->update(engine->pad, camera); + engine->renderer->draw(cube->mesh); +} + +void Cubes::setBgColorAndAmbientColor() +{ + color_t bgColor; + bgColor.r = 0x50; + bgColor.g = 0x50; + bgColor.b = 0x50; + engine->renderer->setWorldColor(bgColor); + Vector3 ambient = Vector3(0.2F, 0.2F, 0.2F); + engine->renderer->setAmbientLight(ambient); +} \ No newline at end of file diff --git a/src/samples/cube/cubes.hpp b/src/samples/cube/cubes.hpp new file mode 100644 index 0000000..0a14eb6 --- /dev/null +++ b/src/samples/cube/cubes.hpp @@ -0,0 +1,32 @@ +#ifndef _CUBES_ +#define _CUBES_ + +#include +#include +#include +#include "managers/light_manager.hpp" +#include "modules/texture_repository.hpp" +#include "camera.hpp" +#include "objects/cube.hpp" + +class Cubes : public Game +{ + + public: + Cubes(Engine *t_engine); + ~Cubes(); + + void onInit(); + void onUpdate(); + + Engine *engine; + + private: + void setBgColorAndAmbientColor(); + TextureRepository *texRepo; + Cube *cube; + LightManager lightManager; + Camera camera; +}; + +#endif \ No newline at end of file diff --git a/src/samples/cube/main.cpp b/src/samples/cube/main.cpp index 1b62314..dc03ec4 100644 --- a/src/samples/cube/main.cpp +++ b/src/samples/cube/main.cpp @@ -1,9 +1,10 @@ -#include "cube.hpp" +#include "cubes.hpp" int main() { + PRINT_LOG("INIT"); Engine engine = Engine(); - Cube game = Cube(&engine); + Cubes game = Cubes(&engine); game.engine->init(&game, 128); SleepThread(); return 0; diff --git a/src/samples/cube/objects/cube.cpp b/src/samples/cube/objects/cube.cpp new file mode 100644 index 0000000..60a660b --- /dev/null +++ b/src/samples/cube/objects/cube.cpp @@ -0,0 +1,58 @@ +#include "cube.hpp" +#include +#include +#include + +// ---- +// Constructors/Destructors +// ---- + +Cube::Cube( TextureRepository *t_texRepo ) +{ + PRINT_LOG("Creating cube"); + texRepo = t_texRepo; + speed = 1.5F; + + mesh.loadObj("meshes/cube/", "cube", 6.0F, true); + mesh.position.set(20.00F, 40.00F, 10.00F); + mesh.rotation.x = -1.566F; + mesh.rotation.z = 1.566F; + + texRepo->addByMesh("meshes/cube/", mesh, PNG); + + PRINT_LOG("Cube object created!"); +} + +void Cube::update(const Pad &t_pad, const Camera &t_camera) +{ + Vector3 *nextPos = getNextPosition(t_pad, t_camera); +} + +Vector3 *Cube::getNextPosition(const Pad &t_pad, const Camera &t_camera) +{ + Vector3 *result = new Vector3(mesh.position); + Vector3 normalizedCamera = Vector3(t_camera.unitCirclePosition); + normalizedCamera.normalize(); + normalizedCamera *= speed; + if (t_pad.lJoyV <= 100) + { + result->x += -normalizedCamera.x; + result->z += -normalizedCamera.z; + } + else if (t_pad.lJoyV >= 200) + { + result->x += normalizedCamera.x; + result->z += normalizedCamera.z; + } + if (t_pad.lJoyH <= 100) + { + result->x += -normalizedCamera.z; + result->z += normalizedCamera.x; + } + else if (t_pad.lJoyH >= 200) + { + result->x += normalizedCamera.z; + result->z += -normalizedCamera.x; + } + return result; +} \ No newline at end of file diff --git a/src/samples/cube/objects/cube.hpp b/src/samples/cube/objects/cube.hpp new file mode 100644 index 0000000..22abe35 --- /dev/null +++ b/src/samples/cube/objects/cube.hpp @@ -0,0 +1,26 @@ +#ifndef _CUBE_ +#define _CUBE_ + +#include "../camera.hpp" +#include +#include +#include +#include "modules/texture_repository.hpp" + +/** Cube 3D object class */ +class Cube +{ + public: + Mesh mesh; + Cube( TextureRepository *t_texRepo ); + ~Cube(); + + void update(const Pad &t_pad, const Camera &t_camera); + + private: + TextureRepository *texRepo; + Vector3 *getNextPosition(const Pad &t_pad, const Camera &t_camera); + float speed; +}; + +#endif From b749a80a25ed295e37c7ebef802c9a93af1679a7 Mon Sep 17 00:00:00 2001 From: Wellinator Date: Thu, 8 Apr 2021 08:33:06 -0300 Subject: [PATCH 03/13] Add rotation function --- .gitignore | 1 + src/samples/cube/objects/cube.cpp | 9 +++++++++ src/samples/cube/objects/cube.hpp | 1 + 3 files changed, 11 insertions(+) diff --git a/.gitignore b/.gitignore index d1350e8..489b289 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .vscode/ +.idea/ # --- diff --git a/src/samples/cube/objects/cube.cpp b/src/samples/cube/objects/cube.cpp index 60a660b..cb1f8ab 100644 --- a/src/samples/cube/objects/cube.cpp +++ b/src/samples/cube/objects/cube.cpp @@ -25,6 +25,7 @@ Cube::Cube( TextureRepository *t_texRepo ) void Cube::update(const Pad &t_pad, const Camera &t_camera) { + rotate(t_pad); Vector3 *nextPos = getNextPosition(t_pad, t_camera); } @@ -55,4 +56,12 @@ Vector3 *Cube::getNextPosition(const Pad &t_pad, const Camera &t_camera) result->z += -normalizedCamera.x; } return result; +} + +void Cube::rotate(const Pad &t_pad){ + //if (t_pad.rJoyH >= 200) + //else if (t_pad.rJoyH <= 100) + mesh.rotation.x += 0.01; + mesh.rotation.y += 0.01; + mesh.rotation.z += 0.01; } \ No newline at end of file diff --git a/src/samples/cube/objects/cube.hpp b/src/samples/cube/objects/cube.hpp index 22abe35..e8350bf 100644 --- a/src/samples/cube/objects/cube.hpp +++ b/src/samples/cube/objects/cube.hpp @@ -20,6 +20,7 @@ class Cube private: TextureRepository *texRepo; Vector3 *getNextPosition(const Pad &t_pad, const Camera &t_camera); + void rotate(const Pad &t_pad); float speed; }; From 444990a26286a3753a414942b3219a3549339015 Mon Sep 17 00:00:00 2001 From: Wellinator Date: Fri, 9 Apr 2021 13:16:50 -0300 Subject: [PATCH 04/13] Change background color --- src/samples/cube/cubes.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/samples/cube/cubes.cpp b/src/samples/cube/cubes.cpp index 3e61895..808e942 100644 --- a/src/samples/cube/cubes.cpp +++ b/src/samples/cube/cubes.cpp @@ -28,9 +28,9 @@ void Cubes::onUpdate(){ void Cubes::setBgColorAndAmbientColor() { color_t bgColor; - bgColor.r = 0x50; - bgColor.g = 0x50; - bgColor.b = 0x50; + bgColor.r = 0x20; + bgColor.g = 0x20; + bgColor.b = 0x20; engine->renderer->setWorldColor(bgColor); Vector3 ambient = Vector3(0.2F, 0.2F, 0.2F); engine->renderer->setAmbientLight(ambient); From e022fcdafee8d4b397d00330d8f716148f25b826 Mon Sep 17 00:00:00 2001 From: Wellinator Date: Fri, 9 Apr 2021 13:18:34 -0300 Subject: [PATCH 05/13] Update cube mesh object --- src/samples/cube/bin/meshes/cube/Material.png | Bin 266 -> 0 bytes src/samples/cube/bin/meshes/cube/cube.mtl | 4 ++-- src/samples/cube/bin/meshes/cube/cube.obj | 2 +- src/samples/cube/bin/meshes/cube/cube.png | Bin 0 -> 11599 bytes 4 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 src/samples/cube/bin/meshes/cube/Material.png create mode 100644 src/samples/cube/bin/meshes/cube/cube.png diff --git a/src/samples/cube/bin/meshes/cube/Material.png b/src/samples/cube/bin/meshes/cube/Material.png deleted file mode 100644 index 617d353e0d67a14a2952b2a98375eb8a50b97d79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 266 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 literal 0 HcmV?d00001 From 4160bddc4b8752ccb0e7363bc7f2dc3de917ac32 Mon Sep 17 00:00:00 2001 From: Wellinator Date: Fri, 9 Apr 2021 13:19:12 -0300 Subject: [PATCH 06/13] Update scale and speed rotation --- src/samples/cube/objects/cube.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/samples/cube/objects/cube.cpp b/src/samples/cube/objects/cube.cpp index cb1f8ab..b6b4123 100644 --- a/src/samples/cube/objects/cube.cpp +++ b/src/samples/cube/objects/cube.cpp @@ -11,9 +11,9 @@ Cube::Cube( TextureRepository *t_texRepo ) { PRINT_LOG("Creating cube"); texRepo = t_texRepo; - speed = 1.5F; + speed = 1.2F; - mesh.loadObj("meshes/cube/", "cube", 6.0F, true); + mesh.loadObj("meshes/cube/", "cube", 10.0F, true); mesh.position.set(20.00F, 40.00F, 10.00F); mesh.rotation.x = -1.566F; mesh.rotation.z = 1.566F; @@ -61,7 +61,7 @@ Vector3 *Cube::getNextPosition(const Pad &t_pad, const Camera &t_camera) void Cube::rotate(const Pad &t_pad){ //if (t_pad.rJoyH >= 200) //else if (t_pad.rJoyH <= 100) - mesh.rotation.x += 0.01; - mesh.rotation.y += 0.01; - mesh.rotation.z += 0.01; + mesh.rotation.x += (0.01 * speed); + mesh.rotation.y += (0.01 * speed); + mesh.rotation.z += (0.01 * speed); } \ No newline at end of file From 9268628ccd89b9fdfae7b14a87f13b04f148751b Mon Sep 17 00:00:00 2001 From: Wellinator Date: Fri, 9 Apr 2021 13:23:25 -0300 Subject: [PATCH 07/13] update .gitignore --- src/samples/cube/.gitignore | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 src/samples/cube/.gitignore diff --git a/src/samples/cube/.gitignore b/src/samples/cube/.gitignore new file mode 100644 index 0000000..23c6dd9 --- /dev/null +++ b/src/samples/cube/.gitignore @@ -0,0 +1,3 @@ +.vscode/ +bin/** +fonts/** \ No newline at end of file From 24509f7f201e317163cf69278b46cb7f5d764fb7 Mon Sep 17 00:00:00 2001 From: Wellinator Date: Fri, 9 Apr 2021 13:26:06 -0300 Subject: [PATCH 08/13] remove bin dir --- src/samples/cube/bin/AUDSRV.IRX | Bin 22089 -> 0 bytes src/samples/cube/bin/meshes/cube/cube.mtl | 13 ------ src/samples/cube/bin/meshes/cube/cube.obj | 46 ---------------------- src/samples/cube/bin/meshes/cube/cube.png | Bin 11599 -> 0 bytes 4 files changed, 59 deletions(-) delete mode 100644 src/samples/cube/bin/AUDSRV.IRX delete mode 100644 src/samples/cube/bin/meshes/cube/cube.mtl delete mode 100644 src/samples/cube/bin/meshes/cube/cube.obj delete mode 100644 src/samples/cube/bin/meshes/cube/cube.png diff --git a/src/samples/cube/bin/AUDSRV.IRX b/src/samples/cube/bin/AUDSRV.IRX deleted file mode 100644 index 8699022a069ae2e0c95039b69342dc202a4fff9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22089 zcmb7s4}6qYmG-%BCSky|9n!Q;F}3f&04b(8ZPOZXT&E$l=}OmBQE|m3e)WF7=D3RgM(&0i5oRpY4;XzAsW@f*(JSJa1@b;*bQ;zpxBSA7M(;f^+qHUOXT?$OGj75cJXa?Hg*fj1l02|bj-a&M}B@m zPkuq+{b7~QzPdE|u*&%k+lFD+aIxKN7kVwdK%_ie6;7~i3ENR7T?_uwypNO=`ru`; zKz#af^g*>ebs#BUI1r-kHPD;L=Or;XCTpNOF)}47wC{JbCCLX$gLGz5On!DSl|Tt8STKdiF84d+&it*?%A| zpRxV19sQkLwHWC^l4a}go`{Q}UBhVSFxokccA~GEZ6BoI2OP_|j-`=$TdqSS8ZXkr z_sx*89n4>a{8Q+=H2SL!{Z>XFKt14x!O!W>K>s7KDG{RC=%)en(;bqD7>On0GIpQ} zPlzW89j?vcT-)wPxwwqOJ_CPVJTWtyiA1C%Sq)h=%GBUV;bFd7lxMyqbk`tn9mb9| zij<~B_9Y)h9wU*Y#O5W9l%+c!I|7U(V^W&@2-0HElmBX@mi%i_HjuJpBE|BNbZyx{ z@^D1Tmm`h*ezbvgRihsEccMCD^YQ(-rd46gK8gNfpRf$$aSPJPQOOUGE2Ze$CDmDQK{|Du^O5h%>Y~29X|BKg+_ZRN zxym>`lG#zixeH@j$#HS>R`c9^M8D#k7G0H`xF6-5|G0Lt{4+NM=&v=h26M#!WUSeL zGw@C4uUM8)Pc3{juXQk%nJ0SVK(ZF&TL&9c7~>j@aW%%*mc!Vx59@TUDA&GbxpMdn zV=cC7AFwQ4x$4M}pK}wV8IKZkOxIkv72&a1S;#U%ZlbI}#R5cP6S_&EIr z>s@ed0KW=?sU0ypA9p+kd-5r~SHPCnElY$F&_9hVOm}?Z=4IntV}i1z1d(Nl>M)q& zBavkiti@B7w6d}o-j~|)J`d_1z6$lyMjs=Id+*gMa~j+G5%o{bKOG;l>zHI%K2m1q zq>fKqEc>?RpN7xG;U|8s{rNm+|F`Blq;Af;>`T4}m_IqECQ!i7xwNlZ?L%D06JbWG z=WLH4ZD45e9M3s7ocI9j_HE_7%J)*q$BBN9rN5=r-)dAp`pD`p&QpUtXoKB5a8D2- zmWkA5;}v}pA|@EKe!gZOx6-C1Tn8fQMx;mK%UlP19{8(`ZR+uR4c{*H_$KG+i&(1!F_h-fftY?(}dUm=hkRx_K$8u451by+Ip@{4p zdI#4XhwW=i{%rOe(96EXctogoP}>K+W*+kH z9blj25eM8qiL6oG&q7B%-dX34@n6nLC-*v`>sUnF63ZY+Soeo z`mQbcE8E86zP`LIi5R8>sn6T;i`-l-c~i@I%(eL$*fx;-g|(?z-+N)xqv*5uplwlY zTXdM zI6j<{60tnaU(~U7D2jONVZR3R+}sl_)WdZov#KpwF0IHbvS4oQc6?MC?7k_6x_qAV zx=zq1I6pfv#zX-S5~5*ovAXM2ahCYXM^NCc?Rc%3{v*O z*Y`nYV|3!Tv(HvyzHsgH1r@o@ERr2H+;4Kd;eK-i=Ubf7a3)1AlTJhzOa8XSwr!Y; zZOKvH-}Yd>b!%zrN$xc{-}^lrZRMPgP%USnBPE!N^DIA({#>>THV&;(J(o-4S)sUG zM8+{@`-ZMD7t5*d!X^0c{X3BT<$WmF% z)P-|=a(&swdEa~qPrKPqZ@Z+9m6zySatZI(LvM3bK85jfx|Zo4;wWrj|9bgumHRSY ze)bYM&nbyeBnf|cE!JwD?YUNSeV(~(0Q;I)dIjF6W@6Z@W#sjENB*EE%JX7b`uLSR zAI?kn?0qhI&)~jV?u|~)4B*T<3I7{Aa4+�^gwJP|q;W)$}Kx2N<8+>#)wqLbrc7 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 From 9dd69317e38ae500bf7fffbec766484857fefe22 Mon Sep 17 00:00:00 2001 From: Wellinator Date: Fri, 9 Apr 2021 13:30:41 -0300 Subject: [PATCH 09/13] Add readme file --- src/samples/cube/readme.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/samples/cube/readme.txt diff --git a/src/samples/cube/readme.txt b/src/samples/cube/readme.txt new file mode 100644 index 0000000..ca1a6d1 --- /dev/null +++ b/src/samples/cube/readme.txt @@ -0,0 +1 @@ +unpack this to: tyra/src/samples/cube/bin \ No newline at end of file From 18ba08dc7a755c7e21d330020864598c798c9ec9 Mon Sep 17 00:00:00 2001 From: Wellinator Date: Fri, 9 Apr 2021 13:36:40 -0300 Subject: [PATCH 10/13] Remove light_manager --- src/samples/cube/Makefile | 1 - src/samples/cube/cubes.cpp | 1 - src/samples/cube/cubes.hpp | 2 - src/samples/cube/managers/light_manager.cpp | 148 -------------------- src/samples/cube/managers/light_manager.hpp | 38 ----- 5 files changed, 190 deletions(-) delete mode 100644 src/samples/cube/managers/light_manager.cpp delete mode 100644 src/samples/cube/managers/light_manager.hpp diff --git a/src/samples/cube/Makefile b/src/samples/cube/Makefile index 09c7d18..09720cc 100644 --- a/src/samples/cube/Makefile +++ b/src/samples/cube/Makefile @@ -3,7 +3,6 @@ EE_BIN = cube.elf TYRA_DIR = ./../../engine EE_OBJS = \ - managers/light_manager.o \ objects/cube.o \ camera.o \ cubes.o \ diff --git a/src/samples/cube/cubes.cpp b/src/samples/cube/cubes.cpp index 808e942..6032ac2 100644 --- a/src/samples/cube/cubes.cpp +++ b/src/samples/cube/cubes.cpp @@ -19,7 +19,6 @@ void Cubes::onInit(){ } void Cubes::onUpdate(){ - lightManager.update(); camera.update(engine->pad, cube->mesh); cube->update(engine->pad, camera); engine->renderer->draw(cube->mesh); diff --git a/src/samples/cube/cubes.hpp b/src/samples/cube/cubes.hpp index 0a14eb6..3188df1 100644 --- a/src/samples/cube/cubes.hpp +++ b/src/samples/cube/cubes.hpp @@ -4,7 +4,6 @@ #include #include #include -#include "managers/light_manager.hpp" #include "modules/texture_repository.hpp" #include "camera.hpp" #include "objects/cube.hpp" @@ -25,7 +24,6 @@ class Cubes : public Game void setBgColorAndAmbientColor(); TextureRepository *texRepo; Cube *cube; - LightManager lightManager; Camera camera; }; diff --git a/src/samples/cube/managers/light_manager.cpp b/src/samples/cube/managers/light_manager.cpp deleted file mode 100644 index a87f322..0000000 --- a/src/samples/cube/managers/light_manager.cpp +++ /dev/null @@ -1,148 +0,0 @@ -/* -# ______ ____ ___ -# | \/ ____| |___| -# | | | \ | | -#----------------------------------------------------------------------- -# Copyright 2020, tyra - https://github.com/h4570/tyra -# Licenced under Apache License 2.0 -# Sandro Sobczyński -*/ - -#include "light_manager.hpp" -#include - -// ---- -// Constructors/Destructors -// ---- - -LightManager::LightManager() -{ - PRINT_LOG("Creating light manager!"); - bulbsCount = 2; - - bulbs = new LightBulb[2]; - bulb1Dir = 0; - bulbs[0].intensity = 1; - bulbs[0].position.set(30.00F, 30.00F, -30.00F); - - bulb2Dir = 1; - bulbs[1].intensity = 1; - bulbs[1].position.set(-30.00F, 30.00F, 30.00F); - - audioOffset = audioTick = 0; - - PRINT_LOG("Light manager created!"); -} - -LightManager::~LightManager() -{ - delete[] bulbs; -} - -// ---- -// Methods -// ---- - -/** Light bulb moving test */ -void LightManager::update() -{ - updateBulb1(); - updateBulb2(); -} - -void LightManager::updateBulb1() -{ - if (bulb1Dir == 1) - { - if (areLightsInverted) - { - bulbs[0].position.x += 0.6F; - bulbs[0].position.z -= 0.6F; - } - else - { - bulbs[0].position.x += 0.6F; - bulbs[0].position.z += 0.6F; - } - } - else - { - if (areLightsInverted) - { - bulbs[0].position.x -= 0.6F; - bulbs[0].position.z += 0.6F; - } - else - { - bulbs[0].position.x -= 0.6F; - bulbs[0].position.z -= 0.6F; - } - } -} - -void LightManager::updateBulb2() -{ - if (bulb2Dir == 1) - { - if (areLightsInverted) - { - bulbs[1].position.x -= 0.6F; - bulbs[1].position.z += 0.6F; - } - else - { - bulbs[1].position.x += 0.6F; - bulbs[1].position.z += 0.6F; - } - } - else - { - if (areLightsInverted) - { - bulbs[1].position.x += 0.6F; - bulbs[1].position.z -= 0.6F; - } - else - { - bulbs[1].position.x -= 0.6F; - bulbs[1].position.z -= 0.6F; - } - } -} - -/** Called by audio thread */ -void LightManager::onAudioTick() -{ - bulb1Dir = bulb1Dir == 1 ? 0 : 1; - bulb2Dir = bulb2Dir == 1 ? 0 : 1; - if (audioTick++ > 17) - { - if (++audioOffset > 3) - { - audioOffset = 0; - if (areLightsInverted) - { - areLightsInverted = false; - bulbs[0].position.x = 20.0F; - bulbs[0].position.z = -20.0F; - - bulbs[1].position.x = -20.0F; - bulbs[1].position.z = 20.0F; - } - else - { - areLightsInverted = true; - bulbs[0].position.x = 20.0F; - bulbs[0].position.z = 20.0F; - - bulbs[1].position.x = -20.0F; - bulbs[1].position.z = -20.0F; - } - } - } - else - { - bulbs[0].intensity += 9; - bulbs[1].intensity += 9; - } -} diff --git a/src/samples/cube/managers/light_manager.hpp b/src/samples/cube/managers/light_manager.hpp deleted file mode 100644 index dbc3bf8..0000000 --- a/src/samples/cube/managers/light_manager.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/* -# ______ ____ ___ -# | \/ ____| |___| -# | | | \ | | -#----------------------------------------------------------------------- -# Copyright 2020, tyra - https://github.com/h4570/tyra -# Licenced under Apache License 2.0 -# Sandro Sobczyński -*/ - -#ifndef _LIGHT_MANAGER_ -#define _LIGHT_MANAGER_ - -#include -#include - -/** Class which is maintaining floors objects */ -class LightManager -{ - -public: - LightManager(); - ~LightManager(); - - LightBulb *bulbs; - u8 bulbsCount; - void update(); - void onAudioTick(); - -private: - u8 bulb1Dir, bulb2Dir; - void updateBulb1(); - void updateBulb2(); - u8 audioOffset, areLightsInverted; - u32 audioTick; -}; - -#endif From 94f6e9fbf24f2daa1bf1670e2ccc37a1ebbdb2af Mon Sep 17 00:00:00 2001 From: Wellinator Date: Tue, 13 Apr 2021 08:23:46 -0300 Subject: [PATCH 11/13] Add header in all files in cube sample --- src/samples/cube/camera.cpp | 2 +- src/samples/cube/camera.hpp | 2 +- src/samples/cube/cubes.cpp | 10 ++++++++++ src/samples/cube/cubes.hpp | 10 ++++++++++ src/samples/cube/main.cpp | 10 ++++++++++ src/samples/cube/objects/cube.cpp | 10 ++++++++++ src/samples/cube/objects/cube.hpp | 10 ++++++++++ 7 files changed, 52 insertions(+), 2 deletions(-) diff --git a/src/samples/cube/camera.cpp b/src/samples/cube/camera.cpp index e797c0f..4761802 100644 --- a/src/samples/cube/camera.cpp +++ b/src/samples/cube/camera.cpp @@ -5,7 +5,7 @@ #----------------------------------------------------------------------- # Copyright 2020, tyra - https://github.com/h4570/tyra # Licenced under Apache License 2.0 -# Sandro Sobczyński +# Wellington Carvalho */ #include "camera.hpp" diff --git a/src/samples/cube/camera.hpp b/src/samples/cube/camera.hpp index 49735d2..ab5a263 100644 --- a/src/samples/cube/camera.hpp +++ b/src/samples/cube/camera.hpp @@ -5,7 +5,7 @@ #----------------------------------------------------------------------- # Copyright 2020, tyra - https://github.com/h4570/tyra # Licenced under Apache License 2.0 -# Sandro Sobczyński +# Wellington Carvalho */ #ifndef _CAMERA_ diff --git a/src/samples/cube/cubes.cpp b/src/samples/cube/cubes.cpp index 6032ac2..55608a5 100644 --- a/src/samples/cube/cubes.cpp +++ b/src/samples/cube/cubes.cpp @@ -1,3 +1,13 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2020, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Wellington Carvalho +*/ + #include "cubes.hpp" Cubes::Cubes(Engine *t_engine) diff --git a/src/samples/cube/cubes.hpp b/src/samples/cube/cubes.hpp index 3188df1..8950d76 100644 --- a/src/samples/cube/cubes.hpp +++ b/src/samples/cube/cubes.hpp @@ -1,3 +1,13 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2020, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Wellington Carvalho +*/ + #ifndef _CUBES_ #define _CUBES_ diff --git a/src/samples/cube/main.cpp b/src/samples/cube/main.cpp index dc03ec4..a331814 100644 --- a/src/samples/cube/main.cpp +++ b/src/samples/cube/main.cpp @@ -1,3 +1,13 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2020, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Wellington Carvalho +*/ + #include "cubes.hpp" int main() diff --git a/src/samples/cube/objects/cube.cpp b/src/samples/cube/objects/cube.cpp index b6b4123..45a8854 100644 --- a/src/samples/cube/objects/cube.cpp +++ b/src/samples/cube/objects/cube.cpp @@ -1,3 +1,13 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2020, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Wellington Carvalho +*/ + #include "cube.hpp" #include #include diff --git a/src/samples/cube/objects/cube.hpp b/src/samples/cube/objects/cube.hpp index e8350bf..77845e9 100644 --- a/src/samples/cube/objects/cube.hpp +++ b/src/samples/cube/objects/cube.hpp @@ -1,3 +1,13 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2020, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Wellington Carvalho +*/ + #ifndef _CUBE_ #define _CUBE_ From 7203f6f5c49f02a657e83354c8382b69c401822b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandro=20Sobczy=C5=84ski?= <32263891+h4570@users.noreply.github.com> Date: Tue, 13 Apr 2021 17:13:58 +0200 Subject: [PATCH 12/13] Delete readme.txt --- src/samples/cube/readme.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 src/samples/cube/readme.txt diff --git a/src/samples/cube/readme.txt b/src/samples/cube/readme.txt deleted file mode 100644 index ca1a6d1..0000000 --- a/src/samples/cube/readme.txt +++ /dev/null @@ -1 +0,0 @@ -unpack this to: tyra/src/samples/cube/bin \ No newline at end of file From f34284591fae20240ae0bd1da7da049e69119e3a Mon Sep 17 00:00:00 2001 From: Wellinator Date: Tue, 13 Apr 2021 13:48:29 -0300 Subject: [PATCH 13/13] Add README.MD --- src/samples/cube/README.MD | 21 +++++++++++++++++++++ src/samples/cube/readme.txt | 1 - 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 src/samples/cube/README.MD delete mode 100644 src/samples/cube/readme.txt diff --git a/src/samples/cube/README.MD b/src/samples/cube/README.MD new file mode 100644 index 0000000..51260e0 --- /dev/null +++ b/src/samples/cube/README.MD @@ -0,0 +1,21 @@ + +## Cube Sample + +### Features + +- Rotating Cube + + + +### Assets + +[Download](http://apgcglz.cluster028.hosting.ovh.net/tyra/1.X.X/samples/cube/assets.zip) (Unpack this in "`/your-tyra-dir/samples/cube/bin`") + + +### Screenshot + +[![Cube screenshot][Cube-screenshot]](#) + + + +[Cube-screenshot]: http://apgcglz.cluster028.hosting.ovh.net/tyra/1.X.X/samples/cube/cube.gif \ No newline at end of file diff --git a/src/samples/cube/readme.txt b/src/samples/cube/readme.txt deleted file mode 100644 index ca1a6d1..0000000 --- a/src/samples/cube/readme.txt +++ /dev/null @@ -1 +0,0 @@ -unpack this to: tyra/src/samples/cube/bin \ No newline at end of file