Skip to content

Commit

Permalink
Merge pull request #728 from Maescool/refactor/Character
Browse files Browse the repository at this point in the history
Refactored CharacterIds into an an enum
  • Loading branch information
danielduner committed Mar 4, 2012
2 parents 8becc54 + e0faec3 commit ce3bfe8
Show file tree
Hide file tree
Showing 12 changed files with 109 additions and 97 deletions.
9 changes: 9 additions & 0 deletions src/com/mojang/mojam/GameCharacter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.mojang.mojam;

public enum GameCharacter {
LordLard,
HerrVonSpeck,
DuchessDonut,
CountessCruller,
None
}
36 changes: 18 additions & 18 deletions src/com/mojang/mojam/MojamComponent.java
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ public class MojamComponent extends Canvas implements Runnable,
private int localId;
public static int localTeam; //local team is the team of the client. This can be used to check if something should be only rendered on one person's screen

public int playerCharacter;
public GameCharacter playerCharacter;
private boolean sendCharacter = false;

private Thread hostThread;
Expand Down Expand Up @@ -265,26 +265,26 @@ private void initCharacters(){
if(!Options.isCharacterIDset()){
addMenu(new CharacterSelectionMenu());
}
playerCharacter = Options.getCharacterID();
playerCharacter = GameCharacter.values()[Options.getCharacterID()];
}

public void showError(String s) {
handleAction(TitleMenu.RETURN_TO_TITLESCREEN);
addMenu(new GuiError(s));
}

