diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/com/fourisland/frigidearth/MapViewGameState.java | 104 | ||||
| -rw-r--r-- | src/com/fourisland/frigidearth/Tile.java | 6 |
2 files changed, 110 insertions, 0 deletions
| diff --git a/src/com/fourisland/frigidearth/MapViewGameState.java b/src/com/fourisland/frigidearth/MapViewGameState.java index bcac17d..5a13e7e 100644 --- a/src/com/fourisland/frigidearth/MapViewGameState.java +++ b/src/com/fourisland/frigidearth/MapViewGameState.java | |||
| @@ -47,6 +47,11 @@ public class MapViewGameState implements GameState | |||
| 47 | private int health = 15; | 47 | private int health = 15; |
| 48 | private int maxHealth = 15; | 48 | private int maxHealth = 15; |
| 49 | private int defense = 0; | 49 | private int defense = 0; |
| 50 | private int keyx; | ||
| 51 | private int keyy; | ||
| 52 | private boolean haveKey = false; | ||
| 53 | private boolean snowGrow = false; | ||
| 54 | private int heartbeat = 0; | ||
| 50 | 55 | ||
| 51 | public MapViewGameState() | 56 | public MapViewGameState() |
| 52 | { | 57 | { |
| @@ -311,24 +316,34 @@ public class MapViewGameState implements GameState | |||
| 311 | case North: | 316 | case North: |
| 312 | grid[room.getX()+room.getWidth()/2][room.getY()+room.getHeight()] = Tile.Door; | 317 | grid[room.getX()+room.getWidth()/2][room.getY()+room.getHeight()] = Tile.Door; |
| 313 | grid[room.getX()+room.getWidth()/2][room.getY()+room.getHeight()-1] = Tile.DirtFloor; | 318 | grid[room.getX()+room.getWidth()/2][room.getY()+room.getHeight()-1] = Tile.DirtFloor; |
| 319 | keyx = room.getX()+3; | ||
| 320 | keyy = room.getY()+3; | ||
| 314 | break; | 321 | break; |
| 315 | 322 | ||
| 316 | case East: | 323 | case East: |
| 317 | grid[room.getX()-1][room.getY()+room.getHeight()/2] = Tile.Door; | 324 | grid[room.getX()-1][room.getY()+room.getHeight()/2] = Tile.Door; |
| 318 | grid[room.getX()][room.getY()+room.getHeight()/2] = Tile.DirtFloor; | 325 | grid[room.getX()][room.getY()+room.getHeight()/2] = Tile.DirtFloor; |
| 326 | keyx = room.getX()+10; | ||
| 327 | keyy = room.getY()+3; | ||
| 319 | break; | 328 | break; |
| 320 | 329 | ||
| 321 | case South: | 330 | case South: |
| 322 | grid[room.getX()+room.getWidth()/2][room.getY()-1] = Tile.Door; | 331 | grid[room.getX()+room.getWidth()/2][room.getY()-1] = Tile.Door; |
| 323 | grid[room.getX()+room.getWidth()/2][room.getY()] = Tile.DirtFloor; | 332 | grid[room.getX()+room.getWidth()/2][room.getY()] = Tile.DirtFloor; |
| 333 | keyx = room.getX()+3; | ||
| 334 | keyy = room.getY()+10; | ||
| 324 | break; | 335 | break; |
| 325 | 336 | ||
| 326 | case West: | 337 | case West: |
| 327 | grid[room.getX()+room.getWidth()][room.getY()+room.getHeight()/2] = Tile.Door; | 338 | grid[room.getX()+room.getWidth()][room.getY()+room.getHeight()/2] = Tile.Door; |
| 328 | grid[room.getX()+room.getWidth()-1][room.getY()+room.getHeight()/2] = Tile.DirtFloor; | 339 | grid[room.getX()+room.getWidth()-1][room.getY()+room.getHeight()/2] = Tile.DirtFloor; |
| 340 | keyx = room.getX()+3; | ||
| 341 | keyy = room.getY()+3; | ||
| 329 | break; | 342 | break; |
| 330 | } | 343 | } |
| 331 | 344 | ||
| 345 | rooms.add(room); | ||
| 346 | |||
| 332 | adjustViewport(); | 347 | adjustViewport(); |
| 333 | calculateFieldOfView(); | 348 | calculateFieldOfView(); |
| 334 | } | 349 | } |
| @@ -673,6 +688,12 @@ public class MapViewGameState implements GameState | |||
| 673 | } | 688 | } |
| 674 | } | 689 | } |
| 675 | 690 | ||
| 691 | // Render key | ||
| 692 | if ((!haveKey) && (gridLighting[keyx][keyy])) | ||
| 693 | { | ||
| 694 | g.drawImage(SystemFont.getCharacter('k', Color.YELLOW), (keyx-viewportx)*TILE_WIDTH, (keyy-viewporty)*TILE_HEIGHT, TILE_WIDTH, TILE_HEIGHT, null); | ||
| 695 | } | ||
| 696 | |||
| 676 | // Render player | 697 | // Render player |
| 677 | g.drawImage(SystemFont.getCharacter('@', Color.WHITE), (playerx-viewportx)*TILE_WIDTH, (playery-viewporty)*TILE_HEIGHT, TILE_WIDTH, TILE_HEIGHT, null); | 698 | g.drawImage(SystemFont.getCharacter('@', Color.WHITE), (playerx-viewportx)*TILE_WIDTH, (playery-viewporty)*TILE_HEIGHT, TILE_WIDTH, TILE_HEIGHT, null); |
| 678 | 699 | ||
| @@ -767,6 +788,27 @@ public class MapViewGameState implements GameState | |||
| 767 | 788 | ||
| 768 | break; | 789 | break; |
| 769 | 790 | ||
| 791 | case KeyEvent.VK_G: | ||
| 792 | if ((playerx == keyx) && (playery == keyy) && (!haveKey)) | ||
| 793 | { | ||
| 794 | haveKey = true; | ||
| 795 | printMessage("You get the key"); | ||
| 796 | printMessage("All the windows in the room shatter!"); | ||
| 797 | |||
| 798 | for (int x=0; x<MAP_WIDTH; x++) | ||
| 799 | { | ||
| 800 | for (int y=0; y<MAP_HEIGHT; y++) | ||
| 801 | { | ||
| 802 | if (grid[x][y] == Tile.Window) | ||
| 803 | { | ||
| 804 | grid[x][y] = Tile.ShatteredWindow; | ||
| 805 | } | ||
| 806 | } | ||
| 807 | } | ||
| 808 | } | ||
| 809 | |||
| 810 | break; | ||
| 811 | |||
| 770 | default: | 812 | default: |
| 771 | return; | 813 | return; |
| 772 | } | 814 | } |
| @@ -808,6 +850,68 @@ public class MapViewGameState implements GameState | |||
| 808 | } | 850 | } |
| 809 | } | 851 | } |
| 810 | 852 | ||
| 853 | // Move snow | ||
| 854 | if (snowGrow) | ||
| 855 | { | ||
| 856 | for (int x=0; x<MAP_WIDTH; x++) | ||
| 857 | { | ||
| 858 | for (int y=0; y<MAP_HEIGHT; y++) | ||
| 859 | { | ||
| 860 | if (grid[x][y] == Tile.Snow) | ||
| 861 | { | ||
| 862 | for (Direction d : Direction.values()) | ||
| 863 | { | ||
| 864 | Point to = d.to(new Point(x, y)); | ||
| 865 | if ((!grid[to.x][to.y].isBlocked()) && (grid[to.x][to.y] != Tile.Snow) && (grid[to.x][to.y] != Tile.UpStairs)) | ||
| 866 | { | ||
| 867 | grid[to.x][to.y] = Tile.SnowTemp; | ||
| 868 | } | ||
| 869 | } | ||
| 870 | } | ||
| 871 | } | ||
| 872 | } | ||
| 873 | |||
| 874 | for (int x=0; x<MAP_WIDTH; x++) | ||
| 875 | { | ||
| 876 | for (int y=0; y<MAP_HEIGHT; y++) | ||
| 877 | { | ||
| 878 | if (grid[x][y] == Tile.ShatteredWindow) | ||
| 879 | { | ||
| 880 | for (Direction d : Direction.values()) | ||
| 881 | { | ||
| 882 | Point to = d.to(new Point(x, y)); | ||
| 883 | if ((!grid[to.x][to.y].isBlocked()) && (grid[to.x][to.y] != Tile.Snow)) | ||
| 884 | { | ||
| 885 | grid[to.x][to.y] = Tile.Snow; | ||
| 886 | } | ||
| 887 | } | ||
| 888 | } else if (grid[x][y] == Tile.SnowTemp) | ||
| 889 | { | ||
| 890 | grid[x][y] = Tile.Snow; | ||
| 891 | } | ||
| 892 | } | ||
| 893 | } | ||
| 894 | } | ||
| 895 | |||
| 896 | snowGrow = !snowGrow; | ||
| 897 | |||
| 898 | // Heartbeat | ||
| 899 | if (heartbeat % 2 == 0) | ||
| 900 | { | ||
| 901 | if (grid[playerx][playery] == Tile.Snow) | ||
| 902 | { | ||
| 903 | health--; | ||
| 904 | } else if (heartbeat == Functions.random(0, 3)) { | ||
| 905 | if (health < maxHealth) | ||
| 906 | { | ||
| 907 | health++; | ||
| 908 | } | ||
| 909 | } | ||
| 910 | } | ||
| 911 | |||
| 912 | heartbeat++; | ||
| 913 | if (heartbeat == 4) heartbeat = 0; | ||
| 914 | |||
| 811 | adjustViewport(); | 915 | adjustViewport(); |
| 812 | calculateFieldOfView(); | 916 | calculateFieldOfView(); |
| 813 | 917 | ||
| diff --git a/src/com/fourisland/frigidearth/Tile.java b/src/com/fourisland/frigidearth/Tile.java index 5d758e2..8b11e50 100644 --- a/src/com/fourisland/frigidearth/Tile.java +++ b/src/com/fourisland/frigidearth/Tile.java | |||
| @@ -152,6 +152,12 @@ public enum Tile | |||
| 152 | { | 152 | { |
| 153 | return new Color(255, 250, 250); | 153 | return new Color(255, 250, 250); |
| 154 | } | 154 | } |
| 155 | }, | ||
| 156 | SnowTemp { | ||
| 157 | public boolean isBlocked() | ||
| 158 | { | ||
| 159 | return false; | ||
| 160 | } | ||
| 155 | }; | 161 | }; |
| 156 | 162 | ||
| 157 | public abstract boolean isBlocked(); | 163 | public abstract boolean isBlocked(); |
