Beispiel #1
0
    void Awake()
    {
        gameObject.TryGetComponent <CharacterController> (out controller);

        AtomTags.OnInitialization(() => player = AtomTags.FindByTag(playerTag.Value));

        StateMachineRef.Machine.OnUpdate((deltaTime, value) =>
        {
            distance = Vector3.Distance(player.transform.position, transform.position);

            if (value == "CHASING")
            {
                if (player != null)
                {
                    MoveTowardsPlayer();
                }
            }
            else if (value == "ATTACKING")
            {
            }
        }, gameObject);

        StateMachineRef.Machine.OnStateCooldown("ATTACKING", (state) => print("FIRE"), gameObject);

        StateMachineRef.Machine.DispatchWhen(
            command: "ATTACK",
            (value) => player != null && value == "CHASING" && (_shootingRange.Value >= Vector3.Distance(player.transform.position, transform.position)),
            gameObject
            );

        StateMachineRef.Machine.DispatchWhen(
            command: "CHASE", (value) => player.transform != null && value == "ATTACKING" && (_shootingRange.Value < Vector3.Distance(player.transform.position, transform.position)), gameObject);
    }
Beispiel #2
0
    // Start is called before the first frame update
    void Start()
    {
        isMoving       = new BoolVariable();
        isMoving.Value = false;
        _animationHandler.CreateAnimationUnit("Moving", AnimatorControllerParameterType.Bool, isMoving);

        player = AtomTags.FindByTag(playerTag.Value).transform;

        _rb = this.GetComponent <Rigidbody2D>();
    }
Beispiel #3
0
    void Start()
    {
        attackEvent = new VoidEvent();
        _animationHandler.CreateAnimationUnit("Punch", AnimatorControllerParameterType.Trigger, atomEvent: attackEvent);

        Transform player = AtomTags.FindByTag(playerTag.Value).transform;

        Observable.EveryUpdate().Buffer(TimeSpan.FromSeconds(eachXSeconds))
        .Where(_ => attackAtThisDistance.Value >= Vector2.Distance(player.position, transform.position))
        .Subscribe(_ =>
        {
            _attackAction.Do(gameObject, player.position - transform.position);
            attackEvent.Raise();
        });
    }
Beispiel #4
0
        void Awake()
        {
            Transform target = null;

            AtomTags.OnInitialization(() => target = AtomTags.FindByTag(_tagToTarget.Value).transform);

            _enemyState.Machine.OnStateCooldown("ATTACKING", (value) =>
            {
                if (target)
                {
                    var spawnPos = transform.position + transform.right;
                    Instantiate(_projectile, spawnPos, transform.rotation);
                }
            }, gameObject);
        }
Beispiel #5
0
        void Awake()
        {
            Transform target = null;

            AtomTags.OnInitialization(() => target = AtomTags.FindByTag(_tagToTarget.Value).transform);
            var body = GetComponent <Rigidbody2D>();

            _enemyState.Machine.OnUpdate((deltaTime, value) =>
            {
                if (target)
                {
                    body.Move((target.position - transform.position), value == "CHASING" ? 2f : 0f, deltaTime);
                }
                else
                {
                    body.Move(Vector2.zero, 0f, deltaTime);
                }
            }, gameObject);
            _enemyState.Machine.DispatchWhen(command: "ATTACK", (value) => target != null && value == "CHASING" && (_shootingRange.Value >= Vector3.Distance(target.position, transform.position)), gameObject);
            _enemyState.Machine.DispatchWhen(command: "CHASE", (value) => target != null && value == "ATTACKING" && (_shootingRange.Value < Vector3.Distance(target.position, transform.position)), gameObject);
        }
