Well, my code uses handlers, which are specific to android, so at least I
thought I'd post my code,
so anyone with any comments on this android-specific code feel free to drop
me a line.

John Goche

class TimeStampedMessage {

  TimeStampedMessage(Handler handler, long when, int what) {

    this.handler = handler;

    this.when = when;

    this.what = what;

    this.timeStamp = System.nanoTime();

  }

  static void pauseTimers() {

    for (int k = 0; k < TimeStampedMessage.timeStampedMessages.size(); k++)
{

      TimeStampedMessage timeStampedMessage =
TimeStampedMessage.timeStampedMessages.get(k);

      long oldTimeStamp = timeStampedMessage.timeStamp;

      long newTimeStamp = System.nanoTime();

      System.out.println("When1: " + timeStampedMessage.when);

      System.out.println(oldTimeStamp);

      System.out.println(newTimeStamp);

      timeStampedMessage.when -= (newTimeStamp - oldTimeStamp) / 1000000L;

      System.out.println("When2: " + timeStampedMessage.when);

      timeStampedMessage.handler.removeMessages(timeStampedMessage.what);

    }

  }

  static void resumeTimers() {

    for (int k = 0; k < TimeStampedMessage.timeStampedMessages.size(); k++)
{

      Handler handler =
TimeStampedMessage.timeStampedMessages.get(k).handler;

      long when = TimeStampedMessage.timeStampedMessages.get(k).when;

      int what = TimeStampedMessage.timeStampedMessages.get(k).what;

      TimeStampedMessage.timeStampedMessages.get(k).timeStamp =
System.nanoTime();

      Message message = handler.obtainMessage(what);

      handler.sendMessageDelayed(message, when);

      System.out.println("resuming: when:" + when);

    }

  }

  static void unloadMessages(Handler handler, int what) {

    for (int k = 0; k < TimeStampedMessage.timeStampedMessages.size(); k++)

      if (TimeStampedMessage.timeStampedMessages.get(k).handler == handler
&&
          TimeStampedMessage.timeStampedMessages.get(k).what == what)

        TimeStampedMessage.timeStampedMessages.remove(k);

  }

  Handler handler;

  long timeStamp;

  long when;

  int what;

  static List<TimeStampedMessage> timeStampedMessages = new
ArrayList<TimeStampedMessage>();

}

abstract class WorldState {

  public abstract void enter(World world);

  public abstract void timerExpired(World world, Message msg);

  public abstract void update(World world, float deltaTime);

  public abstract void exit(World world);

  public void sendMessage(World world, long numMillis, int what) {

    Message message = world.worldHandler.obtainMessage(what);

    world.worldHandler.sendMessageDelayed(message, numMillis);

    TimeStampedMessage timeStampedMessage = new
TimeStampedMessage(world.worldHandler, numMillis, what);

    TimeStampedMessage.timeStampedMessages.add(timeStampedMessage);

  }

  public void removeMessages(World world, int what) {

    TimeStampedMessage.unloadMessages(world.worldHandler, what);


world.worldHandler.removeMessages(World.WorldHandler.MESSAGE_WHAT_PRESENTATION_GHOST_ESCAPE);

  }

}

Regards,

John Goche

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to