Got fully 3D sectors now. And can glue them now.
This commit is contained in:
parent
702fa80606
commit
2112a7b3a1
@ -5,11 +5,12 @@
|
||||
#include "Morault_Map.h"
|
||||
#include <raymath.h>
|
||||
#include <rlgl.h>
|
||||
#include <string>
|
||||
|
||||
#define MORAULT_MAP_RENDER_SCALE 0.1f
|
||||
|
||||
typedef enum {
|
||||
NONE,
|
||||
NONE = 0,
|
||||
GAME,
|
||||
EDITOR
|
||||
} EngineState;
|
||||
@ -17,10 +18,14 @@ typedef enum {
|
||||
typedef enum {
|
||||
NA, A, B, C
|
||||
} SectorTriangleSelection;
|
||||
typedef enum {
|
||||
NOLINE, AB, BC, CA
|
||||
} SectorLineSelection;
|
||||
|
||||
struct EditorSelection {
|
||||
int sector;
|
||||
SectorTriangleSelection point;
|
||||
SectorLineSelection line;
|
||||
};
|
||||
int main(int argc, char** argv) {
|
||||
InitWindow(1280, 720, "ProjectMorault");
|
||||
@ -38,7 +43,8 @@ int main(int argc, char** argv) {
|
||||
bool gamePaused = false;
|
||||
|
||||
EngineState eState = GAME;
|
||||
EditorSelection selection = { -1, NA };
|
||||
EditorSelection selection = { -1, SectorTriangleSelection::NA, SectorLineSelection::NOLINE };
|
||||
|
||||
bool inSelection = false;
|
||||
Morault::Maps::Map* map = new Morault::Maps::Map();
|
||||
|
||||
@ -85,6 +91,134 @@ int main(int argc, char** argv) {
|
||||
},
|
||||
RED
|
||||
);
|
||||
DrawTriangle3D(
|
||||
{
|
||||
map->MapTriangles[i].a.x * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].heightCeiling * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].a.y * MORAULT_MAP_RENDER_SCALE
|
||||
},
|
||||
{
|
||||
map->MapTriangles[i].c.x * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].heightCeiling * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].c.y * MORAULT_MAP_RENDER_SCALE
|
||||
},
|
||||
{
|
||||
map->MapTriangles[i].b.x * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].heightCeiling * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].b.y * MORAULT_MAP_RENDER_SCALE
|
||||
},
|
||||
RED
|
||||
);
|
||||
|
||||
if (map->MapTriangles[i].wallAB != "pms:none") {
|
||||
DrawTriangle3D({
|
||||
map->MapTriangles[i].a.x * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].heightCeiling * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].a.y * MORAULT_MAP_RENDER_SCALE
|
||||
},
|
||||
{
|
||||
map->MapTriangles[i].b.x * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].heightCeiling * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].b.y * MORAULT_MAP_RENDER_SCALE
|
||||
},
|
||||
{
|
||||
map->MapTriangles[i].a.x * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].heightFloor * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].a.y * MORAULT_MAP_RENDER_SCALE
|
||||
},
|
||||
BLUE
|
||||
);
|
||||
DrawTriangle3D({
|
||||
map->MapTriangles[i].a.x * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].heightFloor * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].a.y * MORAULT_MAP_RENDER_SCALE
|
||||
},
|
||||
{
|
||||
map->MapTriangles[i].b.x * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].heightCeiling * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].b.y * MORAULT_MAP_RENDER_SCALE
|
||||
},
|
||||
{
|
||||
map->MapTriangles[i].b.x * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].heightFloor * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].b.y * MORAULT_MAP_RENDER_SCALE
|
||||
},
|
||||
BLUE
|
||||
);
|
||||
}
|
||||
if (map->MapTriangles[i].wallBC != "pms:none") {
|
||||
DrawTriangle3D({
|
||||
map->MapTriangles[i].b.x * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].heightCeiling * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].b.y * MORAULT_MAP_RENDER_SCALE
|
||||
},
|
||||
{
|
||||
map->MapTriangles[i].c.x * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].heightCeiling * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].c.y * MORAULT_MAP_RENDER_SCALE
|
||||
},
|
||||
{
|
||||
map->MapTriangles[i].b.x * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].heightFloor * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].b.y * MORAULT_MAP_RENDER_SCALE
|
||||
},
|
||||
GREEN
|
||||
);
|
||||
DrawTriangle3D({
|
||||
map->MapTriangles[i].b.x * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].heightFloor * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].b.y * MORAULT_MAP_RENDER_SCALE
|
||||
},
|
||||
{
|
||||
map->MapTriangles[i].c.x * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].heightCeiling * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].c.y * MORAULT_MAP_RENDER_SCALE
|
||||
},
|
||||
{
|
||||
map->MapTriangles[i].c.x * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].heightFloor * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].c.y * MORAULT_MAP_RENDER_SCALE
|
||||
},
|
||||
GREEN
|
||||
);
|
||||
}
|
||||
if (map->MapTriangles[i].wallCA != "pms:none") {
|
||||
DrawTriangle3D({
|
||||
map->MapTriangles[i].c.x * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].heightCeiling * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].c.y * MORAULT_MAP_RENDER_SCALE
|
||||
},
|
||||
{
|
||||
map->MapTriangles[i].a.x * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].heightCeiling * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].a.y * MORAULT_MAP_RENDER_SCALE
|
||||
},
|
||||
{
|
||||
map->MapTriangles[i].c.x * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].heightFloor * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].c.y * MORAULT_MAP_RENDER_SCALE
|
||||
},
|
||||
PURPLE
|
||||
);
|
||||
DrawTriangle3D({
|
||||
map->MapTriangles[i].c.x * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].heightFloor * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].c.y * MORAULT_MAP_RENDER_SCALE
|
||||
},
|
||||
{
|
||||
map->MapTriangles[i].a.x * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].heightCeiling * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].a.y * MORAULT_MAP_RENDER_SCALE
|
||||
},
|
||||
{
|
||||
map->MapTriangles[i].a.x * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].heightFloor * MORAULT_MAP_RENDER_SCALE,
|
||||
map->MapTriangles[i].a.y * MORAULT_MAP_RENDER_SCALE
|
||||
},
|
||||
PURPLE
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -95,12 +229,29 @@ int main(int argc, char** argv) {
|
||||
EndDrawing();
|
||||
} break;
|
||||
case EDITOR: {
|
||||
if (IsKeyDown(KEY_LEFT_CONTROL) && IsKeyPressed(KEY_J)) {
|
||||
if (inSelection) {
|
||||
Vector2 selectedPoint;
|
||||
if (selection.point == A) selectedPoint = map->MapTriangles[selection.sector].a;
|
||||
if (selection.point == B) selectedPoint = map->MapTriangles[selection.sector].b;
|
||||
if (selection.point == C) selectedPoint = map->MapTriangles[selection.sector].c;
|
||||
for (int i = 0; i < map->MapTriangles.size(); i++) {
|
||||
if (i != selection.sector) {
|
||||
|
||||
if (Vector2Distance(map->MapTriangles[i].a, selectedPoint) <= 3) map->MapTriangles[i].a = selectedPoint;
|
||||
if (Vector2Distance(map->MapTriangles[i].b, selectedPoint) <= 3) map->MapTriangles[i].b = selectedPoint;
|
||||
if (Vector2Distance(map->MapTriangles[i].c, selectedPoint) <= 3) map->MapTriangles[i].c = selectedPoint;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (IsKeyPressed(KEY_E)) {
|
||||
eState = GAME;
|
||||
DisableCursor();
|
||||
}
|
||||
if (IsKeyPressed(KEY_ESCAPE)) {
|
||||
inSelection = false;
|
||||
selection.line = SectorLineSelection::NOLINE;
|
||||
}
|
||||
if (IsKeyDown(KEY_LEFT_SHIFT)) {
|
||||
if (IsKeyPressed(KEY_N)) {
|
||||
@ -125,19 +276,62 @@ int main(int argc, char** argv) {
|
||||
for (int i = 0; i < map->MapTriangles.size(); i++) {
|
||||
if (CheckCollisionPointCircle(GetMousePosition() - editorOffset, map->MapTriangles[i].a, 7)) {
|
||||
inSelection = true;
|
||||
selection = { i,A };
|
||||
selection = { i,A,SectorLineSelection::NOLINE };
|
||||
}
|
||||
if (CheckCollisionPointCircle(GetMousePosition() - editorOffset, map->MapTriangles[i].b, 7)) {
|
||||
inSelection = true;
|
||||
selection = { i,B };
|
||||
selection = { i,B,SectorLineSelection::NOLINE };
|
||||
}
|
||||
if (CheckCollisionPointCircle(GetMousePosition() - editorOffset, map->MapTriangles[i].c, 7)) {
|
||||
inSelection = true;
|
||||
selection = { i,C };
|
||||
selection = { i,C,SectorLineSelection::NOLINE };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (inSelection) {
|
||||
if (IsKeyDown(KEY_RIGHT_SHIFT) && IsKeyDown(KEY_L)) {
|
||||
switch (selection.point) {
|
||||
case A:
|
||||
if (IsKeyPressed(KEY_B)) {
|
||||
selection.line = AB;
|
||||
}
|
||||
if (IsKeyPressed(KEY_C)) {
|
||||
selection.line = CA;
|
||||
}
|
||||
break;
|
||||
case B:
|
||||
if (IsKeyPressed(KEY_A)) {
|
||||
selection.line = AB;
|
||||
}
|
||||
if (IsKeyPressed(KEY_C)) {
|
||||
selection.line = BC;
|
||||
}
|
||||
break;
|
||||
case C:
|
||||
if (IsKeyPressed(KEY_B)) {
|
||||
selection.line = BC;
|
||||
}
|
||||
if (IsKeyPressed(KEY_A)) {
|
||||
selection.line = CA;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (IsKeyPressed(KEY_T) && selection.line != NOLINE) {
|
||||
std::cout << "Texture for line " << selection.sector << ":" << (selection.line == AB ? "AB" : selection.line == BC ? "BC" : "CA") << "? (current texture is: " << (selection.line == AB ? map->MapTriangles[selection.sector].wallAB : selection.line == BC ? map->MapTriangles[selection.sector].wallBC : map->MapTriangles[selection.sector].wallCA) << ") >>>";
|
||||
|
||||
std::string texture;
|
||||
std::getline(std::cin, texture);
|
||||
if (texture != "") {
|
||||
if (selection.line == AB) map->MapTriangles[selection.sector].wallAB = texture;
|
||||
if (selection.line == BC) map->MapTriangles[selection.sector].wallBC = texture;
|
||||
if (selection.line == CA) map->MapTriangles[selection.sector].wallCA = texture;
|
||||
}
|
||||
}
|
||||
|
||||
if (IsMouseButtonDown(MOUSE_BUTTON_RIGHT)) {
|
||||
if (inSelection) {
|
||||
switch (selection.point) {
|
||||
@ -159,13 +353,21 @@ int main(int argc, char** argv) {
|
||||
|
||||
for (int i = 0; i < map->MapTriangles.size(); i++) {
|
||||
DrawTriangleLines(map->MapTriangles[i].a + editorOffset, map->MapTriangles[i].b + editorOffset, map->MapTriangles[i].c + editorOffset, YELLOW);
|
||||
|
||||
|
||||
DrawCircle((map->MapTriangles[i].a + editorOffset).x, (map->MapTriangles[i].a + editorOffset).y, 3, RED);
|
||||
DrawText("A", (map->MapTriangles[i].a + editorOffset).x, (map->MapTriangles[i].a + editorOffset).y, 5, WHITE);
|
||||
DrawCircle((map->MapTriangles[i].b + editorOffset).x, (map->MapTriangles[i].b + editorOffset).y, 3, RED);
|
||||
DrawText("B", (map->MapTriangles[i].b + editorOffset).x, (map->MapTriangles[i].b + editorOffset).y, 5, WHITE);
|
||||
DrawCircle((map->MapTriangles[i].c + editorOffset).x, (map->MapTriangles[i].c + editorOffset).y, 3, RED);
|
||||
if(inSelection){
|
||||
if (selection.sector == i && selection.point == A) DrawCircle((map->MapTriangles[i].a + editorOffset).x, (map->MapTriangles[i].a + editorOffset).y, 5, GREEN);
|
||||
if (selection.sector == i && selection.point == B) DrawCircle((map->MapTriangles[i].b + editorOffset).x, (map->MapTriangles[i].b + editorOffset).y, 5, GREEN);
|
||||
if (selection.sector == i && selection.point == C) DrawCircle((map->MapTriangles[i].c + editorOffset).x, (map->MapTriangles[i].c + editorOffset).y, 5, GREEN);
|
||||
DrawText("C", (map->MapTriangles[i].c + editorOffset).x, (map->MapTriangles[i].c + editorOffset).y, 5, WHITE);
|
||||
if(inSelection && selection.sector == i){
|
||||
if (selection.point == A) DrawCircle((map->MapTriangles[i].a + editorOffset).x, (map->MapTriangles[i].a + editorOffset).y, 5, GREEN);
|
||||
if (selection.point == B) DrawCircle((map->MapTriangles[i].b + editorOffset).x, (map->MapTriangles[i].b + editorOffset).y, 5, GREEN);
|
||||
if (selection.point == C) DrawCircle((map->MapTriangles[i].c + editorOffset).x, (map->MapTriangles[i].c + editorOffset).y, 5, GREEN);
|
||||
if (selection.line == AB) DrawLineEx(map->MapTriangles[i].a + editorOffset, map->MapTriangles[i].b + editorOffset, 4, PURPLE);
|
||||
if (selection.line == BC) DrawLineEx(map->MapTriangles[i].b + editorOffset, map->MapTriangles[i].c + editorOffset, 4, PURPLE);
|
||||
if (selection.line == CA) DrawLineEx(map->MapTriangles[i].c + editorOffset, map->MapTriangles[i].a + editorOffset, 4, PURPLE);
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user