Beispiel #6
0
 private void Awake()
 {
     emitters = AtomTags.FindAllByTag(emitterTag.Value);
 }
        public IEnumerator TestingAndProfiling()
        {
            var go         = new GameObject();
            var atomicTags = go.AddComponent <AtomTags>();

            List <string> random_tags_raw = new List <string>()
            {
                "a", "c", "e", "g", "i", "k", "m"
            };

            random_tags_raw.OrderBy((s => Random.value)).ToList();

            var fieldinfo = typeof(StringConstant).GetField("_value", BindingFlags.NonPublic | BindingFlags.Instance);

            for (int i = 0; i < random_tags_raw.Count; ++i)
            {
                var stringConstant = ScriptableObject.CreateInstance <StringConstant>();
                fieldinfo.SetValue(stringConstant, random_tags_raw[i]);
                atomicTags.AddTag(stringConstant);
            }



            var newConstant = ScriptableObject.CreateInstance <StringConstant>();

            fieldinfo.SetValue(newConstant, "b");

            yield return(null);

            yield return(new WaitForFixedUpdate());

            // with the help of those ProfilerMarkers you can check GC Alloc in the Profiler Window Pretty easy
            // an alternative would be: https://docs.unity3d.com/2018.3/Documentation/ScriptReference/TestTools.Constraints.AllocatingGCMemoryConstraint.html
            // Assert.That(() => { }, Is.Not.AllocatingGCMemory()); but it does not work correctly half of the time

            Assert.That(() => { var t1 = atomicTags.Tags; }, Is.Not.AllocatingGCMemory());
            Assert.That(() => { var t1 = atomicTags.Tags[1]; }, Is.Not.AllocatingGCMemory());
            Assert.That(() => { var t1 = atomicTags.Tags[2].Value; }, Is.Not.AllocatingGCMemory());
            Assert.That(() => { atomicTags.HasTag(null); }, Is.Not.AllocatingGCMemory());

            Assert.AreSame(go, AtomTags.FindByTag("e"));
            using (new ProfilerMarker("MySystem.FindByTag").Auto())
            {
                AtomTags.FindByTag("e");
            }
            // THIS:
            // Assert.That(() => { var t1 = AtomicTags.FindByTag("e"); }, Is.AllocatingGCMemory());
            // says it allocates, the profiler says it does not

            using (new ProfilerMarker("MySystem.MultpleGet").Auto())
            {
                var t1  = atomicTags.Tags;
                var t10 = t1[0];
                var t11 = atomicTags.Tags[0];
                var t2  = atomicTags.Tags;
            }

            using (new ProfilerMarker("MySystem.GetGlobal").Auto())
            {
                AtomTags.GetTagsForGameObject(go);
            }

            Assert.AreEqual(random_tags_raw.Count, atomicTags.Tags.Count);

            for (var i = 0; i < atomicTags.Tags.Count - 1; i++)
            {
                Assert.IsTrue(String.CompareOrdinal(atomicTags.Tags[i].Value, atomicTags.Tags[i + 1].Value) < 0);
            }
            using (new ProfilerMarker("MySystem.AddCompletelyNewTag").Auto())
            {
                atomicTags.AddTag(newConstant);
            }

            Assert.AreEqual(random_tags_raw.Count + 1, atomicTags.Tags.Count);

            for (var i = 0; i < atomicTags.Tags.Count - 1; i++)
            {
                Assert.IsTrue(String.CompareOrdinal(atomicTags.Tags[i].Value, atomicTags.Tags[i + 1].Value) < 0);
            }

            using (new ProfilerMarker("MySystem.RemoveTag").Auto())
            {
                atomicTags.RemoveTag("b");
            }


            using (new ProfilerMarker("MySystem.AddTagAgain").Auto())
            {
                atomicTags.AddTag(newConstant);
            }

            Assert.IsTrue(atomicTags.HasTag("a"));
            using (new ProfilerMarker("MySystem.HasTagTrue1").Auto())
            {
                atomicTags.HasTag("a");
            }

            Assert.IsTrue(go.HasTag("a"));
            using (new ProfilerMarker("MySystem.HasTagTrue1Global").Auto())
            {
                go.HasTag("a");
            }

            Assert.IsTrue(go.HasTag("m"));
            using (new ProfilerMarker("MySystem.HasTagTrue2").Auto())
            {
                go.HasTag("m");
            }

            Assert.IsFalse(go.HasTag("z"));
            using (new ProfilerMarker("MySystem.HasTagFalse").Auto())
            {
                go.HasTag("z");
            }

            var falseList = new List <string>()
            {
                "d", "f", "h", "j", "l"
            };
            var truelist = new List <string>()
            {
                "d", "f", "h", "j", "m"
            };

            Assert.IsFalse(go.HasAnyTag(falseList));
            using (new ProfilerMarker("MySystem.HasAnyTag_allFalse").Auto())
            {
                go.HasAnyTag(falseList);
            }

            Assert.IsTrue(go.HasAnyTag(truelist));
            using (new ProfilerMarker("MySystem.HasAnyTag_lastTrue").Auto())
            {
                go.HasAnyTag(truelist);
            }



            yield return(null);
        }