Merge pull request #6 from h4570/develop

Update develop to newest version
This commit is contained in:
Michał Mostowik
2021-04-18 22:18:13 +02:00
committed by GitHub
12 changed files with 396 additions and 12 deletions
+1
View File
@@ -1,4 +1,5 @@
.vscode/ .vscode/
.idea/
# --- # ---
+9 -12
View File
@@ -25,6 +25,8 @@
</p> </p>
</p> </p>
[![Stargazers repo roster for h4570/tyra](https://reporoster.com/stars/h4570/tyra)](https://github.com/h4570/tyra/stargazers)
## Table of Contents ## Table of Contents
* [About the Project](#about-the-project) * [About the Project](#about-the-project)
@@ -36,22 +38,23 @@
* [Installation](#installation) * [Installation](#installation)
* [Prerequisites](#prerequisites) * [Prerequisites](#prerequisites)
* [Roadmap](#roadmap) * [Roadmap](#roadmap)
* [Tyra team](#tyra-team)
* [Contributing](#contributing) * [Contributing](#contributing)
* [License](#license) * [License](#license)
* [Built With](#built-with) * [Built With](#built-with)
* [Acronyms](#acronyms) * [Acronyms](#acronyms)
* [Thanks](#thanks) * [Thanks](#thanks)
## About The Project ## About the Project
<img src="http://apgcglz.cluster028.hosting.ovh.net/tyra/1.31.2/tyra.gif" alt="sample" width="600" height="auto"> <img src="http://apgcglz.cluster028.hosting.ovh.net/tyra/1.31.2/tyra.gif" alt="Sample code" width="600" height="auto">
<img src="http://apgcglz.cluster028.hosting.ovh.net/tyra/1.31.2/samples/dolphin/dolphin.gif " alt="Sample game" width="500" height="auto">
### Samples ### Samples
* [Dolphin](https://github.com/h4570/tyra/tree/master/src/samples/dolphin) * [Dolphin](https://github.com/h4570/tyra/tree/master/src/samples/dolphin)
* [Floors](https://github.com/h4570/tyra/tree/master/src/samples/floors) * [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. 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! YouTube tutorials soon!
@@ -82,7 +85,6 @@ In our Discord channel, there is detailed tutorial which will help you with sett
### Prerequisites ### 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) * PS2 DEV environment - [PS2DEV](https://github.com/ps2dev/ps2dev)
* At least #e8e9edb PS2SDK (06.02.2021) - [PS2SDK](https://github.com/ps2dev/ps2sdk) * At least #e8e9edb PS2SDK (06.02.2021) - [PS2SDK](https://github.com/ps2dev/ps2sdk)
* PS2 Emulator. For example [PCSX2](https://pcsx2.net/) * PS2 Emulator. For example [PCSX2](https://pcsx2.net/)
@@ -97,13 +99,6 @@ This is an example of how to list things you need to use the software.
### Roadmap for next master release: ### Roadmap for next master release:
[Next release roadmap](https://github.com/h4570/tyra/projects/4) [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). See the [open issues](https://github.com/h4570/tyra/issues) for a list of proposed features (and known issues).
## Contributing ## Contributing
@@ -144,6 +139,8 @@ Without these guys, everything would be harder:
* And so many other guys. Thanks! * And so many other guys. Thanks!
Project Link: [https://github.com/h4570/tyra](https://github.com/h4570/tyra) 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)
<br /> <br />
<a href="https://github.com/h4570/tyra"> <a href="https://github.com/h4570/tyra">
+3
View File
@@ -0,0 +1,3 @@
.vscode/
bin/**
fonts/**
+33
View File
@@ -0,0 +1,33 @@
EE_BIN = cube.elf
TYRA_DIR = ./../../engine
EE_OBJS = \
objects/cube.o \
camera.o \
cubes.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
+21
View File
@@ -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
+67
View File
@@ -0,0 +1,67 @@
/*
# ______ ____ ___
# | \/ ____| |___|
# | | | \ | |
#-----------------------------------------------------------------------
# Copyright 2020, tyra - https://github.com/h4570/tyra
# Licenced under Apache License 2.0
# Wellington Carvalho <wellcoj@gmail.com>
*/
#include "camera.hpp"
#include <utils/debug.hpp>
#include <fastmath.h>
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;
}
+41
View File
@@ -0,0 +1,41 @@
/*
# ______ ____ ___
# | \/ ____| |___|
# | | | \ | |
#-----------------------------------------------------------------------
# Copyright 2020, tyra - https://github.com/h4570/tyra
# Licenced under Apache License 2.0
# Wellington Carvalho <wellcoj@gmail.com>
*/
#ifndef _CAMERA_
#define _CAMERA_
#include <modules/pad.hpp>
#include <models/mesh.hpp>
#include <models/math/vector3.hpp>
#include <models/screen_settings.hpp>
#include <modules/camera_base.hpp>
#include <tamtypes.h>
/** 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
+46
View File
@@ -0,0 +1,46 @@
/*
# ______ ____ ___
# | \/ ____| |___|
# | | | \ | |
#-----------------------------------------------------------------------
# Copyright 2020, tyra - https://github.com/h4570/tyra
# Licenced under Apache License 2.0
# Wellington Carvalho <wellcoj@gmail.com>
*/
#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(){
camera.update(engine->pad, cube->mesh);
cube->update(engine->pad, camera);
engine->renderer->draw(cube->mesh);
}
void Cubes::setBgColorAndAmbientColor()
{
color_t bgColor;
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);
}
+40
View File
@@ -0,0 +1,40 @@
/*
# ______ ____ ___
# | \/ ____| |___|
# | | | \ | |
#-----------------------------------------------------------------------
# Copyright 2020, tyra - https://github.com/h4570/tyra
# Licenced under Apache License 2.0
# Wellington Carvalho <wellcoj@gmail.com>
*/
#ifndef _CUBES_
#define _CUBES_
#include <tamtypes.h>
#include <game.hpp>
#include <engine.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;
Camera camera;
};
#endif
+21
View File
@@ -0,0 +1,21 @@
/*
# ______ ____ ___
# | \/ ____| |___|
# | | | \ | |
#-----------------------------------------------------------------------
# Copyright 2020, tyra - https://github.com/h4570/tyra
# Licenced under Apache License 2.0
# Wellington Carvalho <wellcoj@gmail.com>
*/
#include "cubes.hpp"
int main()
{
PRINT_LOG("INIT");
Engine engine = Engine();
Cubes game = Cubes(&engine);
game.engine->init(&game, 128);
SleepThread();
return 0;
}
+77
View File
@@ -0,0 +1,77 @@
/*
# ______ ____ ___
# | \/ ____| |___|
# | | | \ | |
#-----------------------------------------------------------------------
# Copyright 2020, tyra - https://github.com/h4570/tyra
# Licenced under Apache License 2.0
# Wellington Carvalho <wellcoj@gmail.com>
*/
#include "cube.hpp"
#include <models/mesh.hpp>
#include <loaders/obj_loader.hpp>
#include <utils/debug.hpp>
// ----
// Constructors/Destructors
// ----
Cube::Cube( TextureRepository *t_texRepo )
{
PRINT_LOG("Creating cube");
texRepo = t_texRepo;
speed = 1.2F;
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;
texRepo->addByMesh("meshes/cube/", mesh, PNG);
PRINT_LOG("Cube object created!");
}
void Cube::update(const Pad &t_pad, const Camera &t_camera)
{
rotate(t_pad);
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;
}
void Cube::rotate(const Pad &t_pad){
//if (t_pad.rJoyH >= 200)
//else if (t_pad.rJoyH <= 100)
mesh.rotation.x += (0.01 * speed);
mesh.rotation.y += (0.01 * speed);
mesh.rotation.z += (0.01 * speed);
}
+37
View File
@@ -0,0 +1,37 @@
/*
# ______ ____ ___
# | \/ ____| |___|
# | | | \ | |
#-----------------------------------------------------------------------
# Copyright 2020, tyra - https://github.com/h4570/tyra
# Licenced under Apache License 2.0
# Wellington Carvalho <wellcoj@gmail.com>
*/
#ifndef _CUBE_
#define _CUBE_
#include "../camera.hpp"
#include <tamtypes.h>
#include <modules/pad.hpp>
#include <modules/timer.hpp>
#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);
void rotate(const Pad &t_pad);
float speed;
};
#endif