diff --git a/assets/continue.bmp b/assets/continue.bmp new file mode 100644 index 0000000..e3319c5 Binary files /dev/null and b/assets/continue.bmp differ diff --git a/assets/continuesel.bmp b/assets/continuesel.bmp new file mode 100644 index 0000000..ec1be3d Binary files /dev/null and b/assets/continuesel.bmp differ diff --git a/assets/exit.bmp b/assets/exit.bmp new file mode 100644 index 0000000..94c424f Binary files /dev/null and b/assets/exit.bmp differ diff --git a/assets/exitsel.bmp b/assets/exitsel.bmp new file mode 100644 index 0000000..6cbe55a Binary files /dev/null and b/assets/exitsel.bmp differ diff --git a/assets/menu.bmp b/assets/menu.bmp new file mode 100644 index 0000000..d2960d8 Binary files /dev/null and b/assets/menu.bmp differ diff --git a/assets/pause.bmp b/assets/pause.bmp new file mode 100644 index 0000000..346be69 Binary files /dev/null and b/assets/pause.bmp differ diff --git a/assets/start.bmp b/assets/start.bmp new file mode 100644 index 0000000..1acdcd0 Binary files /dev/null and b/assets/start.bmp differ diff --git a/assets/startsel.bmp b/assets/startsel.bmp new file mode 100644 index 0000000..119633e Binary files /dev/null and b/assets/startsel.bmp differ diff --git a/src/main/java/com/fmudanyali/Main.java b/src/main/java/com/fmudanyali/Main.java index 6cf6105..7d07f9a 100644 --- a/src/main/java/com/fmudanyali/Main.java +++ b/src/main/java/com/fmudanyali/Main.java @@ -31,7 +31,7 @@ public class Main { } Render.init(); Screen.init(); - scenes.push(new Game()); + scenes.push(new MainMenu()); while(!scenes.empty() && !exit){ Time.Tick(); diff --git a/src/main/java/com/fmudanyali/Render.java b/src/main/java/com/fmudanyali/Render.java index f8d0c3f..51bd888 100644 --- a/src/main/java/com/fmudanyali/Render.java +++ b/src/main/java/com/fmudanyali/Render.java @@ -44,7 +44,7 @@ public class Render { WIDTH, HEIGHT, SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE | SDL_WINDOW_OPENGL); SDL_SetHint(SDL_HINT_RENDER_DRIVER, "opengl"); - SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "2"); + SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "0"); renderer = SDL_CreateRenderer(Render.window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); diff --git a/src/main/java/com/fmudanyali/scenes/Game.java b/src/main/java/com/fmudanyali/scenes/Game.java index 2d56876..934fcbf 100644 --- a/src/main/java/com/fmudanyali/scenes/Game.java +++ b/src/main/java/com/fmudanyali/scenes/Game.java @@ -25,21 +25,19 @@ import static org.libsdl.api.event.SdlEvents.*; import static com.fmudanyali.Render.*; import static org.libsdl.api.keycode.SDL_Keycode.*; import static org.libsdl.api.render.SdlRender.*; -import static org.libsdl.api.error.SdlError.SDL_GetError; +//import static org.libsdl.api.error.SdlError.SDL_GetError; public class Game extends Scene { - public static boolean exit = false; public static boolean escPressed = false; - public int kek = 0; - - public Player player = new Player(); + int kek = 0; + private Player player = new Player(); public Game() throws Exception{ Screen.makeBackground("scene1/tile.bmp"); } @Override - public void loop(){ + public void loop() throws Exception{ while(SDL_PollEvent(Main.e) != 0){ switch(Main.e.type){ case SDL_QUIT: @@ -67,13 +65,11 @@ public class Game extends Scene { player.movement(); Screen.scroll(); - /* ++kek; if(kek == 60){ - System.out.println(SDL_GetError()); + System.out.println(escPressed); kek = 0; } - */ SDL_RenderClear(renderer); SDL_RenderCopy(renderer, Screen.wallpaper, null, null); diff --git a/src/main/java/com/fmudanyali/scenes/MainMenu.java b/src/main/java/com/fmudanyali/scenes/MainMenu.java index 17b0bd9..c57baaa 100644 --- a/src/main/java/com/fmudanyali/scenes/MainMenu.java +++ b/src/main/java/com/fmudanyali/scenes/MainMenu.java @@ -17,6 +17,128 @@ package com.fmudanyali.scenes; +import com.fmudanyali.Main; +import com.fmudanyali.Screen; +import com.fmudanyali.FileLoader; + +import org.libsdl.api.rect.SDL_Rect; +import org.libsdl.api.render.*; +import org.libsdl.api.surface.SDL_Surface; + +import static com.fmudanyali.Render.*; +import static org.libsdl.api.render.SdlRender.*; +import static org.libsdl.api.surface.SdlSurface.*; +import static org.libsdl.api.event.SdlEvents.*; +import static org.libsdl.api.keycode.SDL_Keycode.*; + public class MainMenu extends Scene { - public void loop(){}; + private SDL_Surface tempSurface; + private SDL_Texture startTexture, exitTexture, background; + private SDL_Rect startPos = new SDL_Rect(); + private SDL_Rect exitPos = new SDL_Rect(); + private SDL_Rect buttonSize = new SDL_Rect(); + private boolean enterPressed = false; + private boolean wPressed = false; + private boolean sPressed = false; + private int selection = 0; + + public MainMenu() throws Exception{ + buttonSize.x = buttonSize.y = 0; + buttonSize.w = startPos.w = exitPos.w = 150; + buttonSize.h = startPos.h = exitPos.h = 100; + startPos.x = (Screen.WIDTH - Screen.CANV_W)/2 + 10; + startPos.y = (Screen.HEIGHT - Screen.CANV_H)/2 + 10; + exitPos.x = (Screen.WIDTH - Screen.CANV_W)/2 + 10; + exitPos.y = (Screen.HEIGHT - Screen.CANV_H)/2 + 120; + + tempSurface = SDL_LoadBMP(FileLoader.getFilePath("menu.bmp")); + background = SDL_CreateTextureFromSurface(renderer, tempSurface); + tempSurface = SDL_LoadBMP(FileLoader.getFilePath("startsel.bmp")); + startTexture = SDL_CreateTextureFromSurface(renderer, tempSurface); + tempSurface = SDL_LoadBMP(FileLoader.getFilePath("exit.bmp")); + exitTexture = SDL_CreateTextureFromSurface(renderer, tempSurface); + } + + @Override + public void loop() throws Exception{ + while(SDL_PollEvent(Main.e) != 0){ + switch(Main.e.type){ + case SDL_QUIT: + Main.exit = true; + break; + case SDL_KEYDOWN: + switch(Main.e.key.keysym.sym){ + case SDLK_RETURN: + if(!enterPressed){ + confirm(); + enterPressed = true; + } + break; + case SDLK_w: + if(!wPressed){ + selection = Math.min(selection - 1, 1); + wPressed = true; + updateButtons(); + } + break; + case SDLK_s: + if(!sPressed){ + selection = Math.min(selection + 1, 1); + sPressed = true; + updateButtons(); + } + break; + } + break; + case SDL_KEYUP: + switch(Main.e.key.keysym.sym){ + case SDLK_RETURN: + enterPressed = false; + break; + case SDLK_w: + wPressed = false; + break; + case SDLK_s: + sPressed = false; + break; + } + break; + } + } + + SDL_RenderClear(renderer); + SDL_RenderCopy(renderer, Screen.wallpaper, null, null); + SDL_RenderCopy(renderer, background, Screen.canvas, Screen.canvasPos); + SDL_RenderCopy(renderer, startTexture, buttonSize, startPos); + SDL_RenderCopy(renderer, exitTexture, buttonSize, exitPos); + SDL_RenderPresent(renderer); + } + + private void updateButtons() throws Exception{ + switch(selection){ + case 0: + tempSurface = SDL_LoadBMP(FileLoader.getFilePath("startsel.bmp")); + startTexture = SDL_CreateTextureFromSurface(renderer, tempSurface); + tempSurface = SDL_LoadBMP(FileLoader.getFilePath("exit.bmp")); + exitTexture = SDL_CreateTextureFromSurface(renderer, tempSurface); + break; + case 1: + tempSurface = SDL_LoadBMP(FileLoader.getFilePath("start.bmp")); + startTexture = SDL_CreateTextureFromSurface(renderer, tempSurface); + tempSurface = SDL_LoadBMP(FileLoader.getFilePath("exitsel.bmp")); + exitTexture = SDL_CreateTextureFromSurface(renderer, tempSurface); + break; + } + } + + private void confirm() throws Exception{ + switch(selection){ + case 0: + Main.scenes.push(new Game()); + break; + case 1: + Main.scenes.pop(); + break; + } + } } diff --git a/src/main/java/com/fmudanyali/scenes/PauseMenu.java b/src/main/java/com/fmudanyali/scenes/PauseMenu.java index 18d83da..6cac11c 100644 --- a/src/main/java/com/fmudanyali/scenes/PauseMenu.java +++ b/src/main/java/com/fmudanyali/scenes/PauseMenu.java @@ -19,7 +19,9 @@ package com.fmudanyali.scenes; import com.fmudanyali.Main; import com.fmudanyali.Screen; +import com.fmudanyali.FileLoader; +import org.libsdl.api.rect.SDL_Rect; import org.libsdl.api.render.*; import org.libsdl.api.surface.SDL_Surface; @@ -30,18 +32,36 @@ import static org.libsdl.api.event.SdlEvents.*; import static org.libsdl.api.keycode.SDL_Keycode.*; public class PauseMenu extends Scene { - public static SDL_Surface textureSurface = - SDL_CreateRGBSurface(0, Screen.WIDTH, Screen.HEIGHT, 32, 0, 0, 0, 0); - public static SDL_Texture menuTexture; - public static boolean escPressed = false; + private SDL_Surface tempSurface; + private SDL_Texture contTexture, exitTexture, background; + private SDL_Rect contPos = new SDL_Rect(); + private SDL_Rect exitPos = new SDL_Rect(); + private SDL_Rect buttonSize = new SDL_Rect(); + private boolean escPressed = false; + private boolean enterPressed = false; + private boolean wPressed = false; + private boolean sPressed = false; + private int selection = 0; - public PauseMenu(){ - SDL_FillRect(textureSurface, null, 0); - menuTexture = SDL_CreateTextureFromSurface(renderer, textureSurface); + public PauseMenu() throws Exception{ + buttonSize.x = buttonSize.y = 0; + buttonSize.w = contPos.w = exitPos.w = 150; + buttonSize.h = contPos.h = exitPos.h = 100; + contPos.x = (Screen.WIDTH - Screen.CANV_W)/2 + 10; + contPos.y = (Screen.HEIGHT - Screen.CANV_H)/2 + 10; + exitPos.x = (Screen.WIDTH - Screen.CANV_W)/2 + 10; + exitPos.y = (Screen.HEIGHT - Screen.CANV_H)/2 + 120; + + tempSurface = SDL_LoadBMP(FileLoader.getFilePath("pause.bmp")); + background = SDL_CreateTextureFromSurface(renderer, tempSurface); + tempSurface = SDL_LoadBMP(FileLoader.getFilePath("continuesel.bmp")); + contTexture = SDL_CreateTextureFromSurface(renderer, tempSurface); + tempSurface = SDL_LoadBMP(FileLoader.getFilePath("exit.bmp")); + exitTexture = SDL_CreateTextureFromSurface(renderer, tempSurface); } @Override - public void loop(){ + public void loop() throws Exception{ while(SDL_PollEvent(Main.e) != 0){ switch(Main.e.type){ case SDL_QUIT: @@ -55,6 +75,26 @@ public class PauseMenu extends Scene { escPressed = true; } break; + case SDLK_RETURN: + if(!enterPressed){ + confirm(); + enterPressed = true; + } + break; + case SDLK_w: + if(!wPressed){ + selection = Math.min(selection - 1, 1); + wPressed = true; + updateButtons(); + } + break; + case SDLK_s: + if(!sPressed){ + selection = Math.min(selection + 1, 1); + sPressed = true; + updateButtons(); + } + break; } break; case SDL_KEYUP: @@ -62,13 +102,55 @@ public class PauseMenu extends Scene { case SDLK_ESCAPE: escPressed = false; break; + case SDLK_RETURN: + enterPressed = false; + break; + case SDLK_w: + wPressed = false; + break; + case SDLK_s: + sPressed = false; + break; } break; } } SDL_RenderClear(renderer); - SDL_RenderCopy(renderer, menuTexture, null, null); + SDL_RenderCopy(renderer, Screen.wallpaper, null, null); + SDL_RenderCopy(renderer, background, Screen.canvas, Screen.canvasPos); + SDL_RenderCopy(renderer, contTexture, buttonSize, contPos); + SDL_RenderCopy(renderer, exitTexture, buttonSize, exitPos); SDL_RenderPresent(renderer); } + + private void updateButtons() throws Exception{ + switch(selection){ + case 0: + tempSurface = SDL_LoadBMP(FileLoader.getFilePath("continuesel.bmp")); + contTexture = SDL_CreateTextureFromSurface(renderer, tempSurface); + tempSurface = SDL_LoadBMP(FileLoader.getFilePath("exit.bmp")); + exitTexture = SDL_CreateTextureFromSurface(renderer, tempSurface); + break; + case 1: + tempSurface = SDL_LoadBMP(FileLoader.getFilePath("continue.bmp")); + contTexture = SDL_CreateTextureFromSurface(renderer, tempSurface); + tempSurface = SDL_LoadBMP(FileLoader.getFilePath("exitsel.bmp")); + exitTexture = SDL_CreateTextureFromSurface(renderer, tempSurface); + break; + } + } + + private void confirm(){ + switch(selection){ + case 0: + Main.scenes.pop(); + Game.escPressed = false; + break; + case 1: + Main.scenes.pop(); + Main.scenes.pop(); + break; + } + } } diff --git a/src/main/java/com/fmudanyali/scenes/Scene.java b/src/main/java/com/fmudanyali/scenes/Scene.java index 1c2ba21..af6a3f3 100644 --- a/src/main/java/com/fmudanyali/scenes/Scene.java +++ b/src/main/java/com/fmudanyali/scenes/Scene.java @@ -18,5 +18,5 @@ package com.fmudanyali.scenes; public abstract class Scene { - public abstract void loop(); + public abstract void loop() throws Exception; } \ No newline at end of file