private synchronized void createLevel(String levelPath, GameMode mode, int characterID) {
private synchronized void createLevel(String levelPath, GameMode mode, GameCharacter character) {
LevelInformation li = LevelInformation.getInfoForPath(levelPath);
if (li != null) {
createLevel(li, mode, characterID);
createLevel(li, mode, character);
return;
} else if (!isMultiplayer) {
showError("Missing map.");
}
showError("Missing map - Multiplayer");
}

private synchronized void createLevel(LevelInformation li, GameMode mode, int characterID) {
private synchronized void createLevel(LevelInformation li, GameMode mode, GameCharacter character) {
try {
//level = Level.fromFile(li);
level = mode.generateLevel(li);
Expand All @@ -293,21 +293,21 @@ private synchronized void createLevel(LevelInformation li, GameMode mode, int ch
showError("Unable to load map.");
return;
}
initLevel(characterID);
initLevel(character);
paused = false;
}

private synchronized void initLevel(int characterID) {
private synchronized void initLevel(GameCharacter character) {
if (level == null)
return;
// level.init();
players[0] = new Player(synchedKeys[0], synchedMouseButtons[0], level.width * Tile.WIDTH
/ 2 - 16, (level.height - 5 - 1) * Tile.HEIGHT - 16, Team.Team1, characterID);
/ 2 - 16, (level.height - 5 - 1) * Tile.HEIGHT - 16, Team.Team1, character);
players[0].setFacing(4);
level.addEntity(players[0]);
if (isMultiplayer) {
players[1] = new Player(synchedKeys[1], synchedMouseButtons[1], level.width
* Tile.WIDTH / 2 - 16, 7 * Tile.HEIGHT - 16, Team.Team2, characterID);
* Tile.WIDTH / 2 - 16, 7 * Tile.HEIGHT - 16, Team.Team2, character);
level.addEntity(players[1]);
} else {
players[1] = null;
Expand Down Expand Up @@ -548,9 +548,9 @@ private void tick() {
if (level != null && level.victoryConditions != null) {
if(level.victoryConditions.isVictoryConditionAchieved()) {
int winner = level.victoryConditions.playerVictorious();
int characterID = winner == players[0].getTeam() ? players[0].getCharacterID()
: players[1].getCharacterID();
addMenu(new WinMenu(GAME_WIDTH, GAME_HEIGHT, winner, characterID));
GameCharacter winningCharacter = winner == players[0].getTeam() ? players[0].getCharacter()
: players[1].getCharacter();
addMenu(new WinMenu(GAME_WIDTH, GAME_HEIGHT, winner, winningCharacter));
level = null;
return;
}
Expand Down Expand Up @@ -579,7 +579,7 @@ private void tick() {
}

if (sendCharacter) {
synchronizer.addCommand(new CharacterCommand(localId, playerCharacter));
synchronizer.addCommand(new CharacterCommand(localId, playerCharacter.ordinal()));
sendCharacter = false;
}

Expand Down Expand Up @@ -658,11 +658,11 @@ private void tick() {
if (TitleMenu.level.vanilla) {
packetLink.sendPacket(new StartGamePacket(TurnSynchronizer.synchedSeed,
TitleMenu.level.getUniversalPath(), DifficultyList
.getDifficultyID(TitleMenu.difficulty), playerCharacter));
.getDifficultyID(TitleMenu.difficulty), playerCharacter.ordinal()));
} else {
packetLink.sendPacket(new StartGamePacketCustom(TurnSynchronizer.synchedSeed,
level, DifficultyList.getDifficultyID(TitleMenu.difficulty),
playerCharacter));
playerCharacter.ordinal()));
}
packetLink.setPacketListener(MojamComponent.this);

Expand Down Expand Up @@ -763,7 +763,7 @@ public void handle(int playerId, NetworkCommand packet) {

if (packet instanceof CharacterCommand) {
CharacterCommand charCommand = (CharacterCommand) packet;
players[charCommand.getPlayerID()].setCharacterID(charCommand.getCharacterID());
players[charCommand.getPlayerID()].setCharacter(GameCharacter.values()[charCommand.getCharacterID()]);
}

if (packet instanceof PauseCommand) {
Expand All @@ -787,7 +787,7 @@ public void handle(Packet packet) {
TitleMenu.difficulty = DifficultyList.getDifficulties().get(
sgPacker.getDifficulty());
createLevel(sgPacker.getLevelFile(), TitleMenu.defaultGameMode,
sgPacker.getOpponentCharacterID());
GameCharacter.values()[sgPacker.getOpponentCharacterID()]);
}
} else if (packet instanceof TurnPacket) {
synchronizer.onTurnPacket((TurnPacket) packet);
Expand All @@ -800,7 +800,7 @@ public void handle(Packet packet) {
sgPacker.getDifficulty());
level = sgPacker.getLevel();
paused = false;
initLevel(sgPacker.getOpponentCharacterID());
initLevel(GameCharacter.values()[sgPacker.getOpponentCharacterID()]);
}
} else if (packet instanceof PingPacket) {
PingPacket pp = (PingPacket)packet;
Expand Down
8 changes: 4 additions & 4 deletions src/com/mojang/mojam/Options.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,14 @@ public class Options {
public static int getCharacterID() {
String value = properties.getProperty(CHARACTER_ID);
if (value == null) {
return Art.LORD_LARD;
return GameCharacter.LordLard.ordinal();
}
int id = Art.LORD_LARD;
int id = GameCharacter.LordLard.ordinal();
try {
id = Integer.parseInt(value);
} catch (NumberFormatException e) {}
if (id < 0 || id >= Art.NUM_CHARACTERS) {
return Art.LORD_LARD;
if (id < 0 || id >= GameCharacter.values().length-1) {
return GameCharacter.LordLard.ordinal();
}
return id;
}
Expand Down
19 changes: 10 additions & 9 deletions src/com/mojang/mojam/entity/Player.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.util.Random;

import com.mojang.mojam.GameCharacter;
import com.mojang.mojam.Keys;
import com.mojang.mojam.MojamComponent;
import com.mojang.mojam.MouseButtons;
Expand Down Expand Up @@ -74,7 +75,7 @@ public class Player extends Mob implements LootCollector {
private int deadDelay = 0;
private int nextWalkSmokeTick = 0;
boolean isImmortal;
private int characterID;
private GameCharacter character;

/**
* Constructor
Expand All @@ -85,11 +86,11 @@ public class Player extends Mob implements LootCollector {
* @param y Initial y coordinate
* @param team Team number
*/
public Player(Keys keys, MouseButtons mouseButtons, int x, int y, int team, int characterID) {
public Player(Keys keys, MouseButtons mouseButtons, int x, int y, int team, GameCharacter character) {
super(x, y, team);
this.keys = keys;
this.mouseButtons = mouseButtons;
this.characterID = characterID;
this.character = character;

startX = x;
startY = y;
Expand Down Expand Up @@ -630,7 +631,7 @@ public void dropAllMoney() {

@Override
public void render(Screen screen) {
Bitmap[][] sheet = Art.getPlayer(getCharacterID());
Bitmap[][] sheet = Art.getPlayer(getCharacter());

if(sheet == null){
return;
Expand Down Expand Up @@ -666,12 +667,12 @@ public void render(Screen screen) {
}
}

public void setCharacterID(int characterID) {
this.characterID = characterID;
public void setCharacter(GameCharacter character) {
this.character = character;
}

public int getCharacterID(){
return characterID;
public GameCharacter getCharacter(){
return character;
}

@Override
Expand Down Expand Up @@ -807,7 +808,7 @@ public void hurt(Entity source, float damage) {
* Revive the player. Carried items are lost, as is all the money.
*/
private void revive() {
Notifications.getInstance().add(MojamComponent.texts.hasDiedCharacter(getCharacterID()));
Notifications.getInstance().add(MojamComponent.texts.hasDiedCharacter(getCharacter()));
carrying = null;
dropAllMoney();
pos.set(startX, startY);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,24 @@
package com.mojang.mojam.entity.animation;

import com.mojang.mojam.GameCharacter;
import com.mojang.mojam.level.tile.HoleTile;
import com.mojang.mojam.level.tile.Tile;
import com.mojang.mojam.screen.Art;
import com.mojang.mojam.screen.Screen;

public class PlayerFallingAnimation extends Animation {
int characterID;
GameCharacter character;

public PlayerFallingAnimation(double x, double y, int characterID) {
public PlayerFallingAnimation(double x, double y, GameCharacter character) {
super(x, y, 60);
this.characterID = characterID;
this.character = character;
}

public void render(Screen screen) {

int anim = life * 8 * 2 / duration;

screen.blit(Art.getPlayer(characterID)[0][anim%8 + 8], pos.x, pos.y + Tile.HEIGHT - anim*3);
screen.blit(Art.getPlayer(character)[0][anim%8 + 8], pos.x, pos.y + Tile.HEIGHT - anim*3);
screen.blit(Art.exclamation_mark, pos.x + 20, pos.y + Tile.HEIGHT - anim*3 - 5);
Tile tileBelow = level.getTile((int)pos.x/Tile.WIDTH, (int)pos.y/Tile.WIDTH+1);
if (tileBelow.getName() != HoleTile.NAME) tileBelow.render(screen);
Expand Down
8 changes: 5 additions & 3 deletions src/com/mojang/mojam/entity/mob/Mob.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.mojang.mojam.entity.mob;

import com.mojang.mojam.GameCharacter;
import com.mojang.mojam.MojamComponent;
import com.mojang.mojam.entity.Bullet;
import com.mojang.mojam.entity.Entity;
Expand Down Expand Up @@ -390,8 +391,8 @@ public boolean fallDownHole() {
level.addEntity(animation);
remove();
} else {
int characterID = ((Player)this).getCharacterID();
level.addEntity(new PlayerFallingAnimation(x*Tile.WIDTH, y*Tile.HEIGHT, characterID));
GameCharacter character = ((Player)this).getCharacter();
level.addEntity(new PlayerFallingAnimation(x*Tile.WIDTH, y*Tile.HEIGHT, character));
if (((Player)this).isCarrying()){
ItemFallAnimation animation = new ItemFallAnimation(x*Tile.WIDTH, (y-1)*Tile.HEIGHT, ((Player)this).carrying.getSprite());
if(((Player)this).carrying instanceof Harvester){
Expand All @@ -400,7 +401,8 @@ public boolean fallDownHole() {
level.addEntity(animation);
((Player)this).carrying.remove();
}
if (characterID < 2)
// TODO add a sex attribute to Characters
if (character.ordinal() < 2)
MojamComponent.soundPlayer.playSound("/sound/falling_male.wav", (float) pos.x, (float) pos.y);
else
MojamComponent.soundPlayer.playSound("/sound/falling_female.wav", (float) pos.x, (float) pos.y);
Expand Down
13 changes: 7 additions & 6 deletions src/com/mojang/mojam/gui/CharacterButton.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.mojang.mojam.gui;

import com.mojang.mojam.GameCharacter;
import com.mojang.mojam.MojamComponent;
import com.mojang.mojam.screen.Bitmap;
import com.mojang.mojam.screen.Screen;
Expand All @@ -22,14 +23,14 @@ public class CharacterButton extends Button {
backgrounds[2].fill(1, 1, WIDTH - 2, HEIGHT - 2, 0xff3a210f);
}

private int characterID;
private GameCharacter character;
private Bitmap characterArt;
private boolean selected;
private boolean hasFocus;

public CharacterButton(int id, int characterID, Bitmap characterArt, int x, int y) {
super(id, MojamComponent.texts.playerNameCharacter(characterID), x, y, WIDTH, HEIGHT);
this.characterID = characterID;
public CharacterButton(int id, GameCharacter character, Bitmap characterArt, int x, int y) {
super(id, MojamComponent.texts.playerNameCharacter(character), x, y, WIDTH, HEIGHT);
this.character = character;
this.characterArt = characterArt;
}

Expand All @@ -41,8 +42,8 @@ public boolean isSelected() {
return selected;
}

public int getCharacterID() {
return characterID;
public GameCharacter getCharacter() {
return character;
}

public void setFocus(boolean focus) {
Expand Down
21 changes: 11 additions & 10 deletions src/com/mojang/mojam/gui/CharacterSelectionMenu.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.awt.event.KeyEvent;

import com.mojang.mojam.GameCharacter;
import com.mojang.mojam.MojamComponent;
import com.mojang.mojam.MouseButtons;
import com.mojang.mojam.Options;
Expand Down Expand Up @@ -35,25 +36,25 @@ private void addButtons() {
xOffset = (gameWidth - (CharacterButton.WIDTH * 2 + 20)) / 2;
yOffset = (gameHeight - (CharacterButton.HEIGHT * 2 + 20)) / 2 - 20;
selected = lordLard = (CharacterButton) addButton(new CharacterButton(
TitleMenu.CHARACTER_BUTTON_ID, Art.LORD_LARD, Art.getPlayer(Art.LORD_LARD)[0][6],
TitleMenu.CHARACTER_BUTTON_ID, GameCharacter.LordLard, Art.getPlayer(GameCharacter.LordLard)[0][6],
xOffset, yOffset));
selected.setSelected(true);
herrSpeck = (CharacterButton) addButton(new CharacterButton(TitleMenu.CHARACTER_BUTTON_ID,
Art.HERR_VON_SPECK, Art.getPlayer(Art.HERR_VON_SPECK)[0][2], xOffset + 20
GameCharacter.HerrVonSpeck, Art.getPlayer(GameCharacter.HerrVonSpeck)[0][2], xOffset + 20
+ CharacterButton.WIDTH, yOffset));
duchessDonut = (CharacterButton) addButton(new CharacterButton(
TitleMenu.CHARACTER_BUTTON_ID, Art.DUCHESS_DONUT,
Art.getPlayer(Art.DUCHESS_DONUT)[0][6], xOffset, yOffset + 20
TitleMenu.CHARACTER_BUTTON_ID, GameCharacter.DuchessDonut,
Art.getPlayer(GameCharacter.DuchessDonut)[0][6], xOffset, yOffset + 20
+ CharacterButton.HEIGHT));
countessCruller = (CharacterButton) addButton(new CharacterButton(
TitleMenu.CHARACTER_BUTTON_ID, Art.COUNTESS_CRULLER,
Art.getPlayer(Art.COUNTESS_CRULLER)[0][2], xOffset + 20 + CharacterButton.WIDTH,
TitleMenu.CHARACTER_BUTTON_ID, GameCharacter.CountessCruller,
Art.getPlayer(GameCharacter.CountessCruller)[0][2], xOffset + 20 + CharacterButton.WIDTH,
yOffset + 20 + CharacterButton.HEIGHT));
if (Options.isCharacterIDset()) {
selected.setSelected(false);
for (ClickableComponent button : buttons) {
CharacterButton charButton = (CharacterButton) button;
if (charButton.getCharacterID() == Options.getCharacterID()) {
if (charButton.getCharacter().ordinal() == Options.getCharacterID()) {
selected = charButton;
break;
}
Expand Down Expand Up @@ -82,7 +83,7 @@ public void render(Screen screen) {
MojamComponent.GAME_WIDTH / 2, yOffset - 24, Font.Align.CENTERED);
if (focus == back || focus == select) {
int frame = (walkTime / 4 % 6 + 6) % 6;
screen.blit(Art.getPlayer(selected.getCharacterID())[frame][(walkTime / 32) % 8],
screen.blit(Art.getPlayer(selected.getCharacter())[frame][(walkTime / 32) % 8],
MojamComponent.GAME_WIDTH / 2 - 16, MojamComponent.GAME_HEIGHT / 2 - 35);
}
}
Expand All @@ -94,9 +95,9 @@ public void buttonPressed(ClickableComponent button) {
selected = (CharacterButton) button;
selected.setSelected(true);
} else if (button == select) {
Options.set(Options.CHARACTER_ID, selected.getCharacterID());
Options.set(Options.CHARACTER_ID, selected.getCharacter().ordinal());
Options.saveProperties();
MojamComponent.instance.playerCharacter = selected.getCharacterID();
MojamComponent.instance.playerCharacter = selected.getCharacter();
}
}

Expand Down

0 comments on commit ce3bfe8

Please sign in to comment.