00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 package com.realtime.crossfire.jxclient.map;
00023
00024 import java.util.HashMap;
00025 import java.util.HashSet;
00026 import java.util.Map;
00027 import org.jetbrains.annotations.NotNull;
00028 import org.jetbrains.annotations.Nullable;
00029
00035 public class AnimationMap {
00036
00041 @NotNull
00042 private final Map<Location, AnimationState> animations = new HashMap<Location, AnimationState>();
00043
00047 public void clear() {
00048 animations.clear();
00049 }
00050
00058 public void add(@NotNull final MapUpdaterState mapUpdaterState, @NotNull final Location location, @NotNull final AnimationState animationState) {
00059 freeAnimationState(animations.put(location, animationState), location);
00060 animationState.allocate(mapUpdaterState, location);
00061 }
00062
00067 public void remove(@NotNull final Location location) {
00068 freeAnimationState(animations.remove(location), location);
00069 }
00070
00077 public void updateSpeed(@NotNull final MapUpdaterState mapUpdaterState, @NotNull final Location location, final int speed) {
00078 final AnimationState animationState = animations.get(location);
00079 if (animationState == null) {
00080 System.err.println("No animation at "+location+" to update animation speed.");
00081 return;
00082 }
00083
00084 animationState.setSpeed(mapUpdaterState, speed);
00085 }
00086
00094 public void scroll(final int dx, final int dy, final int width, final int height) {
00095 final Iterable<AnimationState> tmp = new HashSet<AnimationState>(animations.values());
00096 animations.clear();
00097 for (final AnimationState animationState : tmp) {
00098 animationState.scroll(dx, dy, width, height);
00099 for (final Location location : animationState) {
00100 animations.put(location, animationState);
00101 }
00102 }
00103 }
00104
00111 private static void freeAnimationState(@Nullable final AnimationState animationState, @NotNull final Location location) {
00112 if (animationState != null) {
00113 animationState.free(location);
00114 }
00115 }
00116
00117 }