diff options
| -rw-r--r-- | src/com/fourisland/frigidearth/Main.java | 2 | ||||
| -rw-r--r-- | src/com/fourisland/frigidearth/MapViewGameState.java | 98 |
2 files changed, 77 insertions, 23 deletions
| diff --git a/src/com/fourisland/frigidearth/Main.java b/src/com/fourisland/frigidearth/Main.java index 09c0b28..ff81aad 100644 --- a/src/com/fourisland/frigidearth/Main.java +++ b/src/com/fourisland/frigidearth/Main.java | |||
| @@ -75,7 +75,7 @@ public class Main extends Canvas | |||
| 75 | 75 | ||
| 76 | gameCanvas.createBufferStrategy(2); | 76 | gameCanvas.createBufferStrategy(2); |
| 77 | 77 | ||
| 78 | setGameState(new MapViewGameState()); | 78 | setGameState(new MapViewGameState(1)); |
| 79 | } | 79 | } |
| 80 | 80 | ||
| 81 | public static void setGameState(GameState m_gameState) | 81 | public static void setGameState(GameState m_gameState) |
| diff --git a/src/com/fourisland/frigidearth/MapViewGameState.java b/src/com/fourisland/frigidearth/MapViewGameState.java index 5d21a99..9bee398 100644 --- a/src/com/fourisland/frigidearth/MapViewGameState.java +++ b/src/com/fourisland/frigidearth/MapViewGameState.java | |||
| @@ -52,9 +52,13 @@ public class MapViewGameState implements GameState | |||
| 52 | private boolean haveKey = false; | 52 | private boolean haveKey = false; |
| 53 | private boolean snowGrow = false; | 53 | private boolean snowGrow = false; |
| 54 | private int heartbeat = 0; | 54 | private int heartbeat = 0; |
| 55 | private int floor; | ||
| 56 | private int spawnTimer = 0; | ||
| 55 | 57 | ||
| 56 | public MapViewGameState() | 58 | public MapViewGameState(int floor) |
| 57 | { | 59 | { |
| 60 | this.floor = floor; | ||
| 61 | |||
| 58 | grid = new Tile[MAP_WIDTH][MAP_HEIGHT]; | 62 | grid = new Tile[MAP_WIDTH][MAP_HEIGHT]; |
| 59 | gridLighting = new boolean[MAP_WIDTH][MAP_HEIGHT]; | 63 | gridLighting = new boolean[MAP_WIDTH][MAP_HEIGHT]; |
| 60 | 64 | ||
| @@ -352,8 +356,6 @@ public class MapViewGameState implements GameState | |||
| 352 | { | 356 | { |
| 353 | int width = Functions.random(MIN_ROOM_WIDTH, MAX_ROOM_WIDTH); | 357 | int width = Functions.random(MIN_ROOM_WIDTH, MAX_ROOM_WIDTH); |
| 354 | int height = Functions.random(MIN_ROOM_HEIGHT, MAX_ROOM_HEIGHT); | 358 | int height = Functions.random(MIN_ROOM_HEIGHT, MAX_ROOM_HEIGHT); |
| 355 | Tile floor = Tile.DirtFloor; | ||
| 356 | Tile wall = Tile.DirtWall; | ||
| 357 | Room room = null; | 359 | Room room = null; |
| 358 | Rectangle bounds = null; | 360 | Rectangle bounds = null; |
| 359 | 361 | ||
| @@ -414,34 +416,35 @@ public class MapViewGameState implements GameState | |||
| 414 | { | 416 | { |
| 415 | if (xtemp == room.getX()) | 417 | if (xtemp == room.getX()) |
| 416 | { | 418 | { |
| 417 | grid[xtemp][ytemp] = wall; | 419 | grid[xtemp][ytemp] = Tile.DirtWall; |
| 418 | } else if (xtemp == room.getX()+room.getWidth()-1) | 420 | } else if (xtemp == room.getX()+room.getWidth()-1) |
| 419 | { | 421 | { |
| 420 | grid[xtemp][ytemp] = wall; | 422 | grid[xtemp][ytemp] = Tile.DirtWall; |
| 421 | } else if (ytemp == room.getY()) | 423 | } else if (ytemp == room.getY()) |
| 422 | { | 424 | { |
| 423 | grid[xtemp][ytemp] = wall; | 425 | grid[xtemp][ytemp] = Tile.DirtWall; |
| 424 | } else if (ytemp == room.getY()+room.getHeight()-1) | 426 | } else if (ytemp == room.getY()+room.getHeight()-1) |
| 425 | { | 427 | { |
| 426 | grid[xtemp][ytemp] = wall; | 428 | grid[xtemp][ytemp] = Tile.DirtWall; |
| 427 | } else { | 429 | } else { |
| 428 | grid[xtemp][ytemp] = floor; | 430 | grid[xtemp][ytemp] = Tile.DirtFloor; |
| 429 | } | 431 | } |
| 430 | } | 432 | } |
| 431 | } | 433 | } |
| 432 | 434 | ||
| 433 | rooms.add(room); | 435 | rooms.add(room); |
| 434 | 436 | ||
| 435 | // Place mice in random rooms because yolo | 437 | // Spawn some random monsters |
| 436 | int random = Functions.random(0,100); | 438 | int perf = 60; |
| 437 | if (random < 25) | 439 | for (;;) |
| 438 | { | 440 | { |
| 439 | Mob mob = new Mouse(Functions.random(room.getX()+1, room.getX()+room.getWidth()-2), Functions.random(room.getY()+1, room.getY()+room.getHeight()-2)); | 441 | if (Functions.random(0, 100) < perf) |
| 440 | mobs.add(mob); | 442 | { |
| 441 | } else if (random < 50) | 443 | perf /= 2; |
| 442 | { | 444 | mobs.add(createInDepthMonster(room)); |
| 443 | Mob mob = new Rat(Functions.random(room.getX()+1, room.getX()+room.getWidth()-2), Functions.random(room.getY()+1, room.getY()+room.getHeight()-2)); | 445 | } else { |
| 444 | mobs.add(mob); | 446 | break; |
| 447 | } | ||
| 445 | } | 448 | } |
| 446 | 449 | ||
| 447 | return true; | 450 | return true; |
| @@ -450,7 +453,6 @@ public class MapViewGameState implements GameState | |||
| 450 | private boolean makeCorridor(int x, int y, Direction direction) | 453 | private boolean makeCorridor(int x, int y, Direction direction) |
| 451 | { | 454 | { |
| 452 | int length = Functions.random(MIN_CORRIDOR_LENGTH, MAX_CORRIDOR_LENGTH); | 455 | int length = Functions.random(MIN_CORRIDOR_LENGTH, MAX_CORRIDOR_LENGTH); |
| 453 | Tile floor = Tile.Corridor; | ||
| 454 | 456 | ||
| 455 | int xtemp = 0; | 457 | int xtemp = 0; |
| 456 | int ytemp = 0; | 458 | int ytemp = 0; |
| @@ -480,7 +482,7 @@ public class MapViewGameState implements GameState | |||
| 480 | 482 | ||
| 481 | for (ytemp = y; ytemp > (y-length); ytemp--) | 483 | for (ytemp = y; ytemp > (y-length); ytemp--) |
| 482 | { | 484 | { |
| 483 | grid[xtemp][ytemp] = floor; | 485 | grid[xtemp][ytemp] = Tile.Corridor; |
| 484 | } | 486 | } |
| 485 | 487 | ||
| 486 | break; | 488 | break; |
| @@ -508,7 +510,7 @@ public class MapViewGameState implements GameState | |||
| 508 | 510 | ||
| 509 | for (xtemp = x; xtemp < (x+length); xtemp++) | 511 | for (xtemp = x; xtemp < (x+length); xtemp++) |
| 510 | { | 512 | { |
| 511 | grid[xtemp][ytemp] = floor; | 513 | grid[xtemp][ytemp] = Tile.Corridor; |
| 512 | } | 514 | } |
| 513 | 515 | ||
| 514 | break; | 516 | break; |
| @@ -536,7 +538,7 @@ public class MapViewGameState implements GameState | |||
| 536 | 538 | ||
| 537 | for (ytemp = y; ytemp < (y+length); ytemp++) | 539 | for (ytemp = y; ytemp < (y+length); ytemp++) |
| 538 | { | 540 | { |
| 539 | grid[xtemp][ytemp] = floor; | 541 | grid[xtemp][ytemp] = Tile.Corridor; |
| 540 | } | 542 | } |
| 541 | 543 | ||
| 542 | break; | 544 | break; |
| @@ -564,7 +566,7 @@ public class MapViewGameState implements GameState | |||
| 564 | 566 | ||
| 565 | for (xtemp = x; xtemp > (x-length); xtemp--) | 567 | for (xtemp = x; xtemp > (x-length); xtemp--) |
| 566 | { | 568 | { |
| 567 | grid[xtemp][ytemp] = floor; | 569 | grid[xtemp][ytemp] = Tile.Corridor; |
| 568 | } | 570 | } |
| 569 | 571 | ||
| 570 | break; | 572 | break; |
| @@ -744,6 +746,7 @@ public class MapViewGameState implements GameState | |||
| 744 | 746 | ||
| 745 | public void processInput(KeyEvent e) | 747 | public void processInput(KeyEvent e) |
| 746 | { | 748 | { |
| 749 | // Handle input | ||
| 747 | switch (e.getKeyCode()) | 750 | switch (e.getKeyCode()) |
| 748 | { | 751 | { |
| 749 | case KeyEvent.VK_LEFT: | 752 | case KeyEvent.VK_LEFT: |
| @@ -916,9 +919,29 @@ public class MapViewGameState implements GameState | |||
| 916 | heartbeat++; | 919 | heartbeat++; |
| 917 | if (heartbeat == 4) heartbeat = 0; | 920 | if (heartbeat == 4) heartbeat = 0; |
| 918 | 921 | ||
| 922 | // Spawn mobs | ||
| 923 | if (spawnTimer == 10) | ||
| 924 | { | ||
| 925 | spawnTimer = 0; | ||
| 926 | |||
| 927 | Room r = rooms.get(Functions.random(0, rooms.size()-1)); | ||
| 928 | if (r.canGenerateMonsters()) | ||
| 929 | { | ||
| 930 | Mob m = createInDepthMonster(r); | ||
| 931 | if (!gridLighting[m.x][m.y]) | ||
| 932 | { | ||
| 933 | mobs.add(m); | ||
| 934 | } | ||
| 935 | } | ||
| 936 | } else { | ||
| 937 | spawnTimer++; | ||
| 938 | } | ||
| 939 | |||
| 940 | // Do viewport stuff | ||
| 919 | adjustViewport(); | 941 | adjustViewport(); |
| 920 | calculateFieldOfView(); | 942 | calculateFieldOfView(); |
| 921 | 943 | ||
| 944 | // Handle death | ||
| 922 | if (health <= 0) | 945 | if (health <= 0) |
| 923 | { | 946 | { |
| 924 | printMessage("You have died! Press [ENTER] to quit."); | 947 | printMessage("You have died! Press [ENTER] to quit."); |
| @@ -1184,4 +1207,35 @@ public class MapViewGameState implements GameState | |||
| 1184 | 1207 | ||
| 1185 | return null; | 1208 | return null; |
| 1186 | } | 1209 | } |
| 1210 | |||
| 1211 | private Mob createInDepthMonster(Room r) | ||
| 1212 | { | ||
| 1213 | int x = Functions.random(r.getX()+1, r.getX()+r.getWidth()-2); | ||
| 1214 | int y = Functions.random(r.getY()+1, r.getY()+r.getHeight()-2); | ||
| 1215 | |||
| 1216 | List<Class> mobTypes = new ArrayList<Class>(); | ||
| 1217 | switch (floor) | ||
| 1218 | { | ||
| 1219 | case 10: | ||
| 1220 | case 9: | ||
| 1221 | case 8: | ||
| 1222 | case 7: | ||
| 1223 | case 6: | ||
| 1224 | case 5: | ||
| 1225 | case 4: | ||
| 1226 | case 3: | ||
| 1227 | case 2: | ||
| 1228 | case 1: | ||
| 1229 | mobTypes.add(Mouse.class); | ||
| 1230 | mobTypes.add(Rat.class); | ||
| 1231 | } | ||
| 1232 | |||
| 1233 | try | ||
| 1234 | { | ||
| 1235 | return (Mob) mobTypes.get(Functions.random(0, mobTypes.size()-1)).getConstructor(int.class, int.class).newInstance(x, y); | ||
| 1236 | } catch (Exception ex) | ||
| 1237 | { | ||
| 1238 | return null; | ||
| 1239 | } | ||
| 1240 | } | ||
| 1187 | } | 1241 | } |
