Android Open Source - Turn-of-War Information State






From Project

Back to project page Turn-of-War.

License

The source code is released under:

Apache License

If you think the Android project Turn-of-War 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

/*
 * This file is part of Turn of War which is a fork of Dragon Wars
 * as of 20/11/2013.//from w  w  w.  j  a  va  2  s.c  o  m
 *
 * Copyright (C) 2013 Ed Woodhouse <edwoodhou@gmail.com>
 *
 * Turn of War 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.
 *
 * Turn of War 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 Turn of War. If not, see <http://www.gnu.org/licenses/>.
 */
/* This file is part of Dragon Wars.
 *
 * Dragon Wars 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.
 *
 * Dragon Wars 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 Dragon Wars. If not, see <http://www.gnu.org/licenses/>.
 */

package uk.co.fuuzetsu.turnofwar.engine;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * Used by GameState to provide data to GameView in a transparent fashion. All
 * the logic of whether to recalculate something or not will be moved here.
 */
public final class InformationState {

  private final GameState containingState;
  private GameField currentlySelected;
  private GameField lastField;
  private Set<Position> lastAttackables;
  private Set<Position> lastAttackables2;
  private List<Position> lastDestinations;
  private Unit lastUnit;
  private List<Position> path;
  private Long startingTime;
  private Long timeElapsed = 0L;
  private Long framesSinceLastSecond = 0L;
  private Double fps = 0.0;
  private final Logic logic = new Logic();

  public InformationState(final GameState state) {
    containingState = state;
  }

  public List<Position> getPath() {
    if (path == null || lastDestinations == null
        || lastDestinations.size() == 0) {
      return new ArrayList<Position>(0);
    }

    return path;
  }

  public void setPath(final List<Position> path) {
    this.path = path;
  }

  public Set<Position> getAttackables() {
    if (lastAttackables == null) {
      return new HashSet<Position>(0);
    }

    return lastAttackables;
  }

  public Set<Position> getTargets() {
    if (lastAttackables2 == null) {
      return new HashSet<Position>(0);
    }

    return lastAttackables2;
  }

  public List<Position> getUnitDestinations() {
    return getUnitDestinations(currentlySelected);
  }

  public List<Position> getUnitDestinations(final GameField field) {
    List<Position> unitDests = new ArrayList<Position>(0);

    if (field == null) {
      return unitDests;
    }

    if (!field.hostsUnit()) {
      lastUnit = null;
      lastField = null;
      lastAttackables = null;
      lastAttackables2 = null;
      path = null;
      return unitDests;
    }
    Unit u = field.getUnit();
    if (field.hostsUnit()
        && (u.getOwner() != containingState.getCurrentPlayer())) {
      u.resetMovement(); // redraw move distance when its not ur turn}
      u.resetTurnStatistics2();
    }

    // cant show range of enemy stealth or subs
    if ((u.hasFinishedTurn() && (u.getOwner() == containingState
        .getCurrentPlayer()))
        || (u.getName().equals("Stealth") && (u.getOwner() != containingState
            .getCurrentPlayer()))
        || (u.getName().equals("MissileSub") && (u.getOwner() != containingState
            .getCurrentPlayer()))
        || (u.getName().equals("Submarine") && (u.getOwner() != containingState
            .getCurrentPlayer()))) {
      lastAttackables = null;
      lastAttackables2 = null;

      if((u.getOwner() == containingState
          .getCurrentPlayer())){
      lastAttackables2 = logic.getAttackableUnitPositions(0,
          containingState.getMap(), u);
      }
      if (u.hasMoved()) { // ranged units move path no longer show
        path = null;
      }
    } else {
      if ((lastDestinations == null || lastUnit == null
          || lastField == null || lastAttackables == null || lastAttackables2 == null)
          && !u.hasMoved()) {
        lastUnit = u;
        lastField = field;

        int myGo = 1;
        if (u.getOwner() != containingState.getCurrentPlayer()
            && u.isRanged) {
          // unitDests = logic.destinations(containingState.getMap(),
          // u);
          lastDestinations = null;
          lastAttackables = logic.getAttackableUnitPositions(myGo,
              containingState.getMap(), u);
          myGo = 0;
          lastAttackables2 = logic.getAttackableUnitPositions(myGo,
              containingState.getMap(), u);
        } else {
          unitDests = logic.destinations(containingState.getMap(), u);
          lastDestinations = unitDests;
          myGo = 1; // run this for the specific squares
          lastAttackables = logic.getAttackableUnitPositions(myGo,
              containingState.getMap(), u);
          myGo = 0; // display every square
          lastAttackables2 = logic.getAttackableUnitPositions(myGo,
              containingState.getMap(), u);
        }

        path = null;
        return unitDests;
      }
      if (u.equals(lastUnit) && field.equals(lastField)) {
        return lastDestinations;
      }
      if (field.hostsUnit()) { // /
        lastUnit = null;
        lastField = null;
        lastAttackables = null;
        lastAttackables2 = null;
        path = null;
      }
    }
    if (u.hasMoved() && u.getOwner() == containingState.getCurrentPlayer()
        && !u.hasFinishedTurn()) {
      path = null;
      int myGo = 1;
      lastAttackables = logic.getAttackableUnitPositions(myGo,
          containingState.getMap(), u);
      myGo = 0; // display every square
      lastAttackables2 = logic.getAttackableUnitPositions(myGo,
          containingState.getMap(), u);
    }
    // u.resetMovement();
    // u.reduceMovement(u.getRemainingMovement());

    return unitDests;
  }

