Start editing
This commit is contained in:
parent
09a4856a09
commit
2e39b5204b
1 changed files with 62 additions and 12 deletions
74
demo3.cpp
74
demo3.cpp
|
@ -24,6 +24,25 @@ Player player;
|
||||||
char floorColor = 0;
|
char floorColor = 0;
|
||||||
Vector2D selectedSquare; ///< Coords of tile selected for editing.
|
Vector2D selectedSquare; ///< Coords of tile selected for editing.
|
||||||
|
|
||||||
|
/**
|
||||||
|
Represents one terrain change against the implicit terrain.
|
||||||
|
*/
|
||||||
|
class Change
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Vector2D mCoords;
|
||||||
|
Unit mHeight;
|
||||||
|
uint8_t mColor;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define MAX_CHANGES 32
|
||||||
|
|
||||||
|
Change changes[MAX_CHANGES];
|
||||||
|
|
||||||
|
bool editReleased = false;
|
||||||
|
bool editing = false;
|
||||||
|
uint16_t changeIndex = 0;
|
||||||
|
|
||||||
#define HEIGHT_PROFILE_LENGTH 256
|
#define HEIGHT_PROFILE_LENGTH 256
|
||||||
const int8_t heightProfile[] = {
|
const int8_t heightProfile[] = {
|
||||||
9,9,9,10,10,10,11,11,12,13,13,14,14,14,15,15,15,16,16,16,16,16,15,15,15,14,14,
|
9,9,9,10,10,10,11,11,12,13,13,14,14,14,15,15,15,16,16,16,16,16,15,15,15,14,14,
|
||||||
|
@ -129,6 +148,10 @@ const unsigned char imageBackground[] =
|
||||||
|
|
||||||
Unit floorHeightAt(int16_t x, int16_t y)
|
Unit floorHeightAt(int16_t x, int16_t y)
|
||||||
{
|
{
|
||||||
|
for (uint16_t i = 0; i < MAX_CHANGES; ++i)
|
||||||
|
if (changes[i].mCoords.x == x && changes[i].mCoords.y == y)
|
||||||
|
return changes[i].mHeight;
|
||||||
|
|
||||||
return (heightProfile[absVal(x) % HEIGHT_PROFILE_LENGTH] +
|
return (heightProfile[absVal(x) % HEIGHT_PROFILE_LENGTH] +
|
||||||
heightProfile[absVal(y + 20) % HEIGHT_PROFILE_LENGTH]) *
|
heightProfile[absVal(y + 20) % HEIGHT_PROFILE_LENGTH]) *
|
||||||
UNITS_PER_SQUARE;
|
UNITS_PER_SQUARE;
|
||||||
|
@ -148,7 +171,7 @@ inline void pixelFunc(PixelInfo pixel)
|
||||||
|
|
||||||
if (pixel.isWall)
|
if (pixel.isWall)
|
||||||
{
|
{
|
||||||
c = pixel.hit.square.x != selectedSquare.x || pixel.hit.square.y != selectedSquare.y ? 50 : 30;
|
c = pixel.hit.square.x != selectedSquare.x || pixel.hit.square.y != selectedSquare.y || (editing && pokitto.frameCount % 2) == 0 ? 50 : 30;
|
||||||
|
|
||||||
intensity = pixel.depth / (UNITS_PER_SQUARE * 3);
|
intensity = pixel.depth / (UNITS_PER_SQUARE * 3);
|
||||||
intensity += pixel.hit.direction % 2 == 0 ? 2 : 0;
|
intensity += pixel.hit.direction % 2 == 0 ? 2 : 0;
|
||||||
|
@ -196,7 +219,7 @@ void draw()
|
||||||
c.computeTextureCoords = 0;
|
c.computeTextureCoords = 0;
|
||||||
|
|
||||||
render(player.mCamera,floorHeightAt,0,0,pixelFunc,c);
|
render(player.mCamera,floorHeightAt,0,0,pixelFunc,c);
|
||||||
|
/*
|
||||||
pokitto.display.setColor(rgbToIndex(7,7,3));
|
pokitto.display.setColor(rgbToIndex(7,7,3));
|
||||||
pokitto.display.setCursor(1,1);
|
pokitto.display.setCursor(1,1);
|
||||||
pokitto.display.print(player.mCamera.position.x);
|
pokitto.display.print(player.mCamera.position.x);
|
||||||
|
@ -204,11 +227,9 @@ pokitto.display.print(" ");
|
||||||
pokitto.display.print(player.mCamera.position.y);
|
pokitto.display.print(player.mCamera.position.y);
|
||||||
pokitto.display.print(" ");
|
pokitto.display.print(" ");
|
||||||
pokitto.display.print(player.mCamera.direction);
|
pokitto.display.print(player.mCamera.direction);
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
bool runReleased = false;
|
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
initGeneral();
|
initGeneral();
|
||||||
|
@ -217,6 +238,13 @@ int main()
|
||||||
|
|
||||||
player.setPositionSquare(4,5);
|
player.setPositionSquare(4,5);
|
||||||
|
|
||||||
|
for (uint16_t i = 0; i < MAX_CHANGES; ++i)
|
||||||
|
{
|
||||||
|
changes[i].mCoords.x = 0;
|
||||||
|
changes[i].mCoords.y = 0;
|
||||||
|
changes[i].mHeight = floorHeightAt(0,0);
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t previousTime = 0;
|
uint32_t previousTime = 0;
|
||||||
uint32_t dt;
|
uint32_t dt;
|
||||||
|
|
||||||
|
@ -276,25 +304,47 @@ int main()
|
||||||
|
|
||||||
if (pokitto.cBtn())
|
if (pokitto.cBtn())
|
||||||
{
|
{
|
||||||
if (runReleased)
|
if (editReleased)
|
||||||
{
|
{
|
||||||
player.mRunning = !player.mRunning;
|
editing = !editing;
|
||||||
runReleased = false;
|
|
||||||
|
changeIndex = (changeIndex + 1) % MAX_CHANGES;
|
||||||
|
|
||||||
|
for (uint16_t i = 0; i < MAX_CHANGES; ++i)
|
||||||
|
if (changes[i].mCoords.x == selectedSquare.x &&
|
||||||
|
changes[i].mCoords.y == selectedSquare.y)
|
||||||
|
{
|
||||||
|
changeIndex = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
changes[changeIndex].mHeight = floorHeightAt(selectedSquare.x,selectedSquare.y);
|
||||||
|
changes[changeIndex].mCoords.x = selectedSquare.x;
|
||||||
|
changes[changeIndex].mCoords.y = selectedSquare.y;
|
||||||
|
editReleased = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
runReleased = true;
|
editReleased = true;
|
||||||
|
|
||||||
if (pokitto.upBtn())
|
if (pokitto.upBtn())
|
||||||
{
|
{
|
||||||
if (aButton)
|
if (editing)
|
||||||
|
{
|
||||||
|
changes[changeIndex].mHeight += 100;
|
||||||
|
}
|
||||||
|
else if (aButton)
|
||||||
player.mCamera.shear = min(player.mCamera.shear + 10,60);
|
player.mCamera.shear = min(player.mCamera.shear + 10,60);
|
||||||
else
|
else
|
||||||
moveOffset = d;
|
moveOffset = d;
|
||||||
}
|
}
|
||||||
else if (pokitto.downBtn())
|
else if (pokitto.downBtn())
|
||||||
{
|
{
|
||||||
if (aButton)
|
if (editing)
|
||||||
|
{
|
||||||
|
changes[changeIndex].mHeight -= 100;
|
||||||
|
}
|
||||||
|
else if (aButton)
|
||||||
player.mCamera.shear = max(player.mCamera.shear - 10,-60);
|
player.mCamera.shear = max(player.mCamera.shear - 10,-60);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -344,7 +394,7 @@ int main()
|
||||||
if (player.mCamera.height - CAMERA_COLL_HEIGHT_BELOW -
|
if (player.mCamera.height - CAMERA_COLL_HEIGHT_BELOW -
|
||||||
floorHeightAt(camX,camY) < 2)
|
floorHeightAt(camX,camY) < 2)
|
||||||
player.mVericalSpeed = JUMP_SPEED; // jump
|
player.mVericalSpeed = JUMP_SPEED; // jump
|
||||||
}
|
}
|
||||||
|
|
||||||
player.mVericalSpeed -= (dt * GRAVITY_ACCELERATION) / 1000; // gravity
|
player.mVericalSpeed -= (dt * GRAVITY_ACCELERATION) / 1000; // gravity
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue