added normals and borders for all tiles
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 4.4 KiB |
305
src/level.cpp
|
@ -3,6 +3,8 @@
|
|||
#include <azur/azur.h>
|
||||
#include <azur/gint/render.h>
|
||||
|
||||
#include <num/num.h>
|
||||
|
||||
#include "utilities.h"
|
||||
|
||||
#include <cstdint>
|
||||
|
@ -17,9 +19,14 @@ extern struct Map map_level3;
|
|||
extern struct Map map_level4;
|
||||
|
||||
extern bool drawbackground;
|
||||
extern bool drawforeground;
|
||||
extern bool drawnormals;
|
||||
extern bool drawborders;
|
||||
extern bool textbacktile;
|
||||
extern bool textforetile;
|
||||
|
||||
extern std::vector<Border*> MyLevelBorders;
|
||||
|
||||
|
||||
struct Map *map_level;
|
||||
|
||||
|
@ -51,6 +58,7 @@ void Level::ChangeMap( int level, Player *MyPlayer )
|
|||
else map_level = &map_level0;
|
||||
|
||||
this->UpdateDataMap( MyPlayer );
|
||||
this->UpdateBorders( );
|
||||
}
|
||||
|
||||
void Level::UpdateDataMap( Player *MyPlayer )
|
||||
|
@ -77,14 +85,14 @@ void Level::UpdateDataMap( Player *MyPlayer )
|
|||
|
||||
void Level::Render( void )
|
||||
{
|
||||
for(int u=!drawbackground; u<map_level->nblayers;u++)
|
||||
for(int u=!drawbackground; u<map_level->nblayers-!drawforeground;u++)
|
||||
{
|
||||
for(int i=0; i<map_level->w; i++)
|
||||
{
|
||||
for(int j=0; j<map_level->h; j++)
|
||||
{
|
||||
uint16_t index = j * map_level->w + i;
|
||||
uint16_t currentTile = map_level->layers[u][ index ];
|
||||
int16_t currentTile = map_level->layers[u][ index ];
|
||||
if (currentTile!=-1)
|
||||
{
|
||||
uint16_t xtile = (currentTile % map_level->tileset_size) * 16;
|
||||
|
@ -97,6 +105,20 @@ void Level::Render( void )
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (drawborders)
|
||||
for( int i=0; i<MyLevelBorders.size(); i++)
|
||||
azrp_line( (int) MyLevelBorders[i]->A.x, (int) MyLevelBorders[i]->A.y,
|
||||
(int) MyLevelBorders[i]->B.x, (int) MyLevelBorders[i]->B.y,
|
||||
C_GREEN );
|
||||
|
||||
if (drawnormals)
|
||||
for( int i=0; i<MyLevelBorders.size(); i++)
|
||||
azrp_line( ((int) MyLevelBorders[i]->A.x+(int) MyLevelBorders[i]->B.x)/2, ((int) MyLevelBorders[i]->A.y+(int) MyLevelBorders[i]->B.y)/2,
|
||||
((int) MyLevelBorders[i]->A.x+(int) MyLevelBorders[i]->B.x)/2 + (int) MyLevelBorders[i]->N.x/2, ((int) MyLevelBorders[i]->A.y+(int) MyLevelBorders[i]->B.y)/2 + (int) MyLevelBorders[i]->N.y/2,
|
||||
C_BLUE );
|
||||
|
||||
|
||||
}
|
||||
|
||||
void Level::RenderSelected( uint8_t i, uint8_t j )
|
||||
|
@ -173,4 +195,283 @@ bool Level::IsOnGround( Player *MyPlayer )
|
|||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
Border* Level::MakeBorder( libnum::num DX, libnum::num DY, float x1, float y1, float x2, float y2 )
|
||||
{
|
||||
Border *Bord = new Border();
|
||||
|
||||
Bord->A.x = DX + libnum::num(x1*16.0);
|
||||
Bord->A.y = DY + libnum::num(y1*16.0);
|
||||
|
||||
Bord->B.x = DX + libnum::num(x2*16.0);
|
||||
Bord->B.y = DY + libnum::num(y2*16.0);
|
||||
|
||||
Bord->N.x = Bord->A.y - Bord->B.y;
|
||||
Bord->N.y = Bord->B.x - Bord->A.x;
|
||||
|
||||
return Bord;
|
||||
}
|
||||
|
||||
void Level::UpdateBorders( void )
|
||||
{
|
||||
MyLevelBorders.clear();
|
||||
|
||||
Border *B1;
|
||||
|
||||
for(int i=0; i<map_level->w; i++)
|
||||
{
|
||||
for(int j=0; j<map_level->h; j++)
|
||||
{
|
||||
uint16_t index = j * map_level->w + i;
|
||||
int16_t currentTile = map_level->layers[0][ index ];
|
||||
|
||||
libnum::num DeltaX = libnum::num( i*16 );
|
||||
libnum::num Deltay = libnum::num( j*16 );
|
||||
|
||||
|
||||
switch(currentTile)
|
||||
{
|
||||
case -1: break; // Empty background
|
||||
case 0: break; // No borders (filling tile)
|
||||
|
||||
case 1:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.0,0.0, 0.0,1.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.0,1.0, 1.0,1.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
B1 = MakeBorder( DeltaX, Deltay, 1.0,1.0, 1.0,0.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
B1 = MakeBorder( DeltaX, Deltay, 1.0,0.0, 0.0,0.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
//45° diagonals
|
||||
|
||||
case 2:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.0,1.0, 1.0,0.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.0,0.0, 1.0,1.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
case 12:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 1.0,1.0, 0.0,0.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
case 13:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 1.0,0.0, 0.0,1.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
|
||||
//22.5° diagonals
|
||||
|
||||
case 4:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.0,1.0, 1.0,0.5 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
case 5:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.0,0.5, 1.0,0.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
case 6:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.0,0.0, 1.0,0.5 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
case 7:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.0,0.5, 1.0,1.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
|
||||
case 14:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 1.0,0.5, 0.0,0.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
case 15:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 1.0,1.0, 0.0,0.5 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
case 16:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 1.0,0.5, 0.0,1.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
case 17:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 1.0,0.0, 0.0,0.5 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
|
||||
|
||||
// 67.5° Diagonals
|
||||
|
||||
|
||||
case 24:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.5,1.0, 1.0,0.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
case 34:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.0,1.0, 0.5,0.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
case 25:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.0,0.0, 0.5,1.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
case 35:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.5,0.0, 1.0,1.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
|
||||
case 26:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.5,1.0, 0.0,0.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
case 36:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 1.0,1.0, 0.5,0.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
case 27:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 1.0,0.0, 0.5,1.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
case 37:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.5,0.0, 0.0,1.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
|
||||
// Blocks with 3 sides
|
||||
|
||||
case 8:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.0,1.0, 1.0,1.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
B1 = MakeBorder( DeltaX, Deltay, 1.0,1.0, 1.0,0.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
B1 = MakeBorder( DeltaX, Deltay, 1.0,0.0, 0.0,0.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
case 9:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.0,0.0, 0.0,1.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
B1 = MakeBorder( DeltaX, Deltay, 1.0,1.0, 1.0,0.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
B1 = MakeBorder( DeltaX, Deltay, 1.0,0.0, 0.0,0.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
case 18:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.0,0.0, 0.0,1.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.0,1.0, 1.0,1.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
B1 = MakeBorder( DeltaX, Deltay, 1.0,1.0, 1.0,0.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
case 19:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.0,0.0, 0.0,1.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.0,1.0, 1.0,1.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
B1 = MakeBorder( DeltaX, Deltay, 1.0,0.0, 0.0,0.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
// Blocks with 2 sides
|
||||
|
||||
case 28:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.0,1.0, 1.0,1.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
B1 = MakeBorder( DeltaX, Deltay, 1.0,0.0, 0.0,0.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
case 29:
|
||||
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.0,0.0, 0.0,1.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
B1 = MakeBorder( DeltaX, Deltay, 1.0,1.0, 1.0,0.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
case 38:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.0,0.0, 0.0,1.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
B1 = MakeBorder( DeltaX, Deltay, 1.0,0.0, 0.0,0.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
case 39:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 1.0,1.0, 1.0,0.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
B1 = MakeBorder( DeltaX, Deltay, 1.0,0.0, 0.0,0.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
case 48:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.0,0.0, 0.0,1.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.0,1.0, 1.0,1.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
case 49:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.0,1.0, 1.0,1.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
B1 = MakeBorder( DeltaX, Deltay, 1.0,1.0, 1.0,0.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
// Blocks with one single side
|
||||
|
||||
case 10:
|
||||
case 44:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 1.0,0.0, 0.0,0.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
case 11:
|
||||
case 46:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.0,1.0, 1.0,1.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
case 20:
|
||||
case 47:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 0.0,0.0, 0.0,1.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
case 21:
|
||||
case 45:
|
||||
B1 = MakeBorder( DeltaX, Deltay, 1.0,1.0, 1.0,0.0 );
|
||||
MyLevelBorders.push_back(B1);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -11,6 +11,7 @@
|
|||
#include "num/num.h"
|
||||
|
||||
#include "player.h"
|
||||
#include "vector2D.h"
|
||||
|
||||
struct Map {
|
||||
/*width, height and the number of layer of the map*/
|
||||
|
@ -38,6 +39,8 @@ class Level
|
|||
void ChangeMap( int level, Player *MyPlayer );
|
||||
void UpdateDataMap( Player *MyPlayer );
|
||||
|
||||
void UpdateBorders( void );
|
||||
|
||||
bool CanGo( Player *MyPlayer );
|
||||
bool IsOnGround( Player *MyPlayer );
|
||||
|
||||
|
@ -46,6 +49,8 @@ class Level
|
|||
int GetTileForeground( uint16_t x, uint16_t y );
|
||||
int GetTileBackgroundINT( uint8_t x, uint8_t y );
|
||||
int GetTileForegroundINT( uint8_t x, uint8_t y );
|
||||
|
||||
Border* MakeBorder( libnum::num DX, libnum::num DY, float x1, float y1, float x2, float y2 );
|
||||
};
|
||||
|
||||
|
||||
|
|
74
src/main.cpp
|
@ -62,11 +62,13 @@ KeyboardExtra MyKeyboard;
|
|||
Level MyLevel;
|
||||
Player MyPlayer( 198, 180 );
|
||||
|
||||
std::vector<Border> MyLevelBorders;
|
||||
std::vector<Border*> MyLevelBorders;
|
||||
|
||||
|
||||
bool drawbackground = true;
|
||||
|
||||
bool drawforeground = true;
|
||||
bool drawnormals = false;
|
||||
bool drawborders = false;
|
||||
|
||||
static void hook_prefrag(int id, void *fragment, int size)
|
||||
{
|
||||
|
@ -111,8 +113,9 @@ static void render( void )
|
|||
{
|
||||
|
||||
MyLevel.Render();
|
||||
|
||||
// MyLevel.RenderSelected();
|
||||
MyPlayer.Render();
|
||||
// MyPlayer.Render();
|
||||
|
||||
#if(BIAS)
|
||||
if (texttodraw>=1) Azur_draw_text(1,01, "FPS = %.0f", (float) (1000.0f / elapsedTime) );
|
||||
|
@ -141,6 +144,9 @@ static void get_inputs( float dt )
|
|||
if( MyKeyboard.IsKeyPressed(MYKEY_OPTN) && MyKeyboard.IsKeyPressedEvent(MYKEY_9) && usb_is_open() ) {record = false; };
|
||||
|
||||
if( MyKeyboard.IsKeyPressed(MYKEY_OPTN) && MyKeyboard.IsKeyPressedEvent(MYKEY_VARS) ) { drawbackground = !drawbackground; }
|
||||
if( MyKeyboard.IsKeyPressed(MYKEY_OPTN) && MyKeyboard.IsKeyPressedEvent(MYKEY_MENU) ) { drawforeground = !drawforeground; }
|
||||
if( MyKeyboard.IsKeyPressed(MYKEY_SHIFT) && MyKeyboard.IsKeyPressedEvent(MYKEY_VARS) ) { drawnormals = !drawnormals; }
|
||||
if( MyKeyboard.IsKeyPressed(MYKEY_SHIFT) && MyKeyboard.IsKeyPressedEvent(MYKEY_MENU) ) { drawborders = !drawborders; }
|
||||
|
||||
if( MyKeyboard.IsKeyPressed(MYKEY_OPTN) && MyKeyboard.IsKeyPressedEvent(MYKEY_0) ) { texttodraw = 0; }
|
||||
if( MyKeyboard.IsKeyPressed(MYKEY_OPTN) && MyKeyboard.IsKeyPressedEvent(MYKEY_1) ) { texttodraw = 1; }
|
||||
|
@ -251,47 +257,6 @@ int main(void)
|
|||
usb_open(interfaces, GINT_CALL_NULL);
|
||||
|
||||
|
||||
|
||||
Border B1, B2, B3, B4;
|
||||
|
||||
|
||||
B1.A.x = libnum::num( 50 );
|
||||
B1.A.y = libnum::num( 210 );
|
||||
B1.B.x = libnum::num( 250 );
|
||||
B1.B.y = libnum::num( 210 );
|
||||
B1.N.x = libnum::num( 0 );
|
||||
B1.N.y = libnum::num( -1 );
|
||||
|
||||
B2.A.x = libnum::num( 250 );
|
||||
B2.A.y = libnum::num( 210 );
|
||||
B2.B.x = libnum::num( 250 );
|
||||
B2.B.y = libnum::num( 10 );
|
||||
B2.N.x = libnum::num( -1 );
|
||||
B2.N.y = libnum::num( 0 );
|
||||
|
||||
B3.A.x = libnum::num( 250 );
|
||||
B3.A.y = libnum::num( 10 );
|
||||
B3.B.x = libnum::num( 50 );
|
||||
B3.B.y = libnum::num( 10 );
|
||||
B3.N.x = libnum::num( 0 );
|
||||
B3.N.y = libnum::num( 1 );
|
||||
|
||||
B4.A.x = libnum::num( 50 );
|
||||
B4.A.y = libnum::num( 10 );
|
||||
B4.B.x = libnum::num( 50 );
|
||||
B4.B.y = libnum::num( 210 );
|
||||
B4.N.x = libnum::num( 1 );
|
||||
B4.N.y = libnum::num( 0 );
|
||||
|
||||
|
||||
MyLevelBorders.push_back( B1 );
|
||||
MyLevelBorders.push_back( B2 );
|
||||
MyLevelBorders.push_back( B3 );
|
||||
MyLevelBorders.push_back( B4 );
|
||||
|
||||
|
||||
|
||||
|
||||
//MyLevel.ChangeMap(2, &MyPlayer);
|
||||
|
||||
prof_init();
|
||||
|
@ -321,28 +286,11 @@ Border B1, B2, B3, B4;
|
|||
|
||||
{
|
||||
// all the stuff to be rendered should be put here
|
||||
azrp_clear( C_GREEN );
|
||||
azrp_clear( C_WHITE );
|
||||
|
||||
render();
|
||||
|
||||
|
||||
for( int i=0; i<MyLevelBorders.size(); i++)
|
||||
{
|
||||
azrp_line( (int) MyLevelBorders[i].A.x, (int) MyLevelBorders[i].A.y,
|
||||
(int) MyLevelBorders[i].B.x, (int) MyLevelBorders[i].B.y,
|
||||
C_RED );
|
||||
}
|
||||
/*
|
||||
azrp_clear( C_BLACK );
|
||||
Azur_draw_text(1,01, "FPS = %.0f", (float) (1000.0f / elapsedTime) );
|
||||
|
||||
azrp_line( 10, 10, 100, 50, C_WHITE );
|
||||
azrp_line( 100, 10, 100, 50, C_RED );
|
||||
azrp_line( 10, 100, 100, 150, C_GREEN );
|
||||
azrp_line( 100, 150, 200, 150, C_WHITE );
|
||||
azrp_line( 200, 150, 300, 100, C_BLUE )
|
||||
azrp_line( 10, 100, 350, 100, C_RED );
|
||||
*/
|
||||
Azur_draw_text(1,01, "FPS = %.0f", (float) (1000.0f / elapsedTime) );
|
||||
|
||||
azrp_update();
|
||||
}
|
||||
|
|