public override StateBase Clone(AIControllerBase aiController) { var instance = CreateInstance <Chase>(); instance.speed = this.speed; return(instance); }
public override void OnEnter(AIControllerBase aiController) { var navMeshAgent = aiController.Owner.GetComponent <NavMeshAgent>(); Assert.IsNotNull(navMeshAgent, string.Format("{0}に{1}がアタッチされていませんでした", aiController.Owner, typeof(NavMeshAgent))); var navMeshObstacle = aiController.Owner.GetComponent <NavMeshObstacle>(); Assert.IsNotNull(navMeshObstacle, string.Format("{0}に{1}がアタッチされていませんでした", aiController.Owner, typeof(NavMeshObstacle))); Assert.IsNotNull(aiController.Target, string.Format("{0}のAIにTargetが設定されていません", aiController.Owner)); navMeshObstacle.enabled = false; navMeshAgent.enabled = true; navMeshAgent.speed = this.speed; aiController.UpdateAsObservable() .Where(_ => aiController.isActiveAndEnabled) .Where(_ => navMeshAgent.enabled) .SubscribeWithState2(navMeshAgent, aiController, (_, n, a) => { n.destination = a.Target.CachedTransform.position; }) .AddTo(this.runningEvents) .AddTo(aiController); }
public override StateBase Clone(AIControllerBase aiController) { var clone = CreateInstance <RandomMove>(); clone.waitMin = this.waitMin; clone.waitMax = this.waitMax; clone.range = this.range; clone.speed = this.speed; clone.destinationCheckDistance = this.destinationCheckDistance; return(clone); }
public SpawnRegulation Clone(AIControllerBase aiController) { var instance = new SpawnRegulation { Spawner = Instantiate(this.Spawner, aiController.Owner.CachedTransform), RandomRange = this.RandomRange }; instance.Spawner.transform.localPosition = Vector3.zero; return(instance); }
public override bool Evalution(AIControllerBase aiController) { Assert.IsNotNull(aiController.Target, string.Format("{0}のAIにTargetが設定されていません", aiController.Owner)); var sqrMagnitude = (aiController.Owner.CachedTransform.position - aiController.Target.CachedTransform.position) .sqrMagnitude; var d = this.distance * this.distance; return(this.evaluteType == EvaluteType.Greater ? sqrMagnitude > d : sqrMagnitude < d); }
public override StateBase Clone(AIControllerBase aiController) { var instance = CreateInstance <Spawn>(); instance.interval = this.interval; instance.regulations = new SpawnRegulation[this.regulations.Length]; for (var i = 0; i < this.regulations.Length; i++) { instance.regulations[i] = this.regulations[i].Clone(aiController); } return(instance); }
public override void OnEnter(AIControllerBase aiController) { var navMeshAgent = aiController.Owner.GetComponent <NavMeshAgent>(); Assert.IsNotNull(navMeshAgent, string.Format("{0}に{1}がアタッチされていませんでした", aiController.Owner, typeof(NavMeshAgent))); var navMeshObstacle = aiController.Owner.GetComponent <NavMeshObstacle>(); Assert.IsNotNull(navMeshObstacle, string.Format("{0}に{1}がアタッチされていませんでした", aiController.Owner, typeof(NavMeshObstacle))); navMeshAgent.speed = this.speed; this.DoMove(navMeshAgent, navMeshObstacle); }
public StateElement Clone(AIControllerBase aiController) { var instance = new StateElement(); instance.stateName = this.stateName; instance.state = this.state.Clone(aiController); instance.nextStateElements = new NextStateElement[this.nextStateElements.Length]; for (var i = 0; i < this.nextStateElements.Length; i++) { instance.nextStateElements[i] = this.nextStateElements[i].Clone; } return(instance); }
public override void OnEnter(AIControllerBase aiController) { Observable.Interval(TimeSpan.FromSeconds(this.interval)) .Where(_ => aiController.isActiveAndEnabled) .SubscribeWithState(this, (_, _this) => { foreach (var spawnRegulation in _this.regulations) { spawnRegulation.Spawn(); } }) .AddTo(this.runningEvents) .AddTo(aiController); }
public void CalculateNextState(AIControllerBase aiController, StateElement[] elements) { for (var i = 0; i < this.nextStateElements.Length; i++) { var nextStateElement = this.nextStateElements[i]; if (nextStateElement.Condition.Evalution(aiController)) { var elementIndex = Array.FindIndex(elements, s => s.stateName == nextStateElement.NextStateName); Assert.AreNotEqual(elementIndex, -1, string.Format("{0}に対応する{1}がありませんでした", nextStateElement.NextStateName, typeof(StateElement))); var nextState = elements[elementIndex]; aiController.Change(nextState.state, elementIndex); break; } } }
public override StateBase Clone(AIControllerBase aiController) { var instance = CreateInstance <Attack>(); instance.muzzle = Instantiate(this.muzzle); instance.muzzle.transform.SetParent(aiController.Owner.CachedTransform); instance.muzzle.transform.localPosition = Vector3.zero; instance.muzzle.transform.localRotation = Quaternion.identity; instance.interval = this.interval; instance.rotationSmoothTime = this.rotationSmoothTime; instance.enterOnAttack = this.enterOnAttack; instance.muzzleControllers = instance.muzzle.GetComponentsInChildren <MuzzleController>(); Assert.AreNotEqual(instance.muzzleControllers.Length, 0, string.Format("{0}に{1}が存在しません", instance.muzzle, typeof(MuzzleController))); return(instance); }
public override void OnEnter(AIControllerBase aiController) { var navMeshAgent = aiController.Owner.GetComponent <NavMeshAgent>(); Assert.IsNotNull(navMeshAgent, string.Format("{0}に{1}がアタッチされていませんでした", aiController.Owner, typeof(NavMeshAgent))); var navMeshObstacle = aiController.Owner.GetComponent <NavMeshObstacle>(); Assert.IsNotNull(navMeshObstacle, string.Format("{0}に{1}がアタッチされていませんでした", aiController.Owner, typeof(NavMeshObstacle))); navMeshAgent.enabled = false; navMeshObstacle.enabled = true; aiController.UpdateAsObservable() .Where(_ => aiController.isActiveAndEnabled) .SubscribeWithState2(this, aiController, (_, _this, a) => { var owner = a.Owner.CachedTransform; var v = a.Target.CachedTransform.position - owner.position; v.y = 0.0f; var current = owner.rotation.eulerAngles; var target = Quaternion.LookRotation(v.normalized).eulerAngles; var t = _this.rotationSmoothTime * Time.deltaTime; owner.rotation = Quaternion.Euler( Mathf.SmoothDampAngle(current.x, target.x, ref _this.rotationVelocity.x, t), Mathf.SmoothDampAngle(current.y, target.y, ref _this.rotationVelocity.y, t), Mathf.SmoothDampAngle(current.z, target.z, ref _this.rotationVelocity.z, t) ); }) .AddTo(this.runningEvents) .AddTo(aiController); Observable.Interval(TimeSpan.FromSeconds(this.interval)) .Where(_ => aiController.isActiveAndEnabled) .SubscribeWithState2(this, aiController, (_, _this, a) => { _this.Fire(a.Owner); }) .AddTo(this.runningEvents) .AddTo(aiController); if (this.enterOnAttack) { this.Fire(aiController.Owner); } }
public abstract bool Evalution(AIControllerBase aiController);
public override bool Evalution(AIControllerBase aiController) { return((aiController.Target != null) == this.isExist); }
public abstract StateBase Clone(AIControllerBase aiController);
public abstract void OnEnter(AIControllerBase aiController);