From 9efd8ab3e1b5bf899f9bfa5ec0300da548002d68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandro=20Sobczy=C5=84ski?= <32263891+h4570@users.noreply.github.com> Date: Sun, 7 Feb 2021 14:13:31 +0100 Subject: [PATCH 01/16] Update README.MD --- README.MD | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.MD b/README.MD index f3c2777..6ca9f02 100644 --- a/README.MD +++ b/README.MD @@ -75,6 +75,8 @@ Tyra takes care for you, and rendering, coprocessors communication, synchronizat * Master - monthly releases - tested on PS2 & PCSX2. * Develop - daily builds - can be unstable. +[![Stargazers repo roster for h4570/tyra](https://reporoster.com/stars/h4570/tyra)](https://github.com/h4570/tyra/stargazers) + ## Getting Started ### Installation [![Discord](https://img.shields.io/badge/discord-Tyra-brightgreen?logo=discord)](https://discord.gg/NhhTmg3Gm5) From 142bf60a6dc1487b2a5573b4cb87a474e9a0893e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandro=20Sobczy=C5=84ski?= <32263891+h4570@users.noreply.github.com> Date: Sun, 7 Feb 2021 17:03:16 +0100 Subject: [PATCH 02/16] Update README.MD --- README.MD | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.MD b/README.MD index 6ca9f02..661b02d 100644 --- a/README.MD +++ b/README.MD @@ -25,6 +25,8 @@

+[![Stargazers repo roster for h4570/tyra](https://reporoster.com/stars/h4570/tyra)](https://github.com/h4570/tyra/stargazers) + ## Table of Contents * [About the Project](#about-the-project) @@ -75,8 +77,6 @@ Tyra takes care for you, and rendering, coprocessors communication, synchronizat * Master - monthly releases - tested on PS2 & PCSX2. * Develop - daily builds - can be unstable. -[![Stargazers repo roster for h4570/tyra](https://reporoster.com/stars/h4570/tyra)](https://github.com/h4570/tyra/stargazers) - ## Getting Started ### Installation [![Discord](https://img.shields.io/badge/discord-Tyra-brightgreen?logo=discord)](https://discord.gg/NhhTmg3Gm5) @@ -84,7 +84,6 @@ In our Discord channel, there is detailed tutorial which will help you with sett ### Prerequisites -This is an example of how to list things you need to use the software. * PS2 DEV environment - [PS2DEV](https://github.com/ps2dev/ps2dev) * At least #e8e9edb PS2SDK (06.02.2021) - [PS2SDK](https://github.com/ps2dev/ps2sdk) * PS2 Emulator. For example [PCSX2](https://pcsx2.net/) From 11717f42ebe74ab88b118b52f0df50f0a86e9d0e Mon Sep 17 00:00:00 2001 From: Wellinator Date: Fri, 2 Apr 2021 09:01:14 -0300 Subject: [PATCH 03/16] 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 04/16] 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 05/16] 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 06/16] 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 07/16] 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 08/16] 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 09/16] 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 10/16] 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 11/16] 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 12/16] 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 13/16] 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 14/16] 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 15/16] 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 From 28599512e4488e71dec39bc36c3ab92e6562eacb 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 20:26:58 +0200 Subject: [PATCH 16/16] Update README.MD --- README.MD | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/README.MD b/README.MD index 661b02d..c8ef590 100644 --- a/README.MD +++ b/README.MD @@ -38,22 +38,23 @@ * [Installation](#installation) * [Prerequisites](#prerequisites) * [Roadmap](#roadmap) -* [Tyra team](#tyra-team) * [Contributing](#contributing) * [License](#license) * [Built With](#built-with) * [Acronyms](#acronyms) * [Thanks](#thanks) -## About The Project +## About the Project -sample +Sample code +Sample game ### Samples * [Dolphin](https://github.com/h4570/tyra/tree/master/src/samples/dolphin) * [Floors](https://github.com/h4570/tyra/tree/master/src/samples/floors) +* [Cube](https://github.com/h4570/tyra/tree/master/src/samples/cube) -### About project +### About the project Goal of Tyra project is to provide simple API for PS2 game creation, so you can just run PS2 emulator, grab .obj file, and put it into live in a seconds. Project is on alpha stage, so keep in mind that there are many things to be done and to fix. YouTube tutorials soon! @@ -98,13 +99,6 @@ In our Discord channel, there is detailed tutorial which will help you with sett ### Roadmap for next master release: [Next release roadmap](https://github.com/h4570/tyra/projects/4) -## Tyra team - -Sandro Sobczyński - sandro.sobczynski@gmail.com -[![LinkedIn][linkedin-shield]](https://linkedin.com/in/sandro-sobczyński-28820b15a) -Michał Mostowik - mostek3pl@gmail.com -[![LinkedIn][linkedin-shield]](https://www.linkedin.com/in/notfoxar) - See the [open issues](https://github.com/h4570/tyra/issues) for a list of proposed features (and known issues). ## Contributing @@ -145,6 +139,8 @@ Without these guys, everything would be harder: * And so many other guys. Thanks! Project Link: [https://github.com/h4570/tyra](https://github.com/h4570/tyra) +Sandro Sobczyński - sandro.sobczynski@gmail.com +[![LinkedIn][linkedin-shield]](https://linkedin.com/in/sandro-sobczyński-28820b15a)