Fix initialization ordering problems in MetaMediaManager ->

Sprite/AnimationManager -> AbstractMediaManager.

A smidgen more progress on MediaOverlay, but we need to get these bits checked
in ASAP.


git-svn-id: svn+ssh://src.earth.threerings.net/nenya/trunk@114 ed5b42cb-e716-0410-a449-f6a68f950b19
This commit is contained in:
Michael Bayne
2007-01-20 02:10:30 +00:00
parent 031b51419f
commit 088bc4b88b
8 changed files with 76 additions and 65 deletions
@@ -39,12 +39,12 @@ public abstract class AbstractMediaManager
implements MediaConstants implements MediaConstants
{ {
/** /**
* Default constructor. * Provides this media manager with its host and region manager.
*/ */
public AbstractMediaManager (MediaHost host) public void init (MediaHost host, RegionManager remgr)
{ {
_host = host; _host = host;
_remgr = host.getRegionManager(); _remgr = remgr;
} }
/** /**
@@ -210,6 +210,33 @@ public abstract class FrameManager
return _timer.getElapsedMillis(); return _timer.getElapsedMillis();
} }
/**
* Returns an overlay that can be used to render sprites and animations on top of the entire
* frame. This is lazily created the first time this method is called and the overlay will
* remain a frame participant until {@link #clearMediaOverlay} is called. Be sure to coordinate
* access to the overlay in your application as there is only one overlay in existence at any
* time, and attempts to use an overlay after it has been cleared will fail.
*/
public MediaOverlay getMediaOverlay ()
{
if (_overlay == null) {
_overlay = new MediaOverlay(this);
registerFrameParticipant(_overlay);
}
return _overlay;
}
/**
* Clears out any media overlay that is in use.
*/
public void clearMediaOverlay ()
{
if (_overlay != null) {
removeFrameParticipant(_overlay);
_overlay = null;
}
}
/** /**
* Starts up the per-frame tick * Starts up the per-frame tick
*/ */
@@ -651,6 +678,9 @@ public abstract class FrameManager
/** Our custom repaint manager. */ /** Our custom repaint manager. */
protected ActiveRepaintManager _remgr; protected ActiveRepaintManager _remgr;
/** If active, an overlay that will be rendering sprites and animations on top of the frame. */
protected MediaOverlay _overlay;
/** The number of milliseconds per frame (14 by default, which gives an fps of ~71). */ /** The number of milliseconds per frame (14 by default, which gives an fps of ~71). */
protected long _millisPerFrame = 14; protected long _millisPerFrame = 14;
@@ -35,9 +35,4 @@ public interface MediaHost
* disposed by the caller. * disposed by the caller.
*/ */
public Graphics2D createGraphics (); public Graphics2D createGraphics ();
/**
* Returns the region manager being used to manage dirty regions by the host.
*/
public RegionManager getRegionManager ();
} }
+35 -23
View File
@@ -21,8 +21,10 @@
package com.threerings.media; package com.threerings.media;
import java.awt.Component;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import com.threerings.media.FrameParticipant;
import com.threerings.media.animation.AnimationManager; import com.threerings.media.animation.AnimationManager;
import com.threerings.media.sprite.SpriteManager; import com.threerings.media.sprite.SpriteManager;
@@ -33,22 +35,14 @@ import com.threerings.media.sprite.SpriteManager;
* it has left dirty. * it has left dirty.
*/ */
public class MediaOverlay public class MediaOverlay
implements MediaHost implements MediaHost, FrameParticipant
{ {
protected MediaOverlay (FrameManager fmgr)
{
_framemgr = fmgr;
_remgr = new RegionManager();
_animmgr = new AnimationManager(this);
_spritemgr = new SpriteManager(this);
}
/** /**
* Returns a reference to the animation manager used by this media panel. * Returns a reference to the animation manager used by this media panel.
*/ */
public AnimationManager getAnimationManager () public AnimationManager getAnimationManager ()
{ {
return _animmgr; return _metamgr.getAnimationManager();
} }
/** /**
@@ -56,30 +50,48 @@ public class MediaOverlay
*/ */
public SpriteManager getSpriteManager () public SpriteManager getSpriteManager ()
{ {
return _spritemgr; return _metamgr.getSpriteManager();
} }
// from interface MediaHost // from interface MediaHost
public Graphics2D createGraphics () public Graphics2D createGraphics ()
{ {
return _framemgr.createGraphics(); return _metamgr.getFrameManager().createGraphics();
} }
// from interface MediaHost // from interface FrameParticipant
public RegionManager getRegionManager () public void tick (long tickStamp)
{ {
return _remgr; if (!_metamgr.isPaused()) {
// tick our meta manager which will tick our sprites and animations
_metamgr.tick(tickStamp);
}
}
// from interface FrameParticipant
public boolean needsPaint ()
{
return _metamgr.needsPaint();
}
// from interface FrameParticipant
public Component getComponent ()
{
return null; // TODO
}
/**
* Creates a media overlay. Only the {@link FrameManager} will construct an instance.
*/
protected MediaOverlay (FrameManager fmgr)
{
_framemgr = fmgr;
_metamgr = new MetaMediaManager(fmgr, this);
} }
/** The frame manager with whom we cooperate. */ /** The frame manager with whom we cooperate. */
protected FrameManager _framemgr; protected FrameManager _framemgr;
/** The animation manager in use by this overlay. */ /** Handles the heavy lifting involving media. */
protected AnimationManager _animmgr; protected MetaMediaManager _metamgr;
/** The sprite manager in use by this overlay. */
protected SpriteManager _spritemgr;
/** Used to accumulate and merge dirty regions on each tick. */
protected RegionManager _remgr;
} }
@@ -233,12 +233,6 @@ public class MediaPanel extends JComponent
_metamgr.clearAnimations(); _metamgr.clearAnimations();
} }
// from interface MediaHost
public RegionManager getRegionManager ()
{
return _metamgr.getRegionManager();
}
// from interface MediaHost // from interface MediaHost
public Graphics2D createGraphics () public Graphics2D createGraphics ()
{ {
@@ -53,12 +53,9 @@ public class MetaMediaManager
_framemgr = framemgr; _framemgr = framemgr;
_host = host; _host = host;
// create our region manager // initialize our managers
_remgr = new RegionManager(); _animmgr.init(host, _remgr);
_spritemgr.init(host, _remgr);
// create our animation and sprite managers
_animmgr = new AnimationManager(host);
_spritemgr = new SpriteManager(host);
} }
/** /**
@@ -339,14 +336,14 @@ public class MetaMediaManager
/** Our media host, so gracious and accomodating. */ /** Our media host, so gracious and accomodating. */
protected MediaHost _host; protected MediaHost _host;
/** Used to accumulate and merge dirty regions on each tick. */
protected RegionManager _remgr = new RegionManager();
/** The animation manager in use by this panel. */ /** The animation manager in use by this panel. */
protected AnimationManager _animmgr; protected AnimationManager _animmgr = new AnimationManager();
/** The sprite manager in use by this panel. */ /** The sprite manager in use by this panel. */
protected SpriteManager _spritemgr; protected SpriteManager _spritemgr = new SpriteManager();
/** Used to accumulate and merge dirty regions on each tick. */
protected RegionManager _remgr;
/** Whether we're currently paused. */ /** Whether we're currently paused. */
protected boolean _paused; protected boolean _paused;
@@ -31,15 +31,6 @@ import com.threerings.media.MediaHost;
*/ */
public class AnimationManager extends AbstractMediaManager public class AnimationManager extends AbstractMediaManager
{ {
/**
* Construct and initialize the animation manager which readies itself
* to manage animations.
*/
public AnimationManager (MediaHost host)
{
super(host);
}
/** /**
* Registers the given {@link Animation} with the animation manager * Registers the given {@link Animation} with the animation manager
* for ticking and painting. * for ticking and painting.
@@ -38,14 +38,6 @@ import com.threerings.media.MediaHost;
*/ */
public class SpriteManager extends AbstractMediaManager public class SpriteManager extends AbstractMediaManager
{ {
/**
* Construct and initialize the sprite manager.
*/
public SpriteManager (MediaHost host)
{
super(host);
}
/** /**
* When an animated view processes its dirty rectangles, it may * When an animated view processes its dirty rectangles, it may
* require an expansion of the dirty region which may in turn * require an expansion of the dirty region which may in turn