Ability to place entities on the map.
This commit is contained in:
parent
8e8b2586bb
commit
d44fbb5033
@ -6,8 +6,25 @@ using namespace olc;
|
||||
extern FaceBall* game;
|
||||
|
||||
void Editor::Update(float fElapsedTime){
|
||||
LoadLevelHandling();
|
||||
vf2d center = { -(float)MAP_SIZE.x / 2 * GRID_SIZE.x + game->ScreenWidth()/2 , -(float)MAP_SIZE.y / 2 * GRID_SIZE.y + game->ScreenHeight()/2 };
|
||||
if (game->GetMouseWheel() != 0) {
|
||||
if (game->GetMouseWheel() > 0) {
|
||||
if (selectedEnemy < 63) {
|
||||
selectedEnemy=EnemyID(selectedEnemy+1);
|
||||
}
|
||||
else {
|
||||
selectedEnemy = EnemyID::NONE;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (selectedEnemy > 0) {
|
||||
selectedEnemy = EnemyID(selectedEnemy - 1);
|
||||
}
|
||||
else {
|
||||
selectedEnemy = AREA_MAP;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (int y = 0; y < MAP_SIZE.y; y++) {
|
||||
for (int x = 0; x < MAP_SIZE.x; x++) {
|
||||
Tile&t = map[y][x];
|
||||
@ -42,15 +59,36 @@ void Editor::Update(float fElapsedTime){
|
||||
neighbor.wallE = t.wallW;
|
||||
}
|
||||
}
|
||||
if (game->GetMouse(0).bPressed) {
|
||||
t.enemyId = selectedEnemy;
|
||||
}
|
||||
if (game->GetMouse(1).bPressed) {
|
||||
t.enemyId = EnemyID::NONE;
|
||||
}
|
||||
game->FillRectDecal(squarePos, GRID_SIZE, { 0,0,255,64 });
|
||||
}
|
||||
//game->DrawRectDecal(squarePos,GRID_SIZE,{64,64,64});
|
||||
game->DrawLineDecal(squarePos,{squarePos.x+GRID_SIZE.x,squarePos.y},t.wallN?WHITE:Pixel{64,64,64});
|
||||
game->DrawLineDecal({ squarePos.x + GRID_SIZE.x,squarePos.y }, { squarePos.x + GRID_SIZE.x,squarePos.y + GRID_SIZE.y }, t.wallE ? WHITE : Pixel{ 64,64,64 });
|
||||
game->DrawLineDecal({ squarePos.x + GRID_SIZE.x,squarePos.y + GRID_SIZE.y }, { squarePos.x,squarePos.y + GRID_SIZE.y }, t.wallS ? WHITE : Pixel{ 64,64,64 });
|
||||
game->DrawLineDecal({ squarePos.x,squarePos.y + GRID_SIZE.y }, squarePos, t.wallW ? WHITE : Pixel{ 64,64,64 });
|
||||
if (t.enemyId != EnemyID::NONE) {
|
||||
if (t.enemyId >= COIN) {
|
||||
game->DrawPolygonDecal(nullptr, {
|
||||
vf2d{0,(float) GRID_SIZE.y / 2} + squarePos ,
|
||||
vf2d{(float)GRID_SIZE.x / 2,0} + squarePos ,
|
||||
vf2d{(float)GRID_SIZE.x,(float)GRID_SIZE.y / 2} + squarePos ,
|
||||
vf2d{(float)GRID_SIZE.x / 2,(float)GRID_SIZE.y} + squarePos ,
|
||||
}, { {0,0},{0,0} ,{0,0} ,{0,0} }, game->GetData(t.enemyId).col);
|
||||
}
|
||||
else {
|
||||
game->DrawDecal(squarePos, game->circle, { 1,1 }, game->GetData(t.enemyId).col);
|
||||
}
|
||||
}
|
||||
game->DrawLineDecal(squarePos,{squarePos.x+ (float)GRID_SIZE.x,squarePos.y},t.wallN?WHITE:Pixel{64,64,64});
|
||||
game->DrawLineDecal({ squarePos.x + (float)GRID_SIZE.x,squarePos.y }, { squarePos.x + (float)GRID_SIZE.x,squarePos.y + (float)GRID_SIZE.y }, t.wallE ? WHITE : Pixel{ 64,64,64 });
|
||||
game->DrawLineDecal({ squarePos.x + (float)GRID_SIZE.x,squarePos.y + (float)GRID_SIZE.y }, { squarePos.x,squarePos.y + (float)GRID_SIZE.y }, t.wallS ? WHITE : Pixel{ 64,64,64 });
|
||||
game->DrawLineDecal({ squarePos.x,squarePos.y + (float)GRID_SIZE.y }, squarePos, t.wallW ? WHITE : Pixel{ 64,64,64 });
|
||||
}
|
||||
}
|
||||
game->DrawStringDecal({ 2,16 }, "Selected Enemy ("+std::to_string(selectedEnemy) + "): " + game->GetData(selectedEnemy).name, WHITE, {3,3});
|
||||
LoadLevelHandling();
|
||||
}
|
||||
|
||||
void Editor::LoadLevelHandling() {
|
||||
@ -61,6 +99,7 @@ void Editor::LoadLevelHandling() {
|
||||
}
|
||||
}
|
||||
else {
|
||||
game->FillRectDecal({ 0,0 }, { (float)game->ScreenWidth(),32 }, BLACK);
|
||||
game->DrawStringDecal({ 0,0 }, "Enter Level (1-30): " + game->TextEntryGetString(), WHITE, { 4,4 });
|
||||
}
|
||||
}
|
||||
|
@ -7,15 +7,17 @@ enum class FacingDirection {
|
||||
};
|
||||
|
||||
enum EnemyID {
|
||||
NONE,
|
||||
EXIT,
|
||||
SHOOTME,
|
||||
POWERUP_ARMOR=57,
|
||||
POWERUP_SPEED=58,
|
||||
POWERUP_SHOT=59,
|
||||
SPECIAL_CAMO=60,
|
||||
SPECIAL_STOP=61,
|
||||
SPECIAL_SHIELD=62,
|
||||
AREA_MAP=63,
|
||||
COIN = 56,
|
||||
POWERUP_ARMOR = 57,
|
||||
POWERUP_SPEED = 58,
|
||||
POWERUP_SHOT = 59,
|
||||
SPECIAL_CAMO = 60,
|
||||
SPECIAL_STOP = 61,
|
||||
SPECIAL_SHIELD = 62,
|
||||
AREA_MAP = 63,
|
||||
};
|
||||
|
||||
/*
|
||||
@ -35,7 +37,7 @@ enum WallDirection {
|
||||
};*/
|
||||
|
||||
struct Tile {
|
||||
EnemyID enemyId=SHOOTME;
|
||||
EnemyID enemyId=EnemyID::NONE;
|
||||
FacingDirection facingDir=FacingDirection::EAST;
|
||||
bool wave1 = false;
|
||||
bool wave2 = false;
|
||||
@ -53,6 +55,7 @@ class Editor {
|
||||
bool reEnableTextEntry; //We must set this to true to cause Text Entry to reappear due to how the callback works.
|
||||
std::vector<std::vector<Tile>> map;
|
||||
const vi2d GRID_SIZE = { 32,32 };
|
||||
EnemyID selectedEnemy=SHOOTME;
|
||||
public:
|
||||
Editor() {}
|
||||
void Update(float fElapsedTime);
|
||||
|
@ -104,6 +104,7 @@
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<LanguageStandard>stdcpp14</LanguageStandard>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
|
BIN
Faceball2030/assets/circle.png
Normal file
BIN
Faceball2030/assets/circle.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 671 B |
@ -8,6 +8,24 @@ using namespace olc;
|
||||
|
||||
FaceBall* game;
|
||||
|
||||
void FaceBall::InitializeEnemyData() {
|
||||
enemyData[EXIT] = { "EXIT",GREEN };
|
||||
enemyData[SHOOTME] = { "SHOOTME",YELLOW,1,1,PI / 8,2,1,3 };
|
||||
enemyData[COIN] = { "Coin",BLUE };
|
||||
enemyData[POWERUP_ARMOR] = { "Armor",{96,0,96} };
|
||||
enemyData[POWERUP_SPEED] = { "Speed",{96,0,96} };
|
||||
enemyData[POWERUP_SHOT] = { "Shot",{96,0,96} };
|
||||
enemyData[SPECIAL_CAMO] = { "Camouflage",DARK_RED };
|
||||
enemyData[SPECIAL_STOP] = { "Stop",DARK_RED };
|
||||
enemyData[SPECIAL_SHIELD] = { "Shield",DARK_RED };
|
||||
enemyData[AREA_MAP] = { "Map",GREEN };
|
||||
}
|
||||
|
||||
EnemyData FaceBall::GetData(EnemyID id)
|
||||
{
|
||||
return enemyData[id];
|
||||
}
|
||||
|
||||
vec3d
|
||||
FaceBall::Matrix_MultiplyVector(mat4x4& m, vec3d& i)
|
||||
{
|
||||
@ -587,8 +605,11 @@ bool FaceBall::OnUserCreate()
|
||||
sAppName = "Faceball 2030";
|
||||
matProj = Matrix_MakeProjection(90.0f, (float)ScreenHeight() / (float)ScreenWidth(), 0.1f, 1000.0f);
|
||||
dot = new Decal(new Sprite("assets/dot.png"));
|
||||
circle = new Decal(new Sprite("assets/circle.png"));
|
||||
enemy_ShootMe_tex = new Decal(new Sprite("assets/enemies/ShootMe.png"));
|
||||
|
||||
InitializeEnemyData();
|
||||
|
||||
Mesh testEnemy("assets/enemies/ShootMe.obj", enemy_ShootMe_tex);
|
||||
mapMesh.texture = dot;
|
||||
for (int i = 0; i < 75; i++) {
|
||||
|
@ -123,6 +123,17 @@ struct Object {
|
||||
float rot = 0;
|
||||
};
|
||||
|
||||
struct EnemyData {
|
||||
std::string name;
|
||||
Pixel col=YELLOW;
|
||||
int health = 1;
|
||||
float movSpd = 1;
|
||||
float rotSpd = PI / 8;
|
||||
int ammo = 2;
|
||||
float fireDelay = 1;
|
||||
float reloadTime = 3;
|
||||
};
|
||||
|
||||
struct mat4x4
|
||||
{
|
||||
float m[4][4] = { 0 };
|
||||
@ -136,12 +147,16 @@ class FaceBall : public PixelGameEngine
|
||||
{
|
||||
sAppName = "3D Demo";
|
||||
}
|
||||
|
||||
EnemyData GetData(EnemyID id);
|
||||
Decal* circle;
|
||||
private:
|
||||
Mesh mapMesh;
|
||||
|
||||
Decal* dot, * enemy_ShootMe_tex;
|
||||
vi2d MAP_SIZE = { 10,10 };
|
||||
std::vector<std::vector<MapSquare>>map;
|
||||
std::map<EnemyID, EnemyData>enemyData;
|
||||
std::vector<Object>objects;
|
||||
GAMEMODE mode=GAMEMODE::GAME;
|
||||
Editor editor;
|
||||
@ -183,4 +198,5 @@ class FaceBall : public PixelGameEngine
|
||||
bool OnUserCreate() override;
|
||||
bool OnUserUpdate(float fElapsedTime) override;
|
||||
void OnTextEntryComplete(const std::string& sText) override;
|
||||
void InitializeEnemyData();
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user