114 lines
3.7 KiB
C#
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;
|
|
}
|
|
}
|
|
|
|
} |