Beispiel #1
0
        public void Execute()
        {
            // Следим за здоровьем игровых объектов.
            HealthNode node;

            for (int i = _healthNodes.Count - 1; i >= 0; i--)
            {
                node = _healthNodes[i];
                if (node.Health.HP <= 0.0f)
                {
                    // Удаляем игровые объекты если они не обладают достаточнм здоровьем.
                    _engine.RemoveEntity(node.entity);
                    GameObject.DestroyObject(node.entity.gameObject);
                }
            }

            // Обновляем состояние для панелей здоровья.
            KeyValuePair <HealthNode, HealthBar> pair;

            for (int i = 0, n = _healthBars.Count; i < n; i++)
            {
                pair                = _healthBars[i];
                pair.Value.HP       = pair.Key.Health.HP;
                pair.Value.Position = pair.Key.entity.Position;
            }
        }
Beispiel #2
0
        public void Execute()
        {
            float          dist  = 0.0f;
            float          ang   = 0.0f;
            Vector2        force = new Vector2();
            MagnetNode     magnet;
            MagnetableNode item;

            for (int i = 0, n = _magnetNodes.Count; i < n; i++)
            {
                magnet = _magnetNodes[i];
                for (int j = _magnetableNodes.Count - 1; j >= 0; j--)
                {
                    item = _magnetableNodes[j];
                    item.Magnetable.lifeTime += Time.deltaTime;
                    dist = AntMath.Distance(magnet.entity.Position, item.entity.Position);
                    if ((magnet.Magnet.magnetKind == item.Magnetable.kind ||
                         magnet.Magnet.magnetKind == ItemKind.All) &&
                        dist < magnet.Magnet.distance &&
                        item.Magnetable.lifeTime > 2.0f)
                    {
                        ang     = AntMath.AngleRad(item.entity.Position, magnet.entity.Position);
                        force.x = magnet.Magnet.force * Mathf.Cos(ang);
                        force.y = magnet.Magnet.force * Mathf.Sin(ang);
                        item.Magnetable.body.AddForce(force, ForceMode2D.Impulse);

                        if (dist <= magnet.Magnet.collectDistance)
                        {
                            CollectItem(magnet, item);
                            _engine.RemoveEntity(item.entity);
                            GameObject.Destroy(item.entity.gameObject);
                        }
                    }
                }
            }
        }