[virtualcommons-svn] SF.net SVN: virtualcommons:[508] foraging/trunk
Status: Beta
Brought to you by:
alllee
From: <al...@us...> - 2010-04-19 08:02:12
|
Revision: 508 http://virtualcommons.svn.sourceforge.net/virtualcommons/?rev=508&view=rev Author: alllee Date: 2010-04-19 08:02:04 +0000 (Mon, 19 Apr 2010) Log Message: ----------- updated movie processor with IntervalChecker helper class. Should have a frame rate of 30 fps. Modified Paths: -------------- foraging/trunk/build.xml foraging/trunk/src/main/java/edu/asu/commons/foraging/facilitator/GroupView.java foraging/trunk/src/main/java/edu/asu/commons/foraging/model/ClientData.java foraging/trunk/src/main/java/edu/asu/commons/foraging/model/ServerDataModel.java foraging/trunk/src/main/java/edu/asu/commons/foraging/util/ForagingSaveFileConverter.java foraging/trunk/src/main/java/edu/asu/commons/foraging/util/MovieCreatorProcessor.java Added Paths: ----------- foraging/trunk/src/main/java/edu/asu/commons/foraging/util/IntervalChecker.java Modified: foraging/trunk/build.xml =================================================================== --- foraging/trunk/build.xml 2010-04-14 15:46:11 UTC (rev 507) +++ foraging/trunk/build.xml 2010-04-19 08:02:04 UTC (rev 508) @@ -51,7 +51,7 @@ <property file="build.properties" /> <!-- default compilation properties --> <property name='src.dir' value='src/main/java'/> - <property name='build.dir' value='target'/> + <property name='build.dir' value='target/classes'/> <!-- default web & deployment properties --> <property name='web.dir' value='src/main/webapp'/> Modified: foraging/trunk/src/main/java/edu/asu/commons/foraging/facilitator/GroupView.java =================================================================== --- foraging/trunk/src/main/java/edu/asu/commons/foraging/facilitator/GroupView.java 2010-04-14 15:46:11 UTC (rev 507) +++ foraging/trunk/src/main/java/edu/asu/commons/foraging/facilitator/GroupView.java 2010-04-19 08:02:04 UTC (rev 508) @@ -45,12 +45,7 @@ Point subjectLocation = clientData.getPosition(); int scaledX = scaleX(subjectLocation.x); int scaledY = scaleY(subjectLocation.y); - if (clientData.isExplicitCollectionMode()) { - graphics2D.drawImage(scaledSelfExplicitCollectionModeImage, scaledX, scaledY, this); - } - else { - graphics2D.drawImage(scaledSelfImage, scaledX, scaledY, this); - } + graphics2D.drawImage(scaledSelfImage, scaledX, scaledY, this); // paint subject number graphics2D.setColor(Color.WHITE); String subjectNumber = String.valueOf( clientData.getAssignedNumber() ); Modified: foraging/trunk/src/main/java/edu/asu/commons/foraging/model/ClientData.java =================================================================== --- foraging/trunk/src/main/java/edu/asu/commons/foraging/model/ClientData.java 2010-04-14 15:46:11 UTC (rev 507) +++ foraging/trunk/src/main/java/edu/asu/commons/foraging/model/ClientData.java 2010-04-19 08:02:04 UTC (rev 508) @@ -304,7 +304,9 @@ } public void resetLatestSanctions() { - latestSanctions.clear(); + if (latestSanctions != null) { + latestSanctions.clear(); + } } private void resetCurrentTokens() { Modified: foraging/trunk/src/main/java/edu/asu/commons/foraging/model/ServerDataModel.java =================================================================== --- foraging/trunk/src/main/java/edu/asu/commons/foraging/model/ServerDataModel.java 2010-04-14 15:46:11 UTC (rev 507) +++ foraging/trunk/src/main/java/edu/asu/commons/foraging/model/ServerDataModel.java 2010-04-19 08:02:04 UTC (rev 508) @@ -56,8 +56,11 @@ private transient Random random = new Random(); private transient FractalTerrain terrain; + + private transient boolean dirty = false; - // Maps client Identifiers to the GroupDataModel that the client belongs to + + // Maps client Identifiers to the GroupDataModel that the client belongs to private final Map<Identifier, GroupDataModel> clientsToGroups = new HashMap<Identifier, GroupDataModel>(); public ServerDataModel() { @@ -67,7 +70,16 @@ public ServerDataModel(EventChannel channel) { super(channel); } + + public boolean isDirty() { + return dirty; + } + + public void setDirty(boolean dirty) { + this.dirty = dirty; + } + /** * Invoked when we try to reconstruct a server game state given a time-ordered Set of * PersistableEvents that was previously saved. @@ -89,24 +101,30 @@ else if (event instanceof ResourcesAddedEvent) { ResourcesAddedEvent resourcesAddedEvent = (ResourcesAddedEvent) event; addResources(resourcesAddedEvent.getGroup(), resourcesAddedEvent.getResources()); + setDirty(true); } else if (event instanceof MovementEvent) { MovementEvent movementEvent = (MovementEvent) event; moveClient(movementEvent.getId(), movementEvent.getDirection()); + setDirty(true); } else if (event instanceof ResourceAddedEvent) { ResourceAddedEvent resourceAddedEvent = (ResourceAddedEvent) event; addResource(resourceAddedEvent.getGroup(), resourceAddedEvent.getResource()); + setDirty(true); } else if (event instanceof RealTimeSanctionRequest) { // currently unhandled. + setDirty(true); } else if (event instanceof ResetTokenDistributionRequest) { getGroup(event.getId()).resetResourceDistribution(); + setDirty(true); } else if (event instanceof TokenCollectedEvent) { TokenCollectedEvent tokenCollectedEvent = (TokenCollectedEvent) event; getGroup(event.getId()).removeResource(tokenCollectedEvent.getLocation()); + setDirty(true); } else if (event instanceof ExplicitCollectionModeRequest) { ExplicitCollectionModeRequest request = (ExplicitCollectionModeRequest) event; Modified: foraging/trunk/src/main/java/edu/asu/commons/foraging/util/ForagingSaveFileConverter.java =================================================================== --- foraging/trunk/src/main/java/edu/asu/commons/foraging/util/ForagingSaveFileConverter.java 2010-04-14 15:46:11 UTC (rev 507) +++ foraging/trunk/src/main/java/edu/asu/commons/foraging/util/ForagingSaveFileConverter.java 2010-04-19 08:02:04 UTC (rev 508) @@ -64,8 +64,8 @@ new AggregateTokenSpatialDistributionProcessor(), new CollectedTokenSpatialDistributionProcessor(), new MovementStatisticsProcessor(), - new AggregateCollectedTokenNeighborProcessor() -// new MovieCreatorProcessor() + new AggregateCollectedTokenNeighborProcessor(), + new MovieCreatorProcessor() )); Persister.processSaveFiles(allSaveFilesDirectory, processors); return true; Added: foraging/trunk/src/main/java/edu/asu/commons/foraging/util/IntervalChecker.java =================================================================== --- foraging/trunk/src/main/java/edu/asu/commons/foraging/util/IntervalChecker.java (rev 0) +++ foraging/trunk/src/main/java/edu/asu/commons/foraging/util/IntervalChecker.java 2010-04-19 08:02:04 UTC (rev 508) @@ -0,0 +1,49 @@ +package edu.asu.commons.foraging.util; + +import edu.asu.commons.experiment.SavedRoundData; + +public class IntervalChecker { + + @SuppressWarnings("unused") + private SavedRoundData savedRoundData; + + private long roundStartTime; + + private int currentInterval; + + private long unitsPerInterval; + + public int getCurrentInterval() { + return currentInterval; + } + + public void setCurrentInterval(int currentInterval) { + this.currentInterval = currentInterval; + } + + public long getUnitsPerInterval() { + return unitsPerInterval; + } + + public void setUnitsPerInterval(int unitsPerInterval) { + this.unitsPerInterval = unitsPerInterval; + } + + public IntervalChecker(SavedRoundData savedRoundData) { + this(savedRoundData.getRoundStartTime()); + this.savedRoundData = savedRoundData; + } + + public IntervalChecker(long roundStartTime) { + this.roundStartTime = roundStartTime; + } + + public boolean isIntervalElapsed(long currentTime) { + if (currentTime > (currentInterval * unitsPerInterval)) { + currentInterval++; + return true; + } + return false; + } + +} Modified: foraging/trunk/src/main/java/edu/asu/commons/foraging/util/MovieCreatorProcessor.java =================================================================== --- foraging/trunk/src/main/java/edu/asu/commons/foraging/util/MovieCreatorProcessor.java 2010-04-14 15:46:11 UTC (rev 507) +++ foraging/trunk/src/main/java/edu/asu/commons/foraging/util/MovieCreatorProcessor.java 2010-04-19 08:02:04 UTC (rev 508) @@ -75,7 +75,6 @@ jframe.setVisible(true); jframes.add(jframe); } - long secondHasPassedCheck = -1; // grab out all add client events to initialize the state of the game properly. for (PersistableEvent event: savedRoundData.getActions()) { if (event instanceof AddClientEvent) { @@ -83,43 +82,50 @@ serverDataModel.apply(event); } } + IntervalChecker intervalChecker = new IntervalChecker(savedRoundData); + intervalChecker.setUnitsPerInterval(33); + for (PersistableEvent event: savedRoundData.getActions()) { - final long elapsedTimeInSeconds = savedRoundData.getElapsedTimeInSeconds(event); - System.err.println("elapsed time in seconds: " + elapsedTimeInSeconds + ":" + event); - serverDataModel.apply(event); - if (elapsedTimeInSeconds > secondHasPassedCheck) { - secondHasPassedCheck = elapsedTimeInSeconds; - // take a snapshot of each group... - for (final GroupView groupView: groupViewList) { - try { - // groupView.repaint(); - final Dimension groupViewSize = groupView.getSize(); - SwingUtilities.invokeAndWait(new Runnable() { - public void run() { - Graphics2D graphics = (Graphics2D) groupView.getGraphics(); + final long elapsedTimeInMillis = savedRoundData.getElapsedTime(event); - BufferedImage bufferedImage = graphics.getDeviceConfiguration().createCompatibleImage(groupViewSize.width, groupViewSize.height); - Graphics2D bufferedImageGraphics = bufferedImage.createGraphics(); - groupView.paint(bufferedImageGraphics); - try { - // currently each frame is 1 second.. maybe we can divvy this up so it's .5 seconds instead. - groupViewMap.get(groupView).writeFrame(bufferedImage, 600); + serverDataModel.apply(event); + + if ( intervalChecker.isIntervalElapsed(elapsedTimeInMillis) ) { + final long elapsedTimeInSeconds = savedRoundData.getElapsedTimeInSeconds(event); +// System.err.println("elapsed time in seconds: " + elapsedTimeInSeconds + ":" + event); + serverDataModel.apply(event); + for (final GroupView groupView: groupViewList) { + try { +// groupView.repaint(); + final Dimension groupViewSize = groupView.getSize(); + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + Graphics2D graphics = (Graphics2D) groupView.getGraphics(); + BufferedImage bufferedImage = graphics.getDeviceConfiguration().createCompatibleImage(groupViewSize.width, groupViewSize.height); + Graphics2D bufferedImageGraphics = bufferedImage.createGraphics(); + groupView.paint(bufferedImageGraphics); + try { + // currently each frame is 1 second.. maybe we can divvy this up so it's .5 seconds instead. + groupViewMap.get(groupView).writeFrame(bufferedImage, 30); + } + catch (IOException exception) { + exception.printStackTrace(); + throw new RuntimeException(exception); + } } - catch (IOException exception) { - exception.printStackTrace(); - throw new RuntimeException(exception); - } - } - }); - } - catch (InterruptedException e) { - e.printStackTrace(); - } - catch (InvocationTargetException e) { - e.printStackTrace(); + }); + } + catch (InterruptedException e) { + e.printStackTrace(); + } + catch (InvocationTargetException e) { + e.printStackTrace(); + } } - } - } + serverDataModel.setDirty(false); + + } + } for (QuickTimeOutputStream out : groupViewMap.values()) { try { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |