[virtualcommons-svn] commit/foraging: 3 new changesets
Status: Beta
Brought to you by:
alllee
From: Bitbucket <com...@bi...> - 2011-12-13 00:40:08
|
3 new commits in foraging: https://bitbucket.org/virtualcommons/foraging/changeset/80094b419037/ changeset: 80094b419037 user: alllee date: 2011-12-06 22:17:42 summary: censored chat is now working again, still need to test sanctioning in this condition affected #: 6 files diff -r 7065b38e2c9c054b0517b14b6f571fdaa3bf7f3b -r 80094b4190373fe4b978f246cf97d86f106f26f1 src/main/java/edu/asu/commons/foraging/conf/ServerConfiguration.java --- a/src/main/java/edu/asu/commons/foraging/conf/ServerConfiguration.java +++ b/src/main/java/edu/asu/commons/foraging/conf/ServerConfiguration.java @@ -3,7 +3,7 @@ import edu.asu.commons.conf.ExperimentConfiguration; /** - * $Id: ServerConfiguration.java 529 2010-08-17 00:08:01Z alllee $ + * $Id$ * * Contains the know-how for parsing and programmatically accessing the * server's configuration file properties. The forager server's config file @@ -17,7 +17,7 @@ * * @author <a href='mailto:All...@as...'>Allen Lee</a> * @see - * @version $Revision: 529 $ + * @version $Revision$ */ public class ServerConfiguration extends ExperimentConfiguration.Base<RoundConfiguration> { @@ -47,7 +47,7 @@ } public boolean isCensoredChat() { - return assistant.getBooleanProperty("censored-chat", false); + return assistant.getBooleanProperty("censored-chat-enabled", false); } public boolean shouldInitialize3D() { diff -r 7065b38e2c9c054b0517b14b6f571fdaa3bf7f3b -r 80094b4190373fe4b978f246cf97d86f106f26f1 src/main/java/edu/asu/commons/foraging/event/FacilitatorCensoredChatRequest.java --- a/src/main/java/edu/asu/commons/foraging/event/FacilitatorCensoredChatRequest.java +++ b/src/main/java/edu/asu/commons/foraging/event/FacilitatorCensoredChatRequest.java @@ -6,7 +6,7 @@ import edu.asu.commons.net.Identifier; /** - * $Id: FacilitatorCensoredChatRequest.java 522 2010-06-30 19:17:48Z alllee $ + * $Id$ * * Event used to forward censored chat requests to the facilitator. * @@ -19,8 +19,8 @@ private ChatRequest censoredChatRequest; - public FacilitatorCensoredChatRequest(Identifier facilitatorId, ChatRequest request) { - super(facilitatorId); + public FacilitatorCensoredChatRequest(Identifier id, ChatRequest request) { + super(id); this.censoredChatRequest = request; } @@ -36,5 +36,9 @@ return censoredChatRequest.getTarget(); } + public void setId(Identifier id) { + super.id = id; + } + } diff -r 7065b38e2c9c054b0517b14b6f571fdaa3bf7f3b -r 80094b4190373fe4b978f246cf97d86f106f26f1 src/main/java/edu/asu/commons/foraging/facilitator/FacilitatorChatPanel.java --- a/src/main/java/edu/asu/commons/foraging/facilitator/FacilitatorChatPanel.java +++ b/src/main/java/edu/asu/commons/foraging/facilitator/FacilitatorChatPanel.java @@ -23,11 +23,13 @@ import edu.asu.commons.util.ResourceLoader; /** - * $Id: FacilitatorChatPanel.java 533 2010-11-23 19:31:57Z alllee $ + * $Id$ * * Exposes a JPanel for approving chat messages and tied to a specific Facilitator instance. * + * * FIXME: should get rid of Facilitator dependency and use EventChannel instead + * FIXME: turn this into a JTable instead. * * * @author <a href='mailto:All...@as...'>Allen Lee</a> @@ -79,7 +81,7 @@ chatRequestsPanel.setLayout(groupLayout); groupLayout.setAutoCreateGaps(true); GroupLayout.SequentialGroup horizontalGroup = groupLayout.createSequentialGroup(); - JLabel messagesLabel = new JLabel("Messages"); + JLabel messagesLabel = new JLabel("Message"); JLabel approveLabel = new JLabel("Approve"); JLabel statusLabel = new JLabel("Status"); JLabel denyLabel = new JLabel("Deny"); @@ -162,7 +164,7 @@ statusLabelParallelGroup.addComponent(statusLabel); denyParallelGroup.addComponent(denyButton); - GroupLayout.ParallelGroup rowParallelGroup = groupLayout.createParallelGroup(Alignment.BASELINE); + GroupLayout.ParallelGroup rowParallelGroup = groupLayout.createParallelGroup(Alignment.LEADING); rowParallelGroup.addComponent(chatMessageTextArea).addComponent(approveButton).addComponent(statusLabel).addComponent(denyButton); verticalGroup.addGroup(rowParallelGroup); } diff -r 7065b38e2c9c054b0517b14b6f571fdaa3bf7f3b -r 80094b4190373fe4b978f246cf97d86f106f26f1 src/main/java/edu/asu/commons/foraging/facilitator/FacilitatorWindow.java --- a/src/main/java/edu/asu/commons/foraging/facilitator/FacilitatorWindow.java +++ b/src/main/java/edu/asu/commons/foraging/facilitator/FacilitatorWindow.java @@ -224,9 +224,7 @@ - informationScrollPane = new JScrollPane(informationEditorPane, - ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, - ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); + informationScrollPane = new JScrollPane(informationEditorPane); setInstructions(facilitator.getServerConfiguration().getFacilitatorInstructions()); @@ -237,21 +235,19 @@ Dimension minimumSize = new Dimension(600, 200); messagePanel.setMinimumSize(minimumSize); informationScrollPane.setMinimumSize(minimumSize); - - if (facilitator.getServerConfiguration().isCensoredChat()) { - facilitatorChatPanel = new FacilitatorChatPanel(facilitator); - messagePanel.add(facilitatorChatPanel.getComponent(), BorderLayout.CENTER); - } - else { - messageEditorPane = UserInterfaceUtils.createInstructionsEditorPane(); - JScrollPane messageScrollPane = new JScrollPane(messageEditorPane); - messagePanel.add(messageScrollPane, BorderLayout.CENTER); - } + messageEditorPane = UserInterfaceUtils.createInstructionsEditorPane(); + JScrollPane messageScrollPane = new JScrollPane(messageEditorPane); + messagePanel.add(messageScrollPane, BorderLayout.CENTER); JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, informationScrollPane, messagePanel); add(splitPane, BorderLayout.CENTER); double proportion = 0.6d; splitPane.setDividerLocation(proportion); splitPane.setResizeWeight(proportion); + // add censored chat component if necessary + if (facilitator.getServerConfiguration().isCensoredChat()) { + facilitatorChatPanel = new FacilitatorChatPanel(facilitator); + add(facilitatorChatPanel.getComponent(), BorderLayout.SOUTH); + } } private void setInstructions(String contents) { diff -r 7065b38e2c9c054b0517b14b6f571fdaa3bf7f3b -r 80094b4190373fe4b978f246cf97d86f106f26f1 src/main/java/edu/asu/commons/foraging/server/ForagingServer.java --- a/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java +++ b/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java @@ -81,12 +81,12 @@ import edu.asu.commons.util.Utils; /** - * $Id: ForagingServer.java 529 2010-08-17 00:08:01Z alllee $ + * $Id$ * * Main experiment server class for costly sanctioning 2D experiment. * * @author <a href='mailto:All...@as...'>Allen Lee</a> - * @version $Revision: 529 $ + * @version $Revision$ */ public class ForagingServer extends AbstractExperiment<ServerConfiguration, RoundConfiguration> { @@ -284,11 +284,18 @@ sendFacilitatorMessage("configuration doesn't allow for chat but received " + request); return; } - if (configuration.isCensoredChat()) { - transmit(new FacilitatorCensoredChatRequest(facilitatorId, request)); + relayChatRequest(request); + } + }); + addEventProcessor(new EventTypeProcessor<FacilitatorCensoredChatRequest>(FacilitatorCensoredChatRequest.class) { + public void handle(FacilitatorCensoredChatRequest request) { + if (getCurrentRoundConfiguration().isCensoredChat()) { + sendFacilitatorMessage("needs approval: " + request); + request.setId(facilitatorId); + transmit(request); } else { - relayChatRequest(request); + sendFacilitatorMessage("WARNING: received censored chat request but censored chat isn't enabled, bug in configuration."); } } }); diff -r 7065b38e2c9c054b0517b14b6f571fdaa3bf7f3b -r 80094b4190373fe4b978f246cf97d86f106f26f1 src/main/java/edu/asu/commons/foraging/ui/ChatPanel.java --- a/src/main/java/edu/asu/commons/foraging/ui/ChatPanel.java +++ b/src/main/java/edu/asu/commons/foraging/ui/ChatPanel.java @@ -23,6 +23,7 @@ import edu.asu.commons.experiment.DataModel; import edu.asu.commons.foraging.client.ForagingClient; import edu.asu.commons.foraging.conf.RoundConfiguration; +import edu.asu.commons.foraging.event.FacilitatorCensoredChatRequest; import edu.asu.commons.net.Identifier; import edu.asu.commons.ui.UserInterfaceUtils; @@ -155,9 +156,16 @@ if (message == null || "".equals(message) || targetIdentifier == null) { return; } - client.transmit(new ChatRequest(client.getId(), message, targetIdentifier)); + RoundConfiguration configuration = client.getCurrentRoundConfiguration(); + ChatRequest request = new ChatRequest(client.getId(), message, targetIdentifier); + if (configuration.isCensoredChat()) { + client.transmit(new FacilitatorCensoredChatRequest(client.getId(), request)); + } + else { + client.transmit(request); + } // special case for in round chat - if (client.getCurrentRoundConfiguration().isInRoundChatEnabled()) { + if (configuration.isInRoundChatEnabled()) { client.getGameWindow().requestFocusInWindow(); } else { https://bitbucket.org/virtualcommons/foraging/changeset/a1fbd4dbf928/ changeset: a1fbd4dbf928 user: alllee date: 2011-12-08 01:28:17 summary: profiling refactor, removing GroupDataModel from ClientDataModel and instead storing data directly on the ClientDataModel. affected #: 16 files diff -r 80094b4190373fe4b978f246cf97d86f106f26f1 -r a1fbd4dbf9289edc81730ecd5d859d58ec46fec2 src/main/java/edu/asu/commons/foraging/client/ClientDataModel.java --- a/src/main/java/edu/asu/commons/foraging/client/ClientDataModel.java +++ b/src/main/java/edu/asu/commons/foraging/client/ClientDataModel.java @@ -12,37 +12,32 @@ import edu.asu.commons.foraging.event.ClientPositionUpdateEvent; import edu.asu.commons.foraging.event.ExplicitCollectionModeRequest; import edu.asu.commons.foraging.event.RealTimeSanctionRequest; -import edu.asu.commons.foraging.event.SynchronizeClientEvent; +import edu.asu.commons.foraging.graphics.Point3D; import edu.asu.commons.foraging.model.ClientData; -import edu.asu.commons.foraging.model.EnforcementMechanism; import edu.asu.commons.foraging.model.ForagingDataModel; import edu.asu.commons.foraging.model.GroupDataModel; -import edu.asu.commons.foraging.model.RegulationData; import edu.asu.commons.foraging.model.Resource; -import edu.asu.commons.foraging.model.SanctionMechanism; import edu.asu.commons.foraging.rules.ForagingRule; -import edu.asu.commons.foraging.ui.GameWindow2D; import edu.asu.commons.net.Identifier; import edu.asu.commons.util.Duration; /** - * $Id: ClientDataModel.java 499 2010-03-31 00:58:49Z alllee $ + * $Id$ * * This class should only provide game state relevant to a particular client. * * @author Allen Lee - * @version $Revision: 499 $ + * @version $Revision$ */ public class ClientDataModel extends ForagingDataModel { private static final long serialVersionUID = -3424256672940188027L; - private GroupDataModel groupDataModel; +// private GroupDataModel groupDataModel; private final List<Identifier> allClientIdentifiers = new ArrayList<Identifier>(); - // FIXME: can obtain tokensConsumed from the clientDataMap now. - private int currentTokens; + private ClientData clientData; // these are the subjects whom we have sanctioned private Map<Identifier, Duration> sanctioned = new HashMap<Identifier, Duration>(); @@ -55,6 +50,12 @@ private volatile boolean explicitCollectionMode = false; + private Map<Identifier, Point> clientPositions; + + private Map<Identifier, Integer> clientTokens; + + private Map<Point, Resource> resourceDistribution; + public ClientDataModel(ForagingClient client) { super(client.getEventChannel()); this.client = client; @@ -65,13 +66,6 @@ client.transmit(new ExplicitCollectionModeRequest(client.getId(), explicitCollectionMode)); } - public Identifier getMonitorId() { - if (groupDataModel.getActiveMonitor() != null) { - return groupDataModel.getActiveMonitor().getId(); - } - return Identifier.NULL; - } - public boolean isSanctioningAllowed() { return getRoundConfiguration().isSanctioningEnabled(); } @@ -97,15 +91,23 @@ * Returns a Set containing the positions of food pellets. */ public Set<Point> getResourcePositions() { - return groupDataModel.getResourcePositions(); + return resourceDistribution.keySet(); } public Map<Point, Resource> getResourceDistribution() { - return groupDataModel.getResourceDistribution(); + return resourceDistribution; + } + + public Point getClientPosition(Identifier sanctionee) { + return clientPositions.get(sanctionee); + } + + public Map<Identifier, Point> getClientPositions() { + return clientPositions; } public ClientData getClientData() { - return groupDataModel.getClientData(getId()); + return clientData; } public Identifier getId() { @@ -116,32 +118,20 @@ allClientIdentifiers.clear(); sanctioned.clear(); sanctioners.clear(); - if (groupDataModel != null) { - groupDataModel.clear(); - groupDataModel = null; - } + // FIXME: replace } - public List<RegulationData> getSubmittedRegulations() { - return groupDataModel.getSubmittedRegulations(); - } - - public EnforcementMechanism getActiveEnforcementMechanism() { - return groupDataModel.getActiveEnforcementMechanism(); - } - - public SanctionMechanism getActiveSanctionMechanism() { - return groupDataModel.getActiveSanctionMechanism(); - } - public void initialize(GroupDataModel groupDataModel) { clear(); - this.groupDataModel = groupDataModel; Map<Identifier, ClientData> clientDataMap = groupDataModel.getClientDataMap(); Identifier[] ids = new Identifier[clientDataMap.size()]; + // ensure that the allClientIdentifiers natural ordering is by assigned number. for (Map.Entry<Identifier, ClientData> entry : clientDataMap.entrySet()) { - int index = entry.getValue().getAssignedNumber() - 1; - ids[index] = entry.getKey(); + Identifier id = entry.getKey(); + ClientData data = entry.getValue(); + int index = data.getAssignedNumber() - 1; + ids[index] = id; +// clientAssignedNumbers.put(id, data.getAssignedNumber()); } allClientIdentifiers.addAll(Arrays.asList(ids)); } @@ -160,19 +150,23 @@ // if (this.groupDataModel != null) { // this.groupDataModel.clear(); // } - this.groupDataModel = groupDataModel; - currentTokens = groupDataModel.getCurrentTokens( getId() ); +// this.groupDataModel = groupDataModel; + this.clientData = groupDataModel.getClientData(getId()); + update(groupDataModel.getClientTokens(), groupDataModel.getClientPositions(), clientData.getLatestSanctions(), null, null); +// currentTokens = groupDataModel.getCurrentTokens( getId() ); } public List<Identifier> getAllClientIdentifiers() { return allClientIdentifiers; } + @Deprecated public List<ClientData> getOtherClients() { - List<ClientData> clients = new ArrayList<ClientData>(); - clients.addAll(groupDataModel.getClientDataMap().values()); - clients.remove(getClientData()); - return clients; + throw new UnsupportedOperationException("This is now deprecated."); +// List<ClientData> clients = new ArrayList<ClientData>(); +// clients.addAll(groupDataModel.getClientDataMap().values()); +// clients.remove(getClientData()); +// return clients; } public int getAssignedNumber(Identifier id) { @@ -180,43 +174,39 @@ } /** - * Updates client positions, current tokens, etc. FIXME: slight optimization - * hot-spot, 9% of time spent here. + * Updates client positions, current tokens, etc. */ - public void updateDiffs(ClientPositionUpdateEvent event, GameWindow2D window) { - currentTokens = event.getCurrentTokens(); - groupDataModel.updateDiffs(event); - handleRealTimeSanctions(event.getLatestSanctions()); - window.update(event.getTimeLeft()); + public void update(ClientPositionUpdateEvent event) { + update(event.getClientTokens(), event.getClientPositions(), event.getLatestSanctions(), event.getAddedTokens(), event.getRemovedTokens()); } - - /** - * FIXME: lift repeated code from here and update(..) - * - * @param event - * @param window - */ - public void update(SynchronizeClientEvent event, GameWindow2D window) { - if (event.getCurrentTokens() > currentTokens) { - window.collectToken(event.getClientPosition()); + + public void update(Map<Identifier, Integer> clientTokens, + Map<Identifier, Point> currentPositions, + Queue<RealTimeSanctionRequest> latestSanctions, + Resource[] addedResources, + Resource[] removedResources) + { + this.clientTokens = clientTokens; + this.clientPositions = currentPositions; + handleRealTimeSanctions(latestSanctions); + synchronized (resourceDistribution) { + if (removedResources != null) { + for (Resource resource: removedResources) { + resourceDistribution.remove(resource.getPosition()); + } + } + if (addedResources != null) { + for (Resource resource: addedResources) { + resourceDistribution.put(resource.getPosition(), resource); + } + } } - currentTokens = event.getCurrentTokens(); - // groupDataModel.update(event); - handleRealTimeSanctions(event.getLatestSanctions()); } private synchronized void handleRealTimeSanctions(Queue<RealTimeSanctionRequest> latestSanctions) { -// if (!getRoundConfiguration().isRealTimeSanctioningEnabled()) { -// return; -// } for (RealTimeSanctionRequest sanctionRequest : latestSanctions) { System.err.println("Processing real time sanction: from " + sanctionRequest.getSource() + " to " + sanctionRequest.getTarget()); sanction(sanctionRequest.getSource(), sanctionRequest.getTarget()); -// if (getId().equals(sanctionEvent.getTarget())) { - // received a penalty, change colors for the duration of the - // sanction. -// sanction(sanctionEvent.getSource(), getId()); -// } } } @@ -225,19 +215,23 @@ } public int getCurrentTokens() { - return currentTokens; + return clientData.getCurrentTokens(); + } + + public int getCurrentTokens(Identifier id) { + return clientTokens.get(id); } - public Map<Identifier, ClientData> getClientDataMap() { - return new HashMap<Identifier, ClientData>(groupDataModel.getClientDataMap()); - } +// public Map<Identifier, ClientData> getClientDataMap() { +// return groupDataModel.getClientDataMap(); +// } public synchronized boolean isBeingSanctioned(Identifier id) { return checkSanctionStatus(sanctioned, id); } public int getTotalTokens() { - return groupDataModel.getClientData(getId()).getTotalTokens(); + return clientData.getTotalTokens(); } public double getCurrentIncome() { @@ -276,25 +270,6 @@ } // FIXME: deprecate and remove these later - public void clearDiffLists() { - groupDataModel.clearDiffLists(); - } - - public Set<Resource> getAddedResources() { - return groupDataModel.getAddedResources(); - } - - public Set<Resource> getRemovedResources() { - return groupDataModel.getRemovedResources(); - } - - public void setActiveRegulation(RegulationData regulationData) { - groupDataModel.setActiveRegulation(regulationData); - } - - public RegulationData getActiveRegulation() { - return groupDataModel.getActiveRegulation(); - } public void setSelectedRules(List<ForagingRule> selectedRules) { this.selectedRules = selectedRules; } @@ -302,4 +277,10 @@ public List<ForagingRule> getSelectedRules() { return selectedRules; } + + public Point3D getPoint3D(Identifier id) { + // FIXME: this is broken + throw new UnsupportedOperationException("3D support is currently unavailable"); + } + } diff -r 80094b4190373fe4b978f246cf97d86f106f26f1 -r a1fbd4dbf9289edc81730ecd5d859d58ec46fec2 src/main/java/edu/asu/commons/foraging/client/ForagingClient.java --- a/src/main/java/edu/asu/commons/foraging/client/ForagingClient.java +++ b/src/main/java/edu/asu/commons/foraging/client/ForagingClient.java @@ -2,7 +2,6 @@ import java.awt.BorderLayout; import java.awt.Color; -import java.awt.Dimension; import java.awt.Frame; import java.util.LinkedList; @@ -27,7 +26,6 @@ import edu.asu.commons.foraging.event.ClientPositionUpdateEvent; import edu.asu.commons.foraging.event.CollectTokenRequest; import edu.asu.commons.foraging.event.EndRoundEvent; -import edu.asu.commons.foraging.event.LockResourceEvent; import edu.asu.commons.foraging.event.PostRoundSanctionRequest; import edu.asu.commons.foraging.event.PostRoundSanctionUpdateEvent; import edu.asu.commons.foraging.event.RealTimeSanctionRequest; @@ -49,6 +47,7 @@ import edu.asu.commons.foraging.ui.GameWindow3D; import edu.asu.commons.net.SocketIdentifier; import edu.asu.commons.util.Duration; +import edu.asu.commons.util.Utils; @@ -208,29 +207,37 @@ } } }); + addEventProcessor(new EventTypeProcessor<ClientPositionUpdateEvent>(ClientPositionUpdateEvent.class) { + public void handle(ClientPositionUpdateEvent event) { + if (state == ClientState.RUNNING) { + dataModel.update(event); + getGameWindow().update(event.getTimeLeft()); + } + } + }); addEventProcessor(new EventTypeProcessor<SynchronizeClientEvent>(SynchronizeClientEvent.class) { public void handle(SynchronizeClientEvent event) { dataModel.setGroupDataModel(event.getGroupDataModel()); - // FIXME: gross - if (dataModel.is2dExperiment()) { - dataModel.update(event, getGameWindow2D()); - } + +// if (dataModel.is2dExperiment()) { +// dataModel.update(event, getGameWindow2D()); +// } getGameWindow().update(event.getTimeLeft()); } }); initialize2DEventProcessors(); - initialize3DEventProcessors(); +// initialize3DEventProcessors(); messageQueue = new MessageQueue(); } - private void initialize3DEventProcessors() { - addEventProcessor(new EventTypeProcessor<LockResourceEvent>(LockResourceEvent.class) { - public void handle(LockResourceEvent event) { - // tell the game window to highlight the appropriate resource - getGameWindow3D().highlightResource(event); - } - }); - } +// private void initialize3DEventProcessors() { +// addEventProcessor(new EventTypeProcessor<LockResourceEvent>(LockResourceEvent.class) { +// public void handle(LockResourceEvent event) { +// // tell the game window to highlight the appropriate resource +// getGameWindow3D().highlightResource(event); +// } +// }); +// } private void initialize2DEventProcessors() { addEventProcessor(new EventTypeProcessor<BeginChatRoundRequest>(BeginChatRoundRequest.class) { @@ -244,13 +251,7 @@ getGameWindow2D().updateDebriefing(event); } }); - addEventProcessor(new EventTypeProcessor<ClientPositionUpdateEvent>(ClientPositionUpdateEvent.class) { - public void handle(ClientPositionUpdateEvent event) { - if (state == ClientState.RUNNING) { - dataModel.updateDiffs(event, getGameWindow2D()); - } - } - }); + addEventProcessor(new EventTypeProcessor<ClientMessageEvent>(ClientMessageEvent.class) { public void handle(ClientMessageEvent event) { @@ -358,8 +359,8 @@ // moveClient(request); transmit(request); } -// Utils.sleep(100); - Thread.yield(); + Utils.sleep(100); +// Thread.yield(); } } diff -r 80094b4190373fe4b978f246cf97d86f106f26f1 -r a1fbd4dbf9289edc81730ecd5d859d58ec46fec2 src/main/java/edu/asu/commons/foraging/event/ClientPositionUpdateEvent.java --- a/src/main/java/edu/asu/commons/foraging/event/ClientPositionUpdateEvent.java +++ b/src/main/java/edu/asu/commons/foraging/event/ClientPositionUpdateEvent.java @@ -3,18 +3,16 @@ import java.awt.Point; import java.util.Map; import java.util.Queue; -import java.util.Set; import edu.asu.commons.event.AbstractEvent; import edu.asu.commons.foraging.model.ClientData; -import edu.asu.commons.foraging.model.GroupDataModel; import edu.asu.commons.foraging.model.Resource; import edu.asu.commons.net.Identifier; /** - * $Id: ClientPositionUpdateEvent.java 4 2008-07-25 22:51:44Z alllee $ + * $Id$ * * Only contains the differences between rounds since this event is sent quite frequently. * @@ -22,7 +20,7 @@ * * @author Deepali Bhagvat * @author Allen Lee - * @version $Revision: 4 $ + * @version $Revision$ */ public class ClientPositionUpdateEvent extends AbstractEvent { @@ -30,28 +28,24 @@ private final Resource[] addedResources; private final Resource[] removedResources; + // FIXME: merge these two using a Pair private final Map<Identifier, Integer> clientTokens; private final Map<Identifier, Point> clientPositions; private final Queue<RealTimeSanctionRequest> latestSanctions; private final long timeLeft; - public ClientPositionUpdateEvent(ClientData clientData, long timeLeft) { - this(clientData.getId(), clientData.getGroupDataModel(), timeLeft); + public ClientPositionUpdateEvent(ClientData data, Resource[] addedResources, Resource[] removedResources, Map<Identifier, Integer> clientTokens, + Map<Identifier, Point> clientPositions, long timeLeft) { + super(data.getId()); + this.addedResources = addedResources; + this.removedResources = removedResources; + this.clientTokens = clientTokens; + this.clientPositions = clientPositions; + this.timeLeft = timeLeft; + this.latestSanctions = data.getLatestSanctions(); } - public ClientPositionUpdateEvent(Identifier id, GroupDataModel group, long timeLeft) { - super(id); - Set<Resource> addedTokensSet = group.getAddedResources(); - this.addedResources = addedTokensSet.toArray(new Resource[addedTokensSet.size()]); - Set<Resource> removedTokensSet = group.getRemovedResources(); - this.removedResources = removedTokensSet.toArray(new Resource[removedTokensSet.size()]); - this.timeLeft = timeLeft; - this.clientTokens = group.getClientTokens(); - this.clientPositions = group.getClientPositions(); - this.latestSanctions = group.getClientData(id).getLatestSanctions(); - } - public int getCurrentTokens() { return getCurrentTokens( getId() ); } @@ -71,7 +65,7 @@ public Resource[] getRemovedTokens() { return removedResources; } - + public Point getClientPosition() { return getClientPosition(id); } @@ -83,4 +77,12 @@ public long getTimeLeft() { return timeLeft; } + + public Map<Identifier, Point> getClientPositions() { + return clientPositions; + } + + public Map<Identifier, Integer> getClientTokens() { + return clientTokens; + } } diff -r 80094b4190373fe4b978f246cf97d86f106f26f1 -r a1fbd4dbf9289edc81730ecd5d859d58ec46fec2 src/main/java/edu/asu/commons/foraging/facilitator/FacilitatorWindow.java --- a/src/main/java/edu/asu/commons/foraging/facilitator/FacilitatorWindow.java +++ b/src/main/java/edu/asu/commons/foraging/facilitator/FacilitatorWindow.java @@ -18,7 +18,6 @@ import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; -import javax.swing.ScrollPaneConstants; import javax.swing.text.BadLocationException; import edu.asu.commons.foraging.conf.RoundConfiguration; diff -r 80094b4190373fe4b978f246cf97d86f106f26f1 -r a1fbd4dbf9289edc81730ecd5d859d58ec46fec2 src/main/java/edu/asu/commons/foraging/model/ForagingDataModel.java --- a/src/main/java/edu/asu/commons/foraging/model/ForagingDataModel.java +++ b/src/main/java/edu/asu/commons/foraging/model/ForagingDataModel.java @@ -9,12 +9,12 @@ /** - * $Id: ForagingDataModel.java 4 2008-07-25 22:51:44Z alllee $ The + * $Id$ The * - * Convenience abstract class for storing csan data. + * Base class for the foraging client side and server side data models. * * @author Allen Lee - * @version $Revision: 4 $ + * @version $Revision$ */ public abstract class ForagingDataModel implements DataModel<RoundConfiguration> { @@ -24,6 +24,8 @@ protected transient EventChannel channel; protected transient boolean sanctioningEnabled; protected transient boolean experiment2d; + protected transient int boardWidth; + protected transient int boardHeight; private RoundConfiguration roundConfiguration; @@ -36,28 +38,34 @@ } public int getBoardWidth() { - return roundConfiguration.getResourceWidth(); + return boardWidth; } public int getBoardHeight() { - return roundConfiguration.getResourceDepth(); + return boardHeight; } public RoundConfiguration getRoundConfiguration() { return roundConfiguration; } - // FIXME: considers game world to be flat rectilinear, will need to adapt to - // torus - // (wraparound on vertical edge only) for other experiments. + // FIXME: considers game world to be flat rectilinear, may need to adapt to + // torus (wraparound on vertical edge only) for other experiments. public boolean isValidPosition(Point p) { - return p.x >= 0 && p.x < getBoardWidth() && p.y >= 0 && p.y < getBoardHeight(); + return isValidPosition(p.x, p.y); + } + + public boolean isValidPosition(int x, int y) { + return x >= 0 && x < boardWidth && y >= 0 && y < boardHeight; } public void setRoundConfiguration(RoundConfiguration configuration) { this.roundConfiguration = configuration; sanctioningEnabled = configuration.isSanctioningEnabled(); experiment2d = configuration.is2dExperiment(); + boardHeight = configuration.getResourceDepth(); + boardWidth = configuration.getResourceWidth(); + } public boolean isSanctioningEnabled() { diff -r 80094b4190373fe4b978f246cf97d86f106f26f1 -r a1fbd4dbf9289edc81730ecd5d859d58ec46fec2 src/main/java/edu/asu/commons/foraging/model/ResourceDispenser.java --- a/src/main/java/edu/asu/commons/foraging/model/ResourceDispenser.java +++ b/src/main/java/edu/asu/commons/foraging/model/ResourceDispenser.java @@ -16,14 +16,14 @@ /** - * $Id: ResourceDispenser.java 489 2010-03-10 19:05:12Z alllee $ + * $Id$ * * Creates resource tokens in the game world. Current implementation generates a * resource token probabilistically. The probability that a token will be generated * in an empty space is * P(t) = r * the number of neighboring cells containing a resource token / totalNumberOfNeighboringCells * - * @version $Revision: 489 $ + * @version $Revision$ */ public class ResourceDispenser { @@ -360,7 +360,7 @@ return rate * getNeighborsTokenRatio(group, currentX, currentY); } - protected double getNeighborsTokenRatio(GroupDataModel group, int currentX, int currentY) { + protected double getNeighborsTokenRatio(final GroupDataModel group, final int currentX, final int currentY) { double neighborsWithTokens = 0; // start off at -1 to offset the off-by-one we get from adding the // current cell. diff -r 80094b4190373fe4b978f246cf97d86f106f26f1 -r a1fbd4dbf9289edc81730ecd5d859d58ec46fec2 src/main/java/edu/asu/commons/foraging/server/ForagingServer.java --- a/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java +++ b/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java @@ -1,5 +1,6 @@ package edu.asu.commons.foraging.server; +import java.awt.Point; import java.io.BufferedReader; import java.io.IOException; import java.util.ArrayList; @@ -10,6 +11,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.logging.FileHandler; import java.util.logging.Handler; import java.util.logging.Logger; @@ -68,6 +70,7 @@ import edu.asu.commons.foraging.model.Direction; import edu.asu.commons.foraging.model.EnforcementMechanism; import edu.asu.commons.foraging.model.GroupDataModel; +import edu.asu.commons.foraging.model.Resource; import edu.asu.commons.foraging.model.ResourceDispenser; import edu.asu.commons.foraging.model.ServerDataModel; import edu.asu.commons.foraging.rules.ForagingRule; @@ -312,7 +315,6 @@ sendFacilitatorMessage("Received all quizzes, ready to start round."); Utils.notify(quizSignal); } - } }); addEventProcessor(new EventTypeProcessor<PostRoundSanctionRequest>(PostRoundSanctionRequest.class) { @@ -847,16 +849,23 @@ clientData.collectToken(); } } - - for (ClientData clientData : clients.values()) { - if (shouldSynchronize(clientData.getAssignedNumber())) { - transmit(new SynchronizeClientEvent(clientData, currentRoundDuration.getTimeLeft())); - } - else { - transmit(new ClientPositionUpdateEvent(clientData, currentRoundDuration.getTimeLeft())); + for (GroupDataModel group: serverDataModel.getGroups()) { + Set<Resource> addedTokensSet = group.getAddedResources(); + Resource[] addedResources = addedTokensSet.toArray(new Resource[addedTokensSet.size()]); + Set<Resource> removedTokensSet = group.getRemovedResources(); + Resource[] removedResources = removedTokensSet.toArray(new Resource[removedTokensSet.size()]); + Map<Identifier, Integer> clientTokens = group.getClientTokens(); + Map<Identifier, Point> clientPositions = group.getClientPositions(); + for (ClientData data: group.getClientDataMap().values()) { + if (shouldSynchronize(data.getAssignedNumber())) { + transmit(new SynchronizeClientEvent(data, currentRoundDuration.getTimeLeft())); + } + else { + transmit(new ClientPositionUpdateEvent(data, addedResources, removedResources, clientTokens, clientPositions, currentRoundDuration.getTimeLeft())); + } } } - // send the current ServerGameState to the facilitator + // FIXME: refine this, send basic info to the facilitator (how many resources left, etc.) if (shouldUpdateFacilitator()) { transmit(new FacilitatorUpdateEvent(facilitatorId, serverDataModel, currentRoundDuration.getTimeLeft())); } @@ -866,8 +875,7 @@ } private boolean shouldUpdateFacilitator() { - long startCount = secondTick.getStartCount(); - return (startCount < 3); + return false; } private boolean shouldSynchronize(int assignedNumber) { diff -r 80094b4190373fe4b978f246cf97d86f106f26f1 -r a1fbd4dbf9289edc81730ecd5d859d58ec46fec2 src/main/java/edu/asu/commons/foraging/ui/Circle.java --- a/src/main/java/edu/asu/commons/foraging/ui/Circle.java +++ b/src/main/java/edu/asu/commons/foraging/ui/Circle.java @@ -4,20 +4,18 @@ import java.io.Serializable; /** - * $Id: Circle.java 416 2009-12-25 05:17:14Z alllee $ + * $Id$ * * Simple Circle class given a Point center and radius and providing methods to detect * if a point is within the circle. * * @author <a href='mailto:All...@as...'>Allen Lee</a> - * @version $Revision: 416 $ + * @version $Revision$ */ public class Circle implements Serializable { private static final long serialVersionUID = 6400834001276229287L; - private static final double FUDGE_FACTOR = 0.1d; - private Point center; private final double radius; @@ -30,12 +28,11 @@ if (point == null) { throw new IllegalArgumentException("Null point passed to Circle.contains()"); } - return center.distance(point) <= (radius + FUDGE_FACTOR); + return center.distance(point) <= radius; } public void setCenter(Point center) { this.center = center; } - } diff -r 80094b4190373fe4b978f246cf97d86f106f26f1 -r a1fbd4dbf9289edc81730ecd5d859d58ec46fec2 src/main/java/edu/asu/commons/foraging/ui/GameWindow2D.java --- a/src/main/java/edu/asu/commons/foraging/ui/GameWindow2D.java +++ b/src/main/java/edu/asu/commons/foraging/ui/GameWindow2D.java @@ -302,31 +302,32 @@ if (dataModel.getRoundConfiguration().shouldDisplayGroupTokens()) { StringBuilder builder = new StringBuilder("Tokens collected:"); // XXX: use this method so that we get the proper ordering of client ids/assigned numbers.. - Map<Identifier, ClientData> clientDataMap = dataModel.getClientDataMap(); +// Map<Identifier, ClientData> clientDataMap = dataModel.getClientDataMap(); Point clientPosition = dataModel.getCurrentPosition(); + // FIXME: refactor this ugliness. for (Identifier id : dataModel.getAllClientIdentifiers()) { - ClientData clientData = clientDataMap.get(id); +// ClientData clientData = clientDataMap.get(id); String formatString = ""; if (id.equals(dataModel.getId())) { formatString = " [%d (you) : %d] "; - builder.append(String.format(formatString, clientData.getAssignedNumber(), clientData.getCurrentTokens())); + builder.append(String.format(formatString, dataModel.getAssignedNumber(id), dataModel.getCurrentTokens(id))); } else { if (!dataModel.getRoundConfiguration().isFieldOfVisionEnabled()) { formatString = " [%d : %d] "; - builder.append(String.format(formatString, clientData.getAssignedNumber(), clientData.getCurrentTokens())); + builder.append(String.format(formatString, dataModel.getAssignedNumber(id), dataModel.getCurrentTokens(id))); } else { double radius = dataModel.getRoundConfiguration().getViewSubjectsRadius(); Circle fieldOfVision = new Circle(clientPosition, radius); - if (fieldOfVision.contains(clientData.getPosition())) { + if (fieldOfVision.contains(dataModel.getClientPosition(id))) { formatString = " [%d : %d] "; - builder.append(String.format(formatString, clientData.getAssignedNumber(), clientData.getCurrentTokens())); + builder.append(String.format(formatString, dataModel.getAssignedNumber(id), dataModel.getCurrentTokens(id))); } else { formatString = " [%d : XX] "; - builder.append(String.format(formatString, clientData.getAssignedNumber())); + builder.append(String.format(formatString, dataModel.getAssignedNumber(id))); } } } @@ -505,7 +506,7 @@ return; } // only allow sanctions for subjects within this subject's field of vision - Point subjectPosition = dataModel.getClientDataMap().get(sanctionee).getPoint(); + Point subjectPosition = dataModel.getClientPosition(sanctionee); if (dataModel.getClientData().isSubjectInFieldOfVision(subjectPosition)) { event = new RealTimeSanctionRequest(dataModel.getId(), sanctionee); System.out.println("sending sanctioning event : " + event); diff -r 80094b4190373fe4b978f246cf97d86f106f26f1 -r a1fbd4dbf9289edc81730ecd5d859d58ec46fec2 src/main/java/edu/asu/commons/foraging/ui/SubjectView.java --- a/src/main/java/edu/asu/commons/foraging/ui/SubjectView.java +++ b/src/main/java/edu/asu/commons/foraging/ui/SubjectView.java @@ -14,7 +14,6 @@ import edu.asu.commons.foraging.client.ClientDataModel; import edu.asu.commons.foraging.conf.RoundConfiguration; -import edu.asu.commons.foraging.model.ClientData; import edu.asu.commons.net.Identifier; import edu.asu.commons.util.Duration; @@ -148,7 +147,6 @@ } protected void paintSubjects(Graphics2D graphics2D) { - Map<Identifier, ClientData> positions = dataModel.getClientDataMap(); graphics2D.setFont(font); FontMetrics fontMetrics = graphics2D.getFontMetrics(font); int characterHeight = fontMetrics.getAscent(); @@ -176,9 +174,9 @@ graphics2D.fill(circle); graphics2D.setPaint(originalPaint); } - for (Map.Entry<Identifier, ClientData> entry : positions.entrySet()) { + for (Map.Entry<Identifier, Point> entry : dataModel.getClientPositions().entrySet()) { Identifier id = entry.getKey(); - Point subjectLocation = entry.getValue().getPosition(); + Point subjectLocation = entry.getValue(); // optimized conditional if (viewSubjectsField == null || id.equals(dataModel.getId()) || viewSubjectsField.contains(subjectLocation)) { // only draw if: @@ -221,9 +219,9 @@ graphics2D.fillRect(x, y, getCellWidth(), getCellHeight()); graphics2D.drawImage(scaledSanctioningImage, x, y, this); } - else if (id.equals(dataModel.getMonitorId())) { - graphics2D.drawImage(scaledMonitorImage, x, y, this); - } +// else if (id.equals(dataModel.getMonitorId())) { +// graphics2D.drawImage(scaledMonitorImage, x, y, this); +// } else if (id.equals(dataModel.getId())) { if (dataModel.isExplicitCollectionMode()) { graphics2D.drawImage(scaledSelfExplicitCollectionModeImage, x, y, this); diff -r 80094b4190373fe4b978f246cf97d86f106f26f1 -r a1fbd4dbf9289edc81730ecd5d859d58ec46fec2 src/main/java/edu/asu/commons/foraging/visualization/conceptual/AbstractView.java --- a/src/main/java/edu/asu/commons/foraging/visualization/conceptual/AbstractView.java +++ b/src/main/java/edu/asu/commons/foraging/visualization/conceptual/AbstractView.java @@ -35,7 +35,6 @@ import edu.asu.commons.foraging.graphics.TextureLoader; import edu.asu.commons.foraging.graphics.Triangulation; import edu.asu.commons.foraging.graphics.Vector3D; -import edu.asu.commons.foraging.model.ClientData; import edu.asu.commons.foraging.model.Resource; import edu.asu.commons.foraging.util.Tuple2i; import edu.asu.commons.foraging.util.Tuple3i; @@ -491,12 +490,12 @@ Agent agent; synchronized (getDataModel()) { - for (ClientData clientData : getDataModel().getClientDataMap().values()) { + for (Identifier id : getDataModel().getAllClientIdentifiers()) { //String textureFile = TEXTURES[clientData.getAssignedNumber() - 1]; - Color color = clientData.getSkinColor(); - agent = new Agent(clientData.getPoint3D(), 0, new RGBA(color), Agent.textureFile, clientData.getAssignedNumber(), this); + Color color = getDataModel().getClientData().getSkinColor(); + agent = new Agent(dataModel.getPoint3D(id), 0, new RGBA(color), Agent.textureFile, dataModel.getAssignedNumber(id), this); // this client is always the first agent in the list. - agents.put(clientData.getId(), agent); + agents.put(id, agent); } } @@ -931,14 +930,14 @@ } public void updateAgentPositions() { - for (ClientData clientData : getDataModel().getClientDataMap().values()) { - Identifier id = clientData.getId(); + for (Identifier id : getDataModel().getAllClientIdentifiers()) { if (id.equals(client.getId())) { continue; } Agent agent = agents.get(id); - agent.setPosition(clientData.getPoint3D()); - agent.setHeading(clientData.getHeading()); + agent.setPosition(dataModel.getPoint3D(id)); + // FIXME: unimplemented +// agent.setHeading(dataModel.getHeading(id)); } } @@ -954,8 +953,7 @@ Point labelPosition; //Other clients Identifier selfId = client.getId(); - for (ClientData clientData : getDataModel().getClientDataMap().values()) { - Identifier id = clientData.getId(); + for (Identifier id: getDataModel().getAllClientIdentifiers()) { if (id.equals(selfId)) { // skip ourselves continue; diff -r 80094b4190373fe4b978f246cf97d86f106f26f1 -r a1fbd4dbf9289edc81730ecd5d859d58ec46fec2 src/main/java/edu/asu/commons/foraging/visualization/forestry/shader/ForestryView.java --- a/src/main/java/edu/asu/commons/foraging/visualization/forestry/shader/ForestryView.java +++ b/src/main/java/edu/asu/commons/foraging/visualization/forestry/shader/ForestryView.java @@ -38,7 +38,6 @@ import edu.asu.commons.foraging.graphics.SkyBox; import edu.asu.commons.foraging.graphics.Triangle; import edu.asu.commons.foraging.graphics.Vector3D; -import edu.asu.commons.foraging.model.ClientData; import edu.asu.commons.foraging.model.Resource; import edu.asu.commons.foraging.util.Tuple2f; import edu.asu.commons.foraging.util.Tuple2i; @@ -313,16 +312,16 @@ //Create avatars Woodcutter avatar; synchronized (getDataModel()) { - for (ClientData clientData : getDataModel().getClientDataMap().values()) { - int avatarNo = clientData.getAssignedNumber(); -// avatar = loadAvatar(AVATARS[avatarNo - 1], clientData.getPosition(), avatarNo ); -// String avatarFile = clientData.isMale()? AVATAR_FILE_PATH + "maleWoodcutter.cfg": AVATAR_FILE_PATH + "femaleWoodcutter.cfg"; - String avatarFile = AVATAR_FILE; - avatar = loadAvatar(avatarFile, clientData.getHairColor(), clientData.getSkinColor(), - clientData.getShirtColor(), clientData.getTrouserColor(), clientData.getShoesColor(), - clientData.getPoint3D(), avatarNo); - avatars.put(clientData.getId(), avatar); - } +// for (ClientData clientData : getDataModel().getClientDataMap().values()) { +// int avatarNo = clientData.getAssignedNumber(); +//// avatar = loadAvatar(AVATARS[avatarNo - 1], clientData.getPosition(), avatarNo ); +//// String avatarFile = clientData.isMale()? AVATAR_FILE_PATH + "maleWoodcutter.cfg": AVATAR_FILE_PATH + "femaleWoodcutter.cfg"; +// String avatarFile = AVATAR_FILE; +// avatar = loadAvatar(avatarFile, clientData.getHairColor(), clientData.getSkinColor(), +// clientData.getShirtColor(), clientData.getTrouserColor(), clientData.getShoesColor(), +// clientData.getPoint3D(), avatarNo); +// avatars.put(clientData.getId(), avatar); +// } } avatar = avatars.get(client.getId()); setCamera(avatar); @@ -554,30 +553,30 @@ //Added this line as each tree was getting added twice as it is present in //the resourceDistribution as well as addedResources list // FIXME: figure out how this is being used. - getDataModel().clearDiffLists(); +// getDataModel().clearDiffLists(); repaint(); } @Override public void updateResources() { - for (Resource resource: getDataModel().getRemovedResources()) { - Tree tree = (Tree) treeGrid.getNode(resource.getPosition()); - if (! tree.harvested) { - treeGrid.remove(resource.getPosition()); - } - } - for (Resource resource: getDataModel().getAddedResources()) { - addTree(resource); - //System.out.println("A new tree added"); - } - for (Resource resource : getDataModel().getResourceDistribution().values()) { - Tree tree = (Tree) treeGrid.getNode(resource.getPosition()); - if (!tree.isHarvested() && tree.getAge() != resource.getAge()) { - tree.setAge(resource.getAge()); - } - } - getDataModel().clearDiffLists(); +// for (Resource resource: getDataModel().getRemovedResources()) { +// Tree tree = (Tree) treeGrid.getNode(resource.getPosition()); +// if (! tree.harvested) { +// treeGrid.remove(resource.getPosition()); +// } +// } +// for (Resource resource: getDataModel().getAddedResources()) { +// addTree(resource); +// //System.out.println("A new tree added"); +// } +// for (Resource resource : getDataModel().getResourceDistribution().values()) { +// Tree tree = (Tree) treeGrid.getNode(resource.getPosition()); +// if (!tree.isHarvested() && tree.getAge() != resource.getAge()) { +// tree.setAge(resource.getAge()); +// } +// } +// getDataModel().clearDiffLists(); } private void addTree(Resource resource) { @@ -670,17 +669,17 @@ } public void updateAgentPositions() { - for (ClientData clientData : getDataModel().getClientDataMap().values()) { - Identifier id = clientData.getId(); - if (id.equals(client.getId())) { - continue; - } - Woodcutter avatar = avatars.get(id); - avatar.setPosition(clientData.getPoint3D()); - avatar.setHeading(clientData.getHeading()); - if (clientData.isAnimationActive()) - avatar.animate( clientData.getAnimationState() ); - } +// for (ClientData clientData : getDataModel().getClientDataMap().values()) { +// Identifier id = clientData.getId(); +// if (id.equals(client.getId())) { +// continue; +// } +// Woodcutter avatar = avatars.get(id); +// avatar.setPosition(clientData.getPoint3D()); +// avatar.setHeading(clientData.getHeading()); +// if (clientData.isAnimationActive()) +// avatar.animate( clientData.getAnimationState() ); +// } } //################### Avatar picking related functions ##################### diff -r 80094b4190373fe4b978f246cf97d86f106f26f1 -r a1fbd4dbf9289edc81730ecd5d859d58ec46fec2 src/main/java/edu/asu/commons/foraging/visualization/forestry/shader/TestView.java --- a/src/main/java/edu/asu/commons/foraging/visualization/forestry/shader/TestView.java +++ b/src/main/java/edu/asu/commons/foraging/visualization/forestry/shader/TestView.java @@ -141,7 +141,7 @@ } //Added this line as each tree was getting added twice as it is present in //the resourceDistribution as well as addedResources list - getDataModel().clearDiffLists(); +// getDataModel().clearDiffLists(); } @Override @@ -230,7 +230,7 @@ if (treeCount == nTrees) break; } - getDataModel().clearDiffLists(); +// getDataModel().clearDiffLists(); } diff -r 80094b4190373fe4b978f246cf97d86f106f26f1 -r a1fbd4dbf9289edc81730ecd5d859d58ec46fec2 src/main/java/edu/asu/commons/foraging/visualization/forestry/va/ForestryView.java --- a/src/main/java/edu/asu/commons/foraging/visualization/forestry/va/ForestryView.java +++ b/src/main/java/edu/asu/commons/foraging/visualization/forestry/va/ForestryView.java @@ -430,13 +430,13 @@ //Create avatars Woodcutter avatar; synchronized (getDataModel()) { - for (ClientData clientData : getDataModel().getClientDataMap().values()) { - int avatarNo = clientData.getAssignedNumber(); - avatar = loadAvatar(AVATAR_FILE, clientData.getHairColor(), clientData.getSkinColor(), - clientData.getShirtColor(), clientData.getTrouserColor(), clientData.getShoesColor(), - clientData.getPoint3D(), avatarNo); - avatars.put(clientData.getId(), avatar); - } +// for (ClientData clientData : getDataModel().getClientDataMap().values()) { +// int avatarNo = clientData.getAssignedNumber(); +// avatar = loadAvatar(AVATAR_FILE, clientData.getHairColor(), clientData.getSkinColor(), +// clientData.getShirtColor(), clientData.getTrouserColor(), clientData.getShoesColor(), +// clientData.getPoint3D(), avatarNo); +// avatars.put(clientData.getId(), avatar); +// } } avatar = avatars.get(client.getId()); setCamera(avatar); @@ -711,17 +711,17 @@ * Updates avatar positions, headings and animation states according to the information sent by the server */ public void updateAgentPositions() { - for (ClientData clientData : getDataModel().getClientDataMap().values()) { - Identifier id = clientData.getId(); - if (id.equals(client.getId())) { - continue; - } - Woodcutter avatar = avatars.get(id); - avatar.setPosition(clientData.getPoint3D()); - avatar.setHeading(clientData.getHeading()); - if (clientData.isAnimationActive()) - avatar.animate( clientData.getAnimationState() ); - } +// for (ClientData clientData : getDataModel().getClientDataMap().values()) { +// Identifier id = clientData.getId(); +// if (id.equals(client.getId())) { +// continue; +// } +// Woodcutter avatar = avatars.get(id); +// avatar.setPosition(clientData.getPoint3D()); +// avatar.setHeading(clientData.getHeading()); +// if (clientData.isAnimationActive()) +// avatar.animate( clientData.getAnimationState() ); +// } } //################### Avatar picking related functions ##################### diff -r 80094b4190373fe4b978f246cf97d86f106f26f1 -r a1fbd4dbf9289edc81730ecd5d859d58ec46fec2 src/main/java/edu/asu/commons/foraging/visualization/forestry/va/TestView.java --- a/src/main/java/edu/asu/commons/foraging/visualization/forestry/va/TestView.java +++ b/src/main/java/edu/asu/commons/foraging/visualization/forestry/va/TestView.java @@ -20,7 +20,7 @@ /** * The TestView class is used to test the trees created in this package. * @author <a href='dee...@as...'>Deepali Bhagvat</a> - * @version $Revision: 4 $ + * @version $Revision$ * */ public class TestView extends GameView3d { @@ -69,7 +69,7 @@ } //Added this line as each tree was getting added twice as it is present in //the resourceDistribution as well as addedResources list - getDataModel().clearDiffLists(); +// getDataModel().clearDiffLists(); } /** @@ -135,7 +135,7 @@ if (treeCount == nTrees) break; } - getDataModel().clearDiffLists(); +// getDataModel().clearDiffLists(); } diff -r 80094b4190373fe4b978f246cf97d86f106f26f1 -r a1fbd4dbf9289edc81730ecd5d859d58ec46fec2 src/main/java/edu/asu/commons/foraging/visualization/forestry/vbo/ForestryView.java --- a/src/main/java/edu/asu/commons/foraging/visualization/forestry/vbo/ForestryView.java +++ b/src/main/java/edu/asu/commons/foraging/visualization/forestry/vbo/ForestryView.java @@ -311,16 +311,16 @@ //Create avatars Woodcutter avatar; synchronized (getDataModel()) { - for (ClientData clientData : getDataModel().getClientDataMap().values()) { - int avatarNo = clientData.getAssignedNumber(); -// avatar = loadAvatar(AVATARS[avatarNo - 1], clientData.getPosition(), avatarNo ); -// String avatarFile = clientData.isMale()? AVATAR_FILE_PATH + "maleWoodcutter.cfg": AVATAR_FILE_PATH + "femaleWoodcutter.cfg"; - String avatarFile = AVATAR_FILE; - avatar = loadAvatar(avatarFile, clientData.getHairColor(), clientData.getSkinColor(), - clientData.getShirtColor(), clientData.getTrouserColor(), clientData.getShoesColor(), - clientData.getPoint3D(), avatarNo); - avatars.put(clientData.getId(), avatar); - } +// for (ClientData clientData : getDataModel().getClientDataMap().values()) { +// int avatarNo = clientData.getAssignedNumber(); +//// avatar = loadAvatar(AVATARS[avatarNo - 1], clientData.getPosition(), avatarNo ); +//// String avatarFile = clientData.isMale()? AVATAR_FILE_PATH + "maleWoodcutter.cfg": AVATAR_FILE_PATH + "femaleWoodcutter.cfg"; +// String avatarFile = AVATAR_FILE; +// avatar = loadAvatar(avatarFile, clientData.getHairColor(), clientData.getSkinColor(), +// clientData.getShirtColor(), clientData.getTrouserColor(), clientData.getShoesColor(), +// clientData.getPoint3D(), avatarNo); +// avatars.put(clientData.getId(), avatar); +// } } avatar = avatars.get(client.getId()); setCamera(avatar); @@ -551,30 +551,30 @@ } //Added this line as each tree was getting added twice as it is present in //the resourceDistribution as well as addedResources list - getDataModel().clearDiffLists(); +// getDataModel().clearDiffLists(); repaint(); } @Override public void updateResources() { - for (Resource resource: getDataModel().getRemovedResources()) { - Tree tree = (Tree) treeGrid.getNode(resource.getPosition()); - if (! tree.harvested) { - treeGrid.remove(resource.getPosition()); - } - } - for (Resource resource... [truncated message content] |