85 lines
2.1 KiB
C++
85 lines
2.1 KiB
C++
/**
|
|
Raycasting hello world program for Pokitto, using raycastlib.
|
|
|
|
author: Miloslav "drummyfish" Ciz
|
|
license: CC0 1.0
|
|
*/
|
|
|
|
#define RCL_PIXEL_FUNCTION pixelFunc
|
|
/* ^ Before including raycastlib, this has to be set to the name of the
|
|
function that will render pixels. It allows super performance. */
|
|
|
|
/* There are many other options that can be defined here, check the library
|
|
for details. */
|
|
|
|
#include "raycastlib.h"
|
|
#include "Pokitto.h"
|
|
|
|
Pokitto::Core pokitto;
|
|
|
|
RCL_Camera camera; // Defines a view that will be rendered.
|
|
RCL_RayConstraints constraints;
|
|
|
|
// Function that for given square coordinates returns height of the floor.
|
|
RCL_Unit floorHeightAt(int16_t x, int16_t y)
|
|
{
|
|
return x < 0 || x >= 10 || y < 0 || y >= 10 ?
|
|
RCL_UNITS_PER_SQUARE * 2 : 0;
|
|
// ^ RCL_UNITS_PER_SQUARE is the length of one side of the game world square.
|
|
}
|
|
|
|
// Function which the library will call to draw indivifual pixels.
|
|
void pixelFunc(RCL_PixelInfo *pixel)
|
|
{
|
|
uint8_t color;
|
|
|
|
/* Pixel holds all kind of info about the pixel to be rendered. Check
|
|
the PixelInfo struct for details. */
|
|
|
|
if (pixel->isWall)
|
|
color = pixel->hit.direction + 2;
|
|
else
|
|
color = pixel->isFloor ? 10 : 11;
|
|
|
|
pokitto.display.drawPixel(pixel->position.x,pixel->position.y,color);
|
|
}
|
|
|
|
void draw()
|
|
{
|
|
/* This triggers the rendering, which will keep calling pixelFunc to render
|
|
the camera view. */
|
|
RCL_renderSimple(camera,floorHeightAt,0,0,constraints);
|
|
}
|
|
|
|
int main()
|
|
{
|
|
pokitto.begin();
|
|
pokitto.setFrameRate(60);
|
|
|
|
RCL_initCamera(&camera);
|
|
|
|
// Set the camera position to square [4;6].
|
|
camera.position.x = 4 * RCL_UNITS_PER_SQUARE;
|
|
camera.position.y = 6 * RCL_UNITS_PER_SQUARE;
|
|
|
|
camera.height = RCL_UNITS_PER_SQUARE;
|
|
|
|
// Set the camera resolution to Pokitto display resolution.
|
|
camera.resolution.x = 110;
|
|
camera.resolution.y = 88;
|
|
|
|
// This specifies the ray behavior.
|
|
constraints.maxHits = 1;
|
|
constraints.maxSteps = 20;
|
|
|
|
while (pokitto.isRunning())
|
|
{
|
|
if (pokitto.update())
|
|
{
|
|
draw();
|
|
camera.direction -= 10; // Rotate camera for some animation.
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|