@Override
	public void actionPerformed(ActionEvent e) {
		{
			ArrayList<CAnimation> next = new ArrayList<CAnimation>();
			Iterator<CAnimation> i = animations.iterator();
			CAnimation iter;
			while(i.hasNext()){
				CAnimation anim = i.next();
				anim.ticks++;
				gui.getMasterNode().findChild(anim.item).moveRelative(anim.dx, anim.dy);
				if(anim.ticks >= anim.target){
					if((iter = anim.next()) != null)
						next.add(iter);
					i.remove(); //foreach loop does not support removal during loop
				}
			}
			for(CAnimation anim : next){
				animations.add(anim);
			}
		}
		{
			ArrayList<CFade> next = new ArrayList<CFade>();
			Iterator<CFade> i = fadeanims.iterator();
			CFade iter;
			while(i.hasNext()){
				CFade anim = i.next();
				anim.ticks++;
				if(anim.ticks >= anim.target){
					ACItem target = gui.getMasterNode().findChild(anim.item);
					if(target == null){
						continue;
					}
					target.opacChange(anim.dx+anim.fx);
					if((iter = anim.next()) != null)
						next.add(iter);
					i.remove(); //foreach loop does not support removal during loop
				}else{
					gui.getMasterNode().findChild(anim.item).opacChange(anim.dx);
				}
			}
			for(CFade anim : next){
				fadeanims.add(anim);
			}
		}
		
		gui.repaint(); //draws on top of everything else
		gui.requestFocusInWindow();
	}