mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-22 12:03:58 +00:00
delayed tail display when CSS transition is used for boat animation during play state "PLAYING"
This commit is contained in:
1 parent
560a689637
commit
009c2a3a5c
3 files changed
+61
-40
No files matched your search
@@ -48,7 +48,7 @@
|
||||
<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="com.google.gwt.eclipse.core.moduleClasspathProvider"/>
|
||||
<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.DevMode"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-war "${project_loc:com.sap.sailing.gwt.ui}" -noserver -remoteUI "${gwt_remote_ui_server_port}:${unique_id}" -logLevel INFO -codeServerPort 9997 -startupUrl /gwt/AdminConsole.html com.sap.sailing.gwt.ui.AdminConsole -startupUrl /gwt/LeaderboardEditing.html com.sap.sailing.gwt.ui.LeaderboardEditing -startupUrl /gwt/UserManagement.html com.sap.sailing.gwt.ui.UserManagement -startupUrl /gwt/Leaderboard.html com.sap.sailing.gwt.ui.Leaderboard -startupUrl /gwt/Spectator.html com.sap.sailing.gwt.ui.Spectator -startupUrl /gwt/RaceBoard.html com.sap.sailing.gwt.ui.RaceBoard -startupUrl /gwt/TvView.html com.sap.sailing.gwt.ui.TvView -startupUrl /gwt/PolarSheets.html com.sap.sailing.gwt.ui.PolarSheets -startupUrl /gwt/RegattaOverview.html com.sap.sailing.gwt.ui.RegattaOverview -startupUrl /gwt/Simulator.html com.sap.sailing.gwt.ui.Simulator -startupUrl /gwt/YoutubePopup.html com.sap.sailing.gwt.ui.YoutubePopup"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-war "${project_loc:com.sap.sailing.gwt.ui}" -noserver -remoteUI "${gwt_remote_ui_server_port}:${unique_id}" -logLevel INFO -codeServerPort 9997 -startupUrl /gwt/AdminConsole.html com.sap.sailing.gwt.ui.AdminConsole -startupUrl /gwt/LeaderboardEditing.html com.sap.sailing.gwt.ui.LeaderboardEditing -startupUrl /gwt/UserManagement.html com.sap.sailing.gwt.ui.UserManagement -startupUrl /gwt/Leaderboard.html com.sap.sailing.gwt.ui.Leaderboard -startupUrl /gwt/Spectator.html com.sap.sailing.gwt.ui.Spectator -startupUrl /gwt/RaceBoard.html com.sap.sailing.gwt.ui.RaceBoard -startupUrl /gwt/TvView.html com.sap.sailing.gwt.ui.TvView -startupUrl /gwt/PolarSheets.html com.sap.sailing.gwt.ui.PolarSheets -startupUrl /gwt/RegattaOverview.html com.sap.sailing.gwt.ui.RegattaOverview -startupUrl /gwt/Simulator.html com.sap.sailing.gwt.ui.Simulator -startupUrl /gwt/YoutubePopup.html com.sap.sailing.gwt.ui.YoutubePopup com.sap.sailing.gwt.ui.PolarSheets"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.sap.sailing.gwt.ui"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx2048m -XX:MaxPermSize=512m"/>
|
||||
</launchConfiguration>
|
||||
+55
-36
@@ -12,6 +12,7 @@ import java.util.Set;
|
||||
|
||||
import com.google.gwt.maps.client.base.LatLng;
|
||||
import com.google.gwt.maps.client.overlays.Polyline;
|
||||
import com.google.gwt.user.client.Timer;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.sap.sailing.domain.common.dto.CompetitorDTO;
|
||||
import com.sap.sailing.domain.common.impl.Util.Triple;
|
||||
@@ -318,44 +319,62 @@ public class FixesAndTails {
|
||||
* <p>
|
||||
*
|
||||
* When this method returns, {@link #firstShownFix} and {@link #lastShownFix} have been updated accordingly.
|
||||
*
|
||||
* @param delayForTailChangeInMillis
|
||||
* the time in milliseconds after which to actually draw the tail update, or <code>-1</code> to perform
|
||||
* the update immediately
|
||||
*/
|
||||
protected void updateTail(Polyline tail, CompetitorDTO competitorDTO, Date from, Date to) {
|
||||
int vertexCount = tail.getPath().getLength();
|
||||
final List<GPSFixDTO> fixesForCompetitor = getFixes(competitorDTO);
|
||||
int indexOfFirstShownFix = firstShownFix.get(competitorDTO) == null ? -1 : firstShownFix.get(competitorDTO);
|
||||
while (indexOfFirstShownFix != -1 && vertexCount > 0
|
||||
&& fixesForCompetitor.get(indexOfFirstShownFix).timepoint.before(from)) {
|
||||
tail.getPath().removeAt(0);
|
||||
vertexCount--;
|
||||
indexOfFirstShownFix++;
|
||||
protected void updateTail(final Polyline tail, final CompetitorDTO competitorDTO,
|
||||
final Date from, final Date to, final int delayForTailChangeInMillis) {
|
||||
Timer delayedOrImmediateExecutor = new Timer() {
|
||||
@Override
|
||||
public void run() {
|
||||
int vertexCount = tail.getPath().getLength();
|
||||
final List<GPSFixDTO> fixesForCompetitor = getFixes(competitorDTO);
|
||||
int indexOfFirstShownFix = firstShownFix.get(competitorDTO) == null ? -1 : firstShownFix
|
||||
.get(competitorDTO);
|
||||
while (indexOfFirstShownFix != -1 && vertexCount > 0
|
||||
&& fixesForCompetitor.get(indexOfFirstShownFix).timepoint.before(from)) {
|
||||
tail.getPath().removeAt(0);
|
||||
vertexCount--;
|
||||
indexOfFirstShownFix++;
|
||||
}
|
||||
// now the polyline contains no more vertices representing fixes before "from";
|
||||
// go back in time starting at indexOfFirstShownFix while the fixes are still at or after "from"
|
||||
// and insert corresponding vertices into the polyline
|
||||
while (indexOfFirstShownFix > 0
|
||||
&& !fixesForCompetitor.get(indexOfFirstShownFix - 1).timepoint.before(from)) {
|
||||
indexOfFirstShownFix--;
|
||||
GPSFixDTO fix = fixesForCompetitor.get(indexOfFirstShownFix);
|
||||
tail.getPath().insertAt(0, LatLng.newInstance(fix.position.latDeg, fix.position.lngDeg));
|
||||
vertexCount++;
|
||||
}
|
||||
// now adjust the polylines tail: remove excess vertices that are after "to"
|
||||
int indexOfLastShownFix = lastShownFix.get(competitorDTO) == null ? -1 : lastShownFix
|
||||
.get(competitorDTO);
|
||||
while (indexOfLastShownFix != -1 && vertexCount > 0
|
||||
&& fixesForCompetitor.get(indexOfLastShownFix).timepoint.after(to)) {
|
||||
tail.getPath().removeAt(--vertexCount);
|
||||
indexOfLastShownFix--;
|
||||
}
|
||||
// now the polyline contains no more vertices representing fixes after "to";
|
||||
// go forward in time starting at indexOfLastShownFix while the fixes are still at or before "to"
|
||||
// and insert corresponding vertices into the polyline
|
||||
while (indexOfLastShownFix < fixesForCompetitor.size() - 1
|
||||
&& !fixesForCompetitor.get(indexOfLastShownFix + 1).timepoint.after(to)) {
|
||||
indexOfLastShownFix++;
|
||||
GPSFixDTO fix = fixesForCompetitor.get(indexOfLastShownFix);
|
||||
tail.getPath().insertAt(vertexCount++, LatLng.newInstance(fix.position.latDeg, fix.position.lngDeg));
|
||||
}
|
||||
firstShownFix.put(competitorDTO, indexOfFirstShownFix);
|
||||
lastShownFix.put(competitorDTO, indexOfLastShownFix);
|
||||
}
|
||||
};
|
||||
if (delayForTailChangeInMillis == -1) {
|
||||
delayedOrImmediateExecutor.run();
|
||||
} else {
|
||||
delayedOrImmediateExecutor.schedule(delayForTailChangeInMillis);
|
||||
}
|
||||
// now the polyline contains no more vertices representing fixes before "from";
|
||||
// go back in time starting at indexOfFirstShownFix while the fixes are still at or after "from"
|
||||
// and insert corresponding vertices into the polyline
|
||||
while (indexOfFirstShownFix > 0 && !fixesForCompetitor.get(indexOfFirstShownFix - 1).timepoint.before(from)) {
|
||||
indexOfFirstShownFix--;
|
||||
GPSFixDTO fix = fixesForCompetitor.get(indexOfFirstShownFix);
|
||||
tail.getPath().insertAt(0, LatLng.newInstance(fix.position.latDeg, fix.position.lngDeg));
|
||||
vertexCount++;
|
||||
}
|
||||
// now adjust the polylines tail: remove excess vertices that are after "to"
|
||||
int indexOfLastShownFix = lastShownFix.get(competitorDTO) == null ? -1 : lastShownFix.get(competitorDTO);
|
||||
while (indexOfLastShownFix != -1 && vertexCount > 0
|
||||
&& fixesForCompetitor.get(indexOfLastShownFix).timepoint.after(to)) {
|
||||
tail.getPath().removeAt(--vertexCount);
|
||||
indexOfLastShownFix--;
|
||||
}
|
||||
// now the polyline contains no more vertices representing fixes after "to";
|
||||
// go forward in time starting at indexOfLastShownFix while the fixes are still at or before "to"
|
||||
// and insert corresponding vertices into the polyline
|
||||
while (indexOfLastShownFix < fixesForCompetitor.size() - 1
|
||||
&& !fixesForCompetitor.get(indexOfLastShownFix + 1).timepoint.after(to)) {
|
||||
indexOfLastShownFix++;
|
||||
GPSFixDTO fix = fixesForCompetitor.get(indexOfLastShownFix);
|
||||
tail.getPath().insertAt(vertexCount++, LatLng.newInstance(fix.position.latDeg, fix.position.lngDeg));
|
||||
}
|
||||
firstShownFix.put(competitorDTO, indexOfFirstShownFix);
|
||||
lastShownFix.put(competitorDTO, indexOfLastShownFix);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+5
-3
@@ -672,17 +672,19 @@ public class RaceMap extends AbsolutePanel implements TimeListener, CompetitorSe
|
||||
Set<CompetitorDTO> competitorDTOsOfUnusedBoatCanvases = new HashSet<CompetitorDTO>(boatOverlays.keySet());
|
||||
for (CompetitorDTO competitorDTO : competitorsToShow) {
|
||||
if (fixesAndTails.hasFixesFor(competitorDTO)) {
|
||||
final long timeForPositionTransitionMillis = timer.getPlayState() == PlayStates.Playing ? // animate when playing
|
||||
1300*timer.getRefreshInterval()/1000 : -1;
|
||||
Polyline tail = fixesAndTails.getTail(competitorDTO);
|
||||
if (tail == null) {
|
||||
tail = fixesAndTails.createTailAndUpdateIndices(competitorDTO, tailsFromTime, tailsToTime, this);
|
||||
tail.setMap(map);
|
||||
} else {
|
||||
fixesAndTails.updateTail(tail, competitorDTO, tailsFromTime, tailsToTime);
|
||||
fixesAndTails.updateTail(tail, competitorDTO, tailsFromTime, tailsToTime,
|
||||
(int) (timeForPositionTransitionMillis==-1?-1:timeForPositionTransitionMillis/2));
|
||||
competitorDTOsOfUnusedTails.remove(competitorDTO);
|
||||
}
|
||||
boolean usedExistingBoatCanvas = updateBoatCanvasForCompetitor(competitorDTO, date,
|
||||
timer.getPlayState() == PlayStates.Playing ? // animate when playing
|
||||
1300*timer.getRefreshInterval()/1000 : -1);
|
||||
timeForPositionTransitionMillis);
|
||||
if (usedExistingBoatCanvas) {
|
||||
competitorDTOsOfUnusedBoatCanvases.remove(competitorDTO);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user