public void EquipWeapon(GameObject WeaponObject) { GameObject = WeaponObject; Animator = GameObject.GetComponent <Animator>(); Inputs = GameObject.GetComponent <WeaponInputs>(); Common = new WeaponCommon(this); controller = new FSMController <WeaponController, eStates>(this); controller.RegisterState(eStates.Idle, new WeaponIdle()); controller.RegisterState(eStates.Shoot, new WeaponShoot()); controller.RegisterState(eStates.Reload, new WeaponReload()); controller.RegisterState(eStates.Recoil, new WeaponRecoil()); controller.AddMapping(eStates.Idle, eStates.Shoot, eStates.Reload); controller.AddMapping(eStates.Shoot, eStates.Recoil); controller.AddMapping(eStates.Reload, eStates.Idle, eStates.Shoot); controller.AddMapping(eStates.Recoil, eStates.Idle, eStates.Shoot, eStates.Reload); controller.SetLogToGUI(true, 2); controller.SetState(eStates.Idle); Common.Init(); // sanity checks QLogger.Assert(Inputs.magCapacity > 0); QLogger.Assert(Inputs.reloadTime > 0 && Inputs.recoilTime > 0 && Inputs.accuracy > 0); // if ( Inputs.shotType == eShotType.BURST ) // QLogger.Assert ( Inputs.burstBulletCount > 1 ); QLogger.Assert(Inputs.damage > 0 && Inputs.range > 0); QLogger.Assert(Inputs.muzzlePositionAndDirection != null); }
public override void Initialize(FSMController controller) { base.Initialize(controller); _unit = Controller.gameObject.GetComponent <Unit>(); _workPoint = _unit.ExtractPoint; }
private void Update() { if (newObjClicked) { newObjClicked = false; hpc = clickedObject.GetComponent <HPController>(); fsm = clickedObject.GetComponent <FSMController>(); } if (hpSlider == null || fsm == null) { return; } hpSlider.maxValue = hpc.MaxHp; hpSlider.value = hpc.HP; if (fsm.team == HelperFunctions.Team.Cube) { teamText.text = "Cube"; } else if (fsm.team == HelperFunctions.Team.Sphere) { teamText.text = "Sphere"; } else if (fsm.team == HelperFunctions.Team.Neutral) { teamText.text = "Neutral"; } UpdateStateText(); }
private void Awake() { _commandHandler = GetComponent <CommandHandler>(); _fsmController = GetComponent <FSMController>(); _gold = new GoldResource(); Animator = GetComponent <Animator>(); }
public void CheckTrans(FSMController controller) { for (int i = 0; i < trans.Length; i++) { if (trans[i].transCheck()) { if (trans[i].TrueState != null) { controller.SetNextState(trans[i].TrueState); break; } } else { if (trans[i].FalseState != null) { controller.SetNextState(trans[i].FalseState); break; } } } }
private void SpawnObject() { //TODO: Spawn logic if (settings.team == HelperFunctions.Team.Neutral) { return; } spawnTimer += Time.deltaTime; if (settings.team == HelperFunctions.Team.Cube && spawnTimer >= settings.spawnIntervalCube) { spawnTimer = 0; spawnPoint = HelperFunctions.GetPointInRange(transform.position, 1f, settings.spawnRadius); spawnedObject = SpawnController.SpawnObject(SpawnController.SpawnType.Cube, spawnPoint, Quaternion.identity); } else if (settings.team == HelperFunctions.Team.Sphere && spawnTimer >= settings.spawnIntervalSphere) { spawnTimer = 0; spawnPoint = HelperFunctions.GetPointInRange(transform.position, 1f, settings.spawnRadius); spawnedObject = SpawnController.SpawnObject(SpawnController.SpawnType.Sphere, spawnPoint, Quaternion.identity); } else { return; } fsm = spawnedObject.GetComponent <FSMController>(); if (settings.team == HelperFunctions.Team.Cube && curDefenders < settings.defenceCountCube) { fsm.SetDefenceTarget(gameObject); curDefenders++; } else if (settings.team == HelperFunctions.Team.Sphere && curDefenders < settings.defenceCountSphere) { fsm.SetDefenceTarget(gameObject); curDefenders++; } }
public void Init(GameObject characterObject, iPlayer player) { GameObject = characterObject; this.player = player; Animator = GameObject.GetComponent <Animator>(); Inputs = GameObject.GetComponent <CharacterInputs>(); Common = new CharacterCommon(this); controller = new FSMController <CharacterController, eStates>(this); controller.RegisterState(eStates.Idle, new CharacterIdle()); controller.RegisterState(eStates.Walk, new CharacterIdleWalk()); controller.RegisterState(eStates.Jump, new CharacterJump()); controller.RegisterState(eStates.Falling, new CharacterFalling()); controller.AddMapping(eStates.Idle, eStates.Jump, eStates.Walk, eStates.Falling); controller.AddMapping(eStates.Walk, eStates.Jump, eStates.Idle, eStates.Falling); controller.AddMapping(eStates.Jump, eStates.Idle, eStates.Walk, eStates.Falling); controller.AddMapping(eStates.Falling, eStates.Idle, eStates.Walk, eStates.Jump); controller.SetLogToGUI(true, 1); controller.SetState(eStates.Idle); }
private void StateAction() { switch (cState) { case StateMachine.CombatState.Defend: break; case StateMachine.CombatState.Attack: if (Vector3.Distance(transform.position, targetObject.transform.position) > attackRange) { if (!AvoidObstacle()) { RotateObject(targetObject.transform.position); } } else { if (targetObject == null) { cState = StateMachine.CombatState.Idle; mState = StateMachine.MovementState.Wander; break; } if (targetScript == null) { targetScript = targetObject.GetComponent <FSMController>(); if (targetScript == null) { targetObject = null; //Debug.LogError("No target script found!"); return; } } //Start attack animation if not running targetScript.DealDamage(dps * Time.deltaTime); } break; case StateMachine.CombatState.Death: Collider c = GetComponent <BoxCollider>(); if (c == null) { GetComponent <SphereCollider>().enabled = false; } else { c.enabled = false; } if (defenceTarget != null) { defenceTarget.GetComponent <StatueScript>().ReduceDefenderCount(); } isDead = true; SpawnController.DestroyObject(gameObject); break; case StateMachine.CombatState.Capture: //TODO: BUG: Still not working if (statueScript == null) { statueScript = targetObject.GetComponent <StatueScript>(); if (statueScript == null) { //Debug.LogError("No target script found!"); return; } } if (statueScript.Team == team) { targetObject = null; statueScript = null; cState = StateMachine.CombatState.Idle; mState = StateMachine.MovementState.Wander; break; } if (Vector3.Distance(transform.position, targetObject.transform.position) > 3f) { RotateObject(targetObject.transform.position); //Walk forward with fixed update } else { statueScript.DoCapture(team, (int)hpC.MaxHp); cState = StateMachine.CombatState.Death; } break; } switch (mState) { case StateMachine.MovementState.Wander: //TODO: Check obstacle avoidance, then rotate else wander rotate if (!AvoidObstacle()) { if (!wanderActive) { break; } rotateDir = Wander.Direction(rotSpeed, rotateDir, 10); } break; case StateMachine.MovementState.Seek: //TODO: Check obstacle avoidance, then rotate or move along path? //TODO: Check if enemy is close, then attack or flee if (!AvoidObstacle()) { if (defenceTarget != null) { RotateObject(defenceTarget.transform.position); break; } if (targetObject != null) { Vector3 disVector = targetObject.transform.position - transform.position; if (HelperFunctions.VectorLength(disVector) < seekRange) { if (cState != StateMachine.CombatState.Capture) { RotateObject(disVector); } } } } break; case StateMachine.MovementState.Flee: if (!AvoidObstacle()) { Vector3 disVector = (targetObject.transform.position - transform.position); if (HelperFunctions.VectorLength(disVector) <= fleeDistance) { RotateObject(transform.position - disVector); } } break; case StateMachine.MovementState.Interpose: if (targetObject == null) { mState = StateMachine.MovementState.Wander; break; } if (defenceTarget != null) { Vector3 intercept = ((defenceTarget.transform.position - targetObject.transform.position) / 2) + targetObject.transform.position; RotateObject(intercept); } break; } }
// Use this for initialization void Awake() { fsmController = GetComponent <FSMController>(); }
//Constructor public FSMState_Moving(FSMController FSMControllerRef) : base(FSMControllerRef, GameEnums.FSMInteractionEnum.Moving) { }
//Constructor public FSMState_Idle(FSMController FSMControllerRef) : base(FSMControllerRef, GameEnums.FSMInteractionEnum.Idle) { }
//Start private void Start() { _FSMController = new FSMController(this); }
public override void SetupAI(FSMController cont) { cont.Setup(ClientFSMFactory.GetInstance().GetState(E_ClientState.IDLE)); }
//Constructor public FSMState_ExitOfPortal(FSMController FSMControllerRef) : base(FSMControllerRef, GameEnums.FSMInteractionEnum.ExitOfPortal) { }
private void StateCheck() { switch (cState) { case StateMachine.CombatState.Idle: if (defenceTarget == null) { cState = StateMachine.CombatState.Lookout; } else { cState = StateMachine.CombatState.Defend; } break; case StateMachine.CombatState.Lookout: //TODO: Check if enemies is close FindClosestEnemy(); //If no objects close, mState wander and break if (targetObject == null) { mState = StateMachine.MovementState.Wander; break; } //Target object is now filtered to never be a friendly unit if (targetObject.CompareTag(cubeTag) || targetObject.CompareTag(sphereTag)) { cState = StateMachine.CombatState.Attack; } else if (targetObject.CompareTag(statueTag)) { mState = StateMachine.MovementState.Seek; cState = StateMachine.CombatState.Capture; } else if (targetObject.CompareTag(destroyerTag)) { cState = StateMachine.CombatState.Lookout; mState = StateMachine.MovementState.Flee; } break; case StateMachine.CombatState.Attack: //TODO: Check if enemy is dead, or im dead mState = StateMachine.MovementState.Seek; if (hpC.HP <= 0) { cState = StateMachine.CombatState.Death; targetObject = null; } else if (targetObject == null) //TODO: This might be a bug if the script is disabled { targetScript = null; FindClosestEnemy(); if (targetObject == null) { cState = StateMachine.CombatState.Idle; break; } } if (Vector3.Distance(transform.position, targetObject.transform.position) > (attackRange * 1.5f)) { targetObject = null; cState = StateMachine.CombatState.Idle; mState = StateMachine.MovementState.Wander; } break; case StateMachine.CombatState.Defend: //TODO: Check if enemy is close, then attack if (!defenceTarget.activeInHierarchy) { cState = StateMachine.CombatState.Lookout; mState = StateMachine.MovementState.Wander; break; } if (targetObjectDistance <= defendRange) { cState = StateMachine.CombatState.Attack; mState = StateMachine.MovementState.Seek; } else { //targetObject = defenceTarget; } break; case StateMachine.CombatState.Capture: if (targetObject == null) { cState = StateMachine.CombatState.Lookout; } break; } }
//Constructor public FSMState_PickupItem(FSMController FSMControllerRef) : base(FSMControllerRef, GameEnums.FSMInteractionEnum.PickupItem) { }
//Constructor public FSMState_ActivateItem(FSMController FSMControllerRef) : base(FSMControllerRef, GameEnums.FSMInteractionEnum.ActivateItem) { }
//Constructor public FSMState_UseLadder(FSMController FSMControllerRef) : base(FSMControllerRef, GameEnums.FSMInteractionEnum.UseLadder) { }
public override void SetupAI(FSMController cont) { cont.Setup(HunterFSMFactory.GetInstance().GetState(E_HunterState.IDLE)); }
//Constructor public FSMState(FSMController FSMControllerRef, GameEnums.FSMInteractionEnum interactionType) { this.FSMControllerRef = FSMControllerRef; this.interactionType = interactionType; }
private void StateAction() { switch (cState) { case StateMachine.CombatState.Defend: //TODO: - wander om ikke i range, seek om utenfor range, interpose om destroyer kommer, angripe om enemy kommer if (Vector3.Distance(transform.position, defenceTarget.transform.position) > defendRange) { if (RotateObject(defenceTarget.transform.position, 3)) { //speed = 0.1f; } mState = StateMachine.MovementState.Seek; } /* * if (targetObject.CompareTag()) //hvordan se at det er en kule når man er firkant? * { * cState = StateMachine.CombatState.Attack; * mState = StateMachine.MovementState.Seek; * }*/ if (targetObject.CompareTag(destroyerTag)) { mState = StateMachine.MovementState.Interpose; } else { mState = StateMachine.MovementState.Idle; } break; case StateMachine.CombatState.Attack: if (Vector3.Distance(transform.position, targetObject.transform.position) > attackRange) { if (!AvoidObstacle()) { RotateObject(targetObject.transform.position, 3); } } else { if (targetObject == null) { cState = StateMachine.CombatState.Idle; mState = StateMachine.MovementState.Wander; break; } if (targetScript == null) { targetScript = targetObject.GetComponent <FSMController>(); if (targetScript == null) { Debug.LogError("No target script found!"); return; } } //Start attack animation if not running targetScript.DealDamage(dps * Time.deltaTime); } break; case StateMachine.CombatState.Death: Collider c = GetComponent <BoxCollider>(); if (c == null) { GetComponent <SphereCollider>().enabled = false; } else { c.enabled = false; } if (defenceTarget != null) { defenceTarget.GetComponent <StatueScript>().ReduceDefenderCount(); } //Start death animaiton isDead = true; Destroy(gameObject); break; case StateMachine.CombatState.Capture: if (statueScript == null) { statueScript = targetObject.GetComponent <StatueScript>(); if (statueScript == null) { Debug.LogError("No target script found!"); return; } } if (statueScript.Team == team) { targetObject = null; statueScript = null; cState = StateMachine.CombatState.Idle; mState = StateMachine.MovementState.Wander; break; } if (Vector3.Distance(transform.position, targetObject.transform.position) > 3f) { RotateObject(targetObject.transform.position, 3); //Walk forward with fixed update } else { statueScript.DoCapture(team, (int)hpC.MaxHp); cState = StateMachine.CombatState.Death; } break; } switch (mState) { case StateMachine.MovementState.Wander: //TODO: Check obstacle avoidance, then rotate else wander rotate if (!AvoidObstacle()) { if (!wanderActive) { break; } rotateDir = Wander.Direction(rotSpeed, rotateDir, 10); } break; case StateMachine.MovementState.Seek: //TODO: Check obstacle avoidance, then rotate or move along path? //TODO: Check if enemy is close, then attack or flee if (!AvoidObstacle()) { if (defenceTarget != null) { RotateObject(defenceTarget.transform.position, 4); break; } Vector3 disVector = targetObject.transform.position - transform.position; if (HelperFunctions.VectorLength(disVector) < seekRange) { if (cState != StateMachine.CombatState.Capture) { RotateObject(disVector, 1.5f); } } } break; case StateMachine.MovementState.Flee: //TODO: Check distance to enemies close, move away or resume if (!AvoidObstacle()) { //From target to self, important to calculate target direction to flee to Vector3 disVector = (targetObject.transform.position - transform.position); if (HelperFunctions.VectorLength(disVector) <= fleeDistance) { RotateObject(transform.position - disVector, 4); } } break; case StateMachine.MovementState.Interpose: if (defenceTarget != null) { Vector3 intercept = ((defenceTarget.transform.position - targetObject.transform.position) / 2); RotateObject(intercept + defenceTarget.transform.position, 4); } break; } }
public virtual void SetupAI(FSMController cont) { }
protected FSMState(FSMController controller, string id) { this.controller = controller; Id = id; }
//Constructor public FSMState_Victory(FSMController FSMControllerRef) : base(FSMControllerRef, GameEnums.FSMInteractionEnum.Victory) { }