package gamelogic; import gui.simpleUI.EditItem; import gui.simpleUI.ModifierGroup; import java.util.Arrays; import util.Log; import worldData.Entity; import worldData.Updateable; import worldData.Visitor; import commands.Command; public class GameParticipant implements Entity, EditItem { private static final String LOG_TAG = "GameParticipant"; private StatList myStatList; private ActionList myActionList; private GameItemList myGameItemList; private String myType; private String myName; private int myIconId; private Updateable myParent; public GameParticipant(String type, String participantName, int iconId) { myType = type; myName = participantName; myIconId = iconId; } public String getName() { return myName; } public String getType() { return myType; } public int getIconId() { return myIconId; } public StatList getStatList() { if (myStatList == null) myStatList = new StatList(); return myStatList; } /** * @param statName * @return {@link Float#NaN} if the stat could not be found! */ public float getStatValue(String statName) { if (myStatList == null) { Log.e(LOG_TAG, "Tryed to get " + statName + " from emplty statList (was null)"); return Float.NaN; } Stat s = myStatList.get(statName); if (s == null) { Log.e(LOG_TAG, "Stat " + statName + " could not be found! Returning Float.NaN"); return Float.NaN; } return s.getValue(); } public boolean setStatValue(String statName, float newStatValue) { if (myStatList == null) return false; Stat s = getStatList().get(statName); if (s == null) return false; s.setValue(newStatValue); return true; } public ActionList getActionList() { if (myActionList == null) myActionList = new ActionList(); return myActionList; } public GameItemList getGameItemList() { if (myGameItemList == null) myGameItemList = new GameItemList(); return myGameItemList; } public ActionFeedback doAction(String actionName, GameParticipant target) { if (actionName == null) return null; GameAction a = getActionList().get(actionName); if (a != null) { ActionFeedback feedback = a.doAction(this, target); FeedbackReports.getInstance().addFeedback(feedback); return feedback; } return null; } public void generateEditGUI(ModifierGroup s) { if (myStatList != null) { myStatList.generateEditGUI(s); } if (myActionList != null) myActionList.generateEditGUI(s); if (myGameItemList != null) myGameItemList.generateEditGUI(s); } public void generateViewGUI(ModifierGroup s) { if (myStatList != null) myStatList.generateViewGUI(s); if (myActionList != null) myActionList.generateViewGUI(s); if (myGameItemList != null) myGameItemList.generateViewGUI(s); } @Override public Updateable getMyParent() { return myParent; } @Override public void setMyParent(Updateable parent) { myParent = parent; } @Override public boolean update(float timeDelta, Updateable parent) { setMyParent(parent); if (myActionList != null) myActionList.update(timeDelta, parent); if (myStatList != null) myStatList.update(timeDelta, parent); if (myGameItemList != null) myGameItemList.update(timeDelta, parent); return true; } @Override public boolean accept(Visitor visitor) { return visitor.default_visit(this); } public boolean addStat(Stat stat) { return getStatList().add(stat); } public boolean addAction(GameAction action) { if (action.getOnClickCommand() == null) setDefaultExecuteAction(action); return getActionList().add(action); } private void setDefaultExecuteAction(final GameAction action) { action.setOnClickCommand(new Command() { @Override public boolean execute() { return action.doAction(GameParticipant.this, null) .actionCorrectlyExecuted(); } }); } @Override public void customizeScreen(ModifierGroup group, Object message) { if (message instanceof String) { String m = (String) message; String[] keywords = { "Edit", "edit", "editscreen", "Edit screen", "edit mode", "editmode", "Editmode" }; // TODO if (Arrays.asList(keywords).contains(m)) { generateEditGUI(group); } } else { generateViewGUI(group); } } }