  public void startFrame() {
    startingTime = System.currentTimeMillis();
  }

  public void endFrame() {
    framesSinceLastSecond++;

    timeElapsed += System.currentTimeMillis() - startingTime;

    if (timeElapsed >= 1000) {
      fps = framesSinceLastSecond / (timeElapsed * 0.001);
      framesSinceLastSecond = 0L;
      timeElapsed = 0L;
    }
  }

  public Double getFps() {
    return fps;
  }

}




Java Source Code List

uk.co.fuuzetsu.turnofwar.DrawingThread.java
uk.co.fuuzetsu.turnofwar.GameActivity.java
uk.co.fuuzetsu.turnofwar.GameView.java
uk.co.fuuzetsu.turnofwar.HelpActivity.java
uk.co.fuuzetsu.turnofwar.IsAiAdapter.java
uk.co.fuuzetsu.turnofwar.MainGyroSplash.java
uk.co.fuuzetsu.turnofwar.MainMenuActivity.java
uk.co.fuuzetsu.turnofwar.MapSelectActivity.java
uk.co.fuuzetsu.turnofwar.MenuActivity.java
uk.co.fuuzetsu.turnofwar.PlayerSelectActivity.java
uk.co.fuuzetsu.turnofwar.Results.java
uk.co.fuuzetsu.turnofwar.StatisticsActivity.java
uk.co.fuuzetsu.turnofwar.engine.BasicMapInfo.java
uk.co.fuuzetsu.turnofwar.engine.BitmapChanger.java
uk.co.fuuzetsu.turnofwar.engine.Building.java
uk.co.fuuzetsu.turnofwar.engine.ColourSwap.java
uk.co.fuuzetsu.turnofwar.engine.DrawableMapObject.java
uk.co.fuuzetsu.turnofwar.engine.FloatPair.java
uk.co.fuuzetsu.turnofwar.engine.FuncEx.java
uk.co.fuuzetsu.turnofwar.engine.Func.java
uk.co.fuuzetsu.turnofwar.engine.GameField.java
uk.co.fuuzetsu.turnofwar.engine.GameFinishedException.java
uk.co.fuuzetsu.turnofwar.engine.GameMap.java
uk.co.fuuzetsu.turnofwar.engine.GameState.java
uk.co.fuuzetsu.turnofwar.engine.InformationState.java
uk.co.fuuzetsu.turnofwar.engine.Logic.java
uk.co.fuuzetsu.turnofwar.engine.MapReader.java
uk.co.fuuzetsu.turnofwar.engine.Pair.java
uk.co.fuuzetsu.turnofwar.engine.PlayerAI.java
uk.co.fuuzetsu.turnofwar.engine.Player.java
uk.co.fuuzetsu.turnofwar.engine.Position.java
uk.co.fuuzetsu.turnofwar.engine.Statistics.java
uk.co.fuuzetsu.turnofwar.engine.Unit.java
uk.co.fuuzetsu.turnofwar.engine.Database.Database.java
uk.co.fuuzetsu.turnofwar.engine.GoalArbitration.AtomicAction.java
uk.co.fuuzetsu.turnofwar.engine.GoalArbitration.AttackAt.java
uk.co.fuuzetsu.turnofwar.engine.GoalArbitration.BuildUnit.java
uk.co.fuuzetsu.turnofwar.engine.GoalArbitration.MoveTo.java
uk.co.fuuzetsu.turnofwar.engine.GoalArbitration.Node.java
uk.co.fuuzetsu.turnofwar.engine.GoalArbitration.StateTree.java