Package com.fray.evo.action.build

Source Code of com.fray.evo.action.build.EcActionBuildUnit

package com.fray.evo.action.build;

import java.io.Serializable;
import java.util.ArrayList;

import com.fray.evo.EcBuildOrder;
import com.fray.evo.util.Buildable;
import com.fray.evo.util.Building;
import com.fray.evo.util.GameLog;
import com.fray.evo.util.RunnableAction;
import com.fray.evo.util.Unit;
import com.fray.evo.util.ZergUnitLibrary;
import com.fray.evo.util.Upgrade;

public abstract class EcActionBuildUnit extends EcActionBuild implements Serializable
{
  private static final long serialVersionUID = 6519230186320700621L;
  public double supply;
  public boolean consumeLarva;
 
  public EcActionBuildUnit(Unit unit)
  {
    super(unit);
    this.supply = unit.getSupply();
    this.consumeLarva = (ZergUnitLibrary.Larva == unit.getConsumes());
  }

  @Override
  public void execute(final EcBuildOrder s, final GameLog e)
  {
    s.minerals -= getMinerals();
    s.gas -= getGas();
    s.supplyUsed += supply-consumesUnitSupply();
    if (consumeLarva)
      s.consumeLarva(e);
    preExecute(s);
    s.addFutureAction(getTime(), new RunnableAction()
    {
      @Override
      public void run(GameLog e)
      {
        obtainOne(s, e);
        postExecute(s,e);
      }
    });
  }

  private double consumesUnitSupply()
  {
            if(getConsumes() != null){
                Unit consumes = (Unit) getConsumes();
                if(consumes == ZergUnitLibrary.Zergling){
                    return 0.5;
                }
                return consumes.getSupply();
            }
            return 0;
  }
  @Override
  protected final boolean isPossibleResources(EcBuildOrder s)
  {
            if(supply > 0){
    if (!s.hasSupply(supply-consumesUnitSupply()))
      return false;
            }
    if (consumeLarva)
      if (s.getLarva() < 1)
        return false;

    //inlined super.isPossibleResources(s);
        if (s.minerals < getMinerals()) {
            return false;
        }
        if (s.gas < getGas()) {
            return false;
        }
        return true;
  }

    @Override
    public boolean isPossible(EcBuildOrder s) {
        Buildable consumes = getConsumes();
        if (consumes != ZergUnitLibrary.Larva) {
            if (consumes instanceof Unit && s.getUnitCount((Unit) consumes) < 1) {
                return false;
            }
        }
        return isPossibleResources(s);
    }

    protected void postExecute(EcBuildOrder s, GameLog e) {
        Building builtFrom = ((Unit) buildable).getBuiltFrom();
        if (builtFrom != null) {
            s.makeBuildingNotBusy(this);
        }
        s.addUnits((Unit) buildable, 1);
    }

    protected void preExecute(EcBuildOrder s) {
        Building builtFrom = ((Unit) buildable).getBuiltFrom();
        if (builtFrom != null) {
            s.makeBuildingBusy(builtFrom, this);
        }
        Buildable consumes = getConsumes();
        if (consumes != null && getConsumes() != ZergUnitLibrary.Larva) {
            s.removeUnits((Unit) getConsumes(), 1);
        }
    }

    @Override
    public boolean isInvalid(EcBuildOrder s) {
        if (!s.hasSupply(((Unit) buildable).getSupply())) {
            return true;
        }

        ArrayList<Buildable> reqs = ((Unit) buildable).getRequirement();
        for (int i = 0; i < reqs.size(); i++) {
            Buildable req = reqs.get(i);
            if (req instanceof  Building) {
                if (!s.isBuilding((Building)req)) {
                    return true;
                }
            }
            if (req instanceof  Unit) {
                if (s.getUnitCount((Unit) req) < 1) {
                    return true;
                }
            }
            if (req instanceof Upgrade) {
                if (!s.isUpgrade((Upgrade) req)) {
                    return true;
                }
            }
        }
        Building builtFrom = ((Unit) buildable).getBuiltFrom();
        if (builtFrom != null && !s.doesNonBusyExist(((Unit)buildable).getBuiltFrom())) {
            return true;
        }
        return false;
    }
}
TOP

Related Classes of com.fray.evo.action.build.EcActionBuildUnit

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.