ProjectCreep/Assets/TBTK/Scripts/AbilityManager.cs

114 lines
3.7 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace TBTK{
public class AbilityManager : MonoBehaviour {
public static AbilityManager instance;
public static void Init(){
if(instance==null) instance=(AbilityManager)FindObjectOfType(typeof(AbilityManager));
}
private bool waitingForTargetU=false;
private bool waitingForTargetF=false;
public static bool IsWaitingForTarget(){ return IsWaitingForTargetU() | IsWaitingForTargetF() ; }
public static bool IsWaitingForTargetU(){ return instance.waitingForTargetU ; }
public static bool IsWaitingForTargetF(){ return instance.waitingForTargetF ; }
public static void WaitingForTargetU(){ instance.waitingForTargetU=true; }
public static void WaitingForTargetF(){ instance.waitingForTargetF=true; }
public static void ClearWaitingForTarget(){ instance.waitingForTargetU=false; instance.waitingForTargetF=false; }
private int curAbilityAOE=0; //for GridIndicator
public static int GetCurAbilityAOE(){ return instance.curAbilityAOE; }
private Node curNode; //for GridIndicator
public static Node GetCurNode(){ return instance.curNode; }
private bool curAbilityIsCone; //for GridIndicator
public static bool IsCurAbilityCone(){ return instance.curAbilityIsCone; }
private int curAbilityFOV=0; //for GridIndicator
public static int GetCurAbilityFOV(){ return instance.curAbilityFOV; }
private int curAbilityRange=0; //for GridIndicator
public static int GetCurAbilityRange(){ return instance.curAbilityRange; }
private Unit currentUnit; private int unitAbilityIdx=-1;
//public static int GetSelectedIdx(){ return instance.unitAbilityIdx; }
private Faction currentFac; private int facAbilityIdx=-1;
public static int GetSelectedIdx(){
if(instance.currentUnit!=null) return instance.unitAbilityIdx;
if(instance.currentFac!=null) return instance.facAbilityIdx;
return -1;
}
public static void AbilityTargetModeUnit(Unit unit, Ability ability){ ExitAbilityTargetMode();
GridManager.SetupAbilityTargetList(unit, ability);
instance.currentUnit=unit;
instance.unitAbilityIdx=ability.index;
instance.curAbilityIsCone=false;
if(ability.TargetCone()){
instance.curAbilityIsCone=true;//ability.TargetCone();
instance.curAbilityFOV=ability.fov;
instance.curAbilityRange=ability.GetRange();
instance.curNode=unit.node;
}
else instance.curAbilityAOE=ability.GetAOE();
TBTK.OnAbilityTargeting(ability);
WaitingForTargetU();
}
public static void AbilityTargetModeFac(Faction fac, Ability ability){ ExitAbilityTargetMode();
GridManager.SetupAbilityTargetList(fac, ability);
instance.currentFac=fac;
instance.facAbilityIdx=ability.index;
instance.curAbilityAOE=ability.GetAOE();
instance.curAbilityIsCone=false;
TBTK.OnAbilityTargeting(ability);
WaitingForTargetF();
}
public static void ExitAbilityTargetMode(bool resetIndicator=true){
instance.currentUnit=null; instance.unitAbilityIdx=-1;
instance.currentFac=null; instance.facAbilityIdx=-1;
GridManager.ClearAbilityTargetList(resetIndicator);
ClearWaitingForTarget();
TBTK.OnAbilityTargeting(null);
}
public static bool AbilityTargetSelected(Node node){ return instance._AbilityTargetSelected(node); }
public bool _AbilityTargetSelected(Node node){
if(!curAbilityIsCone && !GridManager.InAbilityTargetList(node)) return false;
if(unitAbilityIdx>=0 && currentUnit!=null){
currentUnit.UseAbility(unitAbilityIdx, node);
}
if(facAbilityIdx>=0 && currentFac!=null){
currentFac.UseAbility(facAbilityIdx, node);
}
ExitAbilityTargetMode(false);
return true;
}
}
}