Back to project page ssniper-andengine.
The source code is released under:
Apache License
If you think the Android project ssniper-andengine listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package com.cladophora.ssniper; /*w ww . java 2 s. c o m*/ import com.cladophora.ssniper.entity.*; import com.cladophora.ssniper.scene.GameScene; import org.andengine.engine.handler.timer.ITimerCallback; import org.andengine.engine.handler.timer.TimerHandler; import java.util.Timer; import java.util.TimerTask; /** * Created by jmar on 1/28/14. */ public class GameUtil { public static GameUtil instance; public static TimerHandler autoAimTimerHandler; public static Timer autoAimTimer; private GameUtil() { resetTimer(); } public static GameUtil getSharedInstance() { if (instance == null) { instance = new GameUtil(); } return instance; } public void autoAimAndFireUntilMagEmpty(final long delay) { resetTimer(); autoAimTimer.schedule(new AutoAimTask(),delay); } public static Enemy targetEnemy() { if (EnemyLayer.getIterator().hasNext()) { return EnemyLayer.getIterator().next(); } else { return null; } } private static TimerHandler getAutoAimTimerHandler() { // Executes the callback to target an enemy's head once every ~2 frames return new TimerHandler(0.03f, true, getEnemyAutoAimTimerCallback()); } private static ITimerCallback getEnemyAutoAimTimerCallback() { return new ITimerCallback() { Enemy enemy = targetEnemy(); @Override public void onTimePassed(final TimerHandler pTimerHandler) { if (enemy != null) { Reticle.center.setPosition(enemy.getHeadCenterX(), enemy.getHeadCenterY()); SPen.pointTo(Reticle.center.getX(), Reticle.center.getY()); } else { cancelAutoAim(); } } }; } class AutoAimTask extends TimerTask { public void run() { // This task locks on to an enemy then schedules the firing task a fraction later if (!GameScene.getSharedInstance().isIgnoreUpdate()) { GameUtil.autoAimTimerHandler = getAutoAimTimerHandler(); GameScene.getSharedInstance().registerUpdateHandler(autoAimTimerHandler); autoAimTimer.schedule(new AutoFireTask(), 300); GameScene.activateSlowTime(); } } } class AutoFireTask extends TimerTask { public void run() { // This task fires the weapon then turns off auto aim so that a new enemy can be locked on if (!GameScene.getSharedInstance().isIgnoreUpdate()) { GameEvents.fire(); GameScene.getSharedInstance().unregisterUpdateHandler(autoAimTimerHandler); if (!Rifle.magEmpty()) { autoAimTimer.schedule(new AutoAimTask(), 300); } else { cancelAutoAim(); } } } } public static void cancelAutoAim () { resetTimer(); GameScene.getSharedInstance().unregisterUpdateHandler(autoAimTimerHandler); GameScene.userControl = true; } private static void resetTimer() { if (autoAimTimer != null) { autoAimTimer.cancel(); autoAimTimer.purge(); } autoAimTimer = new Timer(); } }