Generate and render map walls.
This commit is contained in:
parent
1e3567482a
commit
726a377ee7
@ -7,6 +7,13 @@ using namespace olc;
|
||||
|
||||
const float PI = 3.14159f;
|
||||
|
||||
enum Direction {
|
||||
NORTH=1,
|
||||
EAST=2,
|
||||
SOUTH=4,
|
||||
WEST=8
|
||||
};
|
||||
|
||||
struct vec2d
|
||||
{
|
||||
float u = 0;
|
||||
@ -119,7 +126,7 @@ private:
|
||||
mesh mapMesh;
|
||||
mat4x4 matProj;
|
||||
|
||||
vec3d vCamera = { 5,5,5 };
|
||||
vec3d vCamera = { 5,0.5,5 };
|
||||
vec3d vLookDir;
|
||||
|
||||
float zOffset = 2;
|
||||
@ -621,7 +628,7 @@ private:
|
||||
{0,0},
|
||||
{0,0},
|
||||
{0,0},
|
||||
},WHITE);
|
||||
}, { t.uv[0].w,t.uv[1].w,t.uv[2].w }, { t.p[0].z,t.p[1].z,t.p[2].z }, { BLACK,BLACK,BLACK });
|
||||
SetDecalStructure(DecalStructure::FAN);
|
||||
triRenderCount++;
|
||||
}
|
||||
@ -632,7 +639,7 @@ private:
|
||||
}
|
||||
|
||||
void HandleKeys(float fElapsedTime) {
|
||||
vec3d vForward = Vector_Mul(vLookDir, 20 * fElapsedTime);
|
||||
vec3d vForward = Vector_Mul(vLookDir, 2 * fElapsedTime);
|
||||
if (freeRoam) {
|
||||
if (GetKey(olc::DOWN).bHeld) {
|
||||
pitch -= 1 * fElapsedTime;
|
||||
@ -661,27 +668,133 @@ private:
|
||||
}
|
||||
}
|
||||
|
||||
vi2d MAP_SIZE = { 10,2 };
|
||||
void AddWall(Direction dir,vi2d gridSquare) {
|
||||
if (dir & NORTH) {
|
||||
map[gridSquare.y][gridSquare.x].wallN = dot;
|
||||
if (gridSquare.y > 0) {
|
||||
map[gridSquare.y - 1][gridSquare.x].wallS = dot;
|
||||
}
|
||||
}
|
||||
if (dir & WEST) {
|
||||
map[gridSquare.y][gridSquare.x].wallW = dot;
|
||||
if (gridSquare.x > 0) {
|
||||
map[gridSquare.y][gridSquare.x-1].wallE = dot;
|
||||
}
|
||||
}
|
||||
if (dir & SOUTH) {
|
||||
map[gridSquare.y][gridSquare.x].wallS = dot;
|
||||
if (gridSquare.y<map.size()-1) {
|
||||
map[gridSquare.y+1][gridSquare.x].wallN = dot;
|
||||
}
|
||||
}
|
||||
if (dir & EAST) {
|
||||
map[gridSquare.y][gridSquare.x].wallE = dot;
|
||||
if (gridSquare.x < map[0].size() - 1) {
|
||||
map[gridSquare.y][gridSquare.x+1].wallW = dot;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Decal* dot;
|
||||
vi2d MAP_SIZE = { 10,10 };
|
||||
std::vector<std::vector<MapSquare>>map;
|
||||
|
||||
public:
|
||||
bool OnUserCreate() override
|
||||
{
|
||||
sAppName = "Faceball 2030";
|
||||
matProj = Matrix_MakeProjection(90.0f, (float)ScreenHeight() / (float)ScreenWidth(), 0.1f, 1000.0f);
|
||||
Decal* dot = new Decal(new Sprite("dot.png"));
|
||||
dot = new Decal(new Sprite("dot.png"));
|
||||
|
||||
mapMesh.texture = dot;
|
||||
|
||||
for (int i = 0; i < MAP_SIZE.y; i++) {
|
||||
for (int y = 0; y < MAP_SIZE.y; y++) {
|
||||
std::vector<MapSquare>row;
|
||||
for (int j = 0; j < MAP_SIZE.x; j++) {
|
||||
for (int x = 0; x < MAP_SIZE.x; x++) {
|
||||
row.push_back({});
|
||||
mapMesh.tris.push_back({ {{(float)j * 10,0,(float)i * 10},{(float)j * 10,0,(float)i * 10 + 10},{(float)j * 10 + 10,0,(float)i * 10}},{{0,0},{1,0},{0,1}},Pixel{uint8_t(rand() * 255),uint8_t(rand() * 255),uint8_t(rand() * 255)} });
|
||||
mapMesh.tris.push_back({ {{(float)j * 10+10,0,(float)i * 10},{(float)j * 10,0,(float)i * 10 + 10},{(float)j * 10 + 10,0,(float)i * 10+10}},{{0,0},{1,0},{0,1}},Pixel{uint8_t(rand() * 255),uint8_t(rand() * 255),uint8_t(rand() * 255)} });
|
||||
mapMesh.tris.push_back({ {{(float)x,0,(float)y},{(float)x,0,(float)y + 1},{(float)x + 1,0,(float)y}},{{0,0},{1,0},{0,1}},BLUE });
|
||||
mapMesh.tris.push_back({ {{(float)x+1,0,(float)y},{(float)x,0,(float)y + 1},{(float)x + 1,0,(float)y+1}},{{0,0},{1,0},{0,1}},BLUE });
|
||||
}
|
||||
map.push_back(row);
|
||||
}
|
||||
|
||||
for (int y = 0; y < MAP_SIZE.y; y++) {
|
||||
for (int x = 0; x < MAP_SIZE.x; x++) {
|
||||
switch (rand() % 16) {
|
||||
case 0: {//No Wall.
|
||||
|
||||
}break;
|
||||
case 1: {//North Wall.
|
||||
AddWall(NORTH,{x,y});
|
||||
}break;
|
||||
case 2: {//East Wall.
|
||||
AddWall(EAST, { x,y });
|
||||
}break;
|
||||
case 3: {//South Wall.
|
||||
AddWall(SOUTH, { x,y });
|
||||
}break;
|
||||
case 4: {//West Wall.
|
||||
AddWall(WEST, { x,y });
|
||||
}break;
|
||||
case 5: {//NE Wall.
|
||||
AddWall(Direction(NORTH|EAST), { x,y });
|
||||
}break;
|
||||
case 6: {
|
||||
AddWall(Direction(NORTH|WEST), { x,y });
|
||||
}break;
|
||||
case 7: {
|
||||
AddWall(Direction(SOUTH|EAST), { x,y });
|
||||
}break;
|
||||
case 8: {
|
||||
AddWall(Direction(SOUTH|WEST), { x,y });
|
||||
}break;
|
||||
case 9: {
|
||||
AddWall(Direction(NORTH|SOUTH), { x,y });
|
||||
}break;
|
||||
case 10: {
|
||||
AddWall(Direction(EAST|WEST), { x,y });
|
||||
}break;
|
||||
case 11: {
|
||||
AddWall(Direction(NORTH|WEST|EAST), { x,y });
|
||||
}break;
|
||||
case 12: {
|
||||
AddWall(Direction(NORTH|WEST|SOUTH), { x,y });
|
||||
}break;
|
||||
case 13: {
|
||||
AddWall(Direction(WEST|SOUTH|EAST), { x,y });
|
||||
}break;
|
||||
case 14: {
|
||||
AddWall(Direction(SOUTH|EAST|NORTH), { x,y });
|
||||
}break;
|
||||
case 15: {
|
||||
AddWall(Direction(SOUTH | EAST | NORTH|WEST), { x,y });
|
||||
}break;
|
||||
}
|
||||
}
|
||||
}
|
||||
AddWall(Direction(SOUTH | EAST | NORTH | WEST), { 0,0 });
|
||||
|
||||
for (int y = 0; y < MAP_SIZE.y; y++) {
|
||||
for (int x = 0; x < MAP_SIZE.x; x++) {
|
||||
if (map[y][x].wallN!=NULL) {
|
||||
mapMesh.tris.push_back({ {{(float)x,1,(float)y},{(float)x,0,(float)y},{(float)x + 1,1,(float)y}},{{0,0},{1,0},{0,1}},YELLOW });
|
||||
mapMesh.tris.push_back({ {{(float)x,0,(float)y},{(float)x+1,0,(float)y},{(float)x + 1,1,(float)y}},{{0,0},{1,0},{0,1}},YELLOW });
|
||||
}
|
||||
if (map[y][x].wallS != NULL) {
|
||||
mapMesh.tris.push_back({ {{(float)x + 1,1,(float)y+1},{(float)x,0,(float)y+1},{(float)x,1,(float)y + 1}},{{0,0},{1,0},{0,1}},DARK_RED });
|
||||
mapMesh.tris.push_back({ {{(float)x + 1,1,(float)y+1},{(float)x + 1,0,(float)y+1},{(float)x,0,(float)y+1}},{{0,0},{1,0},{0,1}},DARK_RED });
|
||||
}
|
||||
if (map[y][x].wallW != NULL) {
|
||||
mapMesh.tris.push_back({ {{(float)x,1,(float)y},{(float)x,1,(float)y+1}, {(float)x,0,(float)y + 1}},{{0,0},{1,0},{0,1}},MAGENTA });
|
||||
mapMesh.tris.push_back({ {{(float)x,0,(float)y},{(float)x,1,(float)y}, {(float)x,0,(float)y + 1}}, {{0,0},{1,0},{0,1}},MAGENTA });
|
||||
}
|
||||
if (map[y][x].wallE != NULL) {
|
||||
mapMesh.tris.push_back({ {{(float)x + 1,0,(float)y + 1},{(float)x+1,1,(float)y + 1},{(float)x + 1,1,(float)y}},{{0,0},{1,0},{0,1}},CYAN });
|
||||
mapMesh.tris.push_back({ {{(float)x + 1,0,(float)y + 1} ,{(float)x+1,1,(float)y},{(float)x + 1,0,(float)y}},{{0,0},{1,0},{0,1}},CYAN });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user