Android Open Source - Sertimus Logic Thread






From Project

Back to project page Sertimus.

License

The source code is released under:

GNU General Public License

If you think the Android project Sertimus listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*  Sertimus - A live wallpaper featuring a cute Chao.
  //from   w  w w . j a  va  2 s. co  m
    Copyright (C) 2013  Kevin Negrin

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>. */

//  LogicThread.java - Thread for managing LiveObjects and timing of the DrawThread thread.

package gameaddict30.wallpaper.sertimus;

import gameaddict30.wallpaper.sertimus.events.LiveObjectMotionEvent;
import gameaddict30.wallpaper.sertimus.utilities.Arithmetic;

import java.util.ArrayList;

import android.view.MotionEvent;

public class LogicThread extends Thread {
  private Object logicLock;
  private Object drawLock;
  
  private MainCanvas canv;
  private DrawThread drawT;
  
  public boolean paused = false;
  private boolean stillRunning = true;
  
  private ArrayList<LiveObjectMotionEvent> evtQ = new ArrayList<LiveObjectMotionEvent>();
  
  public LogicThread(MainCanvas canv, Object lock) {
    this.canv = canv;
    
    logicLock = lock;
    drawLock = new Object();
    
    drawT = new DrawThread(canv, drawLock);
    start();
  }

  public void run() {
    while (stillRunning) {
      synchronized (logicLock) {
        try {
          if (paused) {
            logicLock.wait();
            paused = false;
          }
          
          for (LiveObjectMotionEvent e : evtQ)
            onTouchEvent(e);
          evtQ.clear();
          
          canv.updateObjects();
          
          if (drawT == null)
            break;
          else {
            synchronized (drawLock) {
              if (!drawT.isActive())
                drawLock.notify();
            }
          }
          
          logicLock.wait(Arithmetic.frameRateToMillis(MainService.frameRate));
        } catch (InterruptedException e) {
          return;
        }
      }
    }
  }

  public boolean isPaused() {
    return paused;
  }

  public void onTouchEvent(LiveObjectMotionEvent e) {
    canv.onTouchEvent(e);
  }
  
  public void queueMotionEvent(MotionEvent e) {
    synchronized (logicLock) {
      if (!paused)
        evtQ.add(new LiveObjectMotionEvent(e));
    }
  }

  public void onSurfaceChanged(int width, int height) {
    canv.onSurfaceChanged(width, height);
    
  }
  
  public void finish() {
    stillRunning = false;
    drawT.finish();
    
    if (this.paused) {
      this.paused = false;
      synchronized (logicLock) {
        if (this.getState() == Thread.State.WAITING)
          logicLock.notify();
      }
    }
    
    try {
      drawT.join();
    } catch (InterruptedException e) {
      ;
    }
    
    drawT = null;
  }

  public void setPause(boolean paused) {
    if (this.stillRunning) {
      this.paused = paused;
      
      if (!this.paused && this.getState() == Thread.State.WAITING) {
        synchronized (logicLock) {
          logicLock.notify();
        }
      }
    }
  }
}




Java Source Code List

gameaddict30.wallpaper.sertimus.DrawThread.java
gameaddict30.wallpaper.sertimus.LogicThread.java
gameaddict30.wallpaper.sertimus.MainCanvas.java
gameaddict30.wallpaper.sertimus.MainService.java
gameaddict30.wallpaper.sertimus.activities.MyPreferencesActivity.java
gameaddict30.wallpaper.sertimus.activities.SetWallpaperActivity.java
gameaddict30.wallpaper.sertimus.constants.CharacterAnimation.java
gameaddict30.wallpaper.sertimus.events.LiveObjectMotionEvent.java
gameaddict30.wallpaper.sertimus.interfaces.InteractiveLiveObject.java
gameaddict30.wallpaper.sertimus.interfaces.TalkableLiveObject.java
gameaddict30.wallpaper.sertimus.objects.BackgroundTile.java
gameaddict30.wallpaper.sertimus.objects.GrassStrands.java
gameaddict30.wallpaper.sertimus.objects.LiveObject.java
gameaddict30.wallpaper.sertimus.objects.Sertimus.java
gameaddict30.wallpaper.sertimus.objects.TalkBubble.java
gameaddict30.wallpaper.sertimus.utilities.Arithmetic.java
gameaddict30.wallpaper.sertimus.utilities.Strings.java