Exemple #1
0
        public override StateBase Clone(AIControllerBase aiController)
        {
            var instance = CreateInstance <Chase>();

            instance.speed = this.speed;
            return(instance);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
            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);
            }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
        }
Exemple #7
0
        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);
        }
Exemple #8
0
            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);
            }
Exemple #9
0
 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);
 }
Exemple #10
0
 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;
         }
     }
 }
Exemple #11
0
        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);
        }
Exemple #12
0
        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);
Exemple #14
0
 public override bool Evalution(AIControllerBase aiController)
 {
     return((aiController.Target != null) == this.isExist);
 }
Exemple #15
0
 public abstract StateBase Clone(AIControllerBase aiController);
Exemple #16
0
 public abstract void OnEnter(AIControllerBase aiController);