Pokitto-Raycasting/helloRay.cpp

86 lines
2.1 KiB
C++
Raw Normal View History

2018-09-17 08:19:29 +02:00
/**
Raycasting hello world program for Pokitto, using raycastlib.
author: Miloslav "drummyfish" Ciz
license: CC0 1.0
*/
2018-09-17 17:55:33 +02:00
#define RCL_PIXEL_FUNCTION pixelFunc
2018-09-17 08:19:29 +02:00
/* ^ 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;
2018-09-17 17:55:33 +02:00
RCL_Camera camera; // Defines a view that will be rendered.
RCL_RayConstraints constraints;
2018-09-17 08:19:29 +02:00
// Function that for given square coordinates returns height of the floor.
2018-09-17 17:55:33 +02:00
RCL_Unit floorHeightAt(int16_t x, int16_t y)
2018-09-17 08:19:29 +02:00
{
return x < 0 || x >= 10 || y < 0 || y >= 10 ?
2018-09-17 17:55:33 +02:00
RCL_UNITS_PER_SQUARE * 2 : 0;
// ^ RCL_UNITS_PER_SQUARE is the length of one side of the game world square.
2018-09-17 08:19:29 +02:00
}
// Function which the library will call to draw indivifual pixels.
2018-09-17 17:55:33 +02:00
void pixelFunc(RCL_PixelInfo *pixel)
2018-09-17 08:19:29 +02:00
{
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. */
2018-09-17 17:55:33 +02:00
RCL_renderSimple(camera,floorHeightAt,0,0,constraints);
2018-09-17 08:19:29 +02:00
}
int main()
{
pokitto.begin();
pokitto.setFrameRate(60);
2018-09-17 17:55:33 +02:00
RCL_initCamera(&camera);
2018-09-17 08:19:29 +02:00
// Set the camera position to square [4;6].
2018-09-17 17:55:33 +02:00
camera.position.x = 4 * RCL_UNITS_PER_SQUARE;
camera.position.y = 6 * RCL_UNITS_PER_SQUARE;
2018-09-17 08:19:29 +02:00
2018-09-17 17:55:33 +02:00
camera.height = RCL_UNITS_PER_SQUARE;
2018-09-17 08:19:29 +02:00
// Set the camera resolution to Pokitto display resolution.
camera.resolution.x = 110;
camera.resolution.y = 88;
2018-09-17 17:55:33 +02:00
// This specifies the ray behavior.
constraints.maxHits = 1;
constraints.maxSteps = 20;
2018-09-17 08:19:29 +02:00
while (pokitto.isRunning())
{
if (pokitto.update())
{
draw();
camera.direction -= 10; // Rotate camera for some animation.
}
}
return 0;
}