Ejemplo n.º 1
0
        public void InitObject(MonoBehaviour monoBehaviourObj)
        {
            UninitObject();

            _monoBehaviour = monoBehaviourObj;
            _selectable    = _monoBehaviour.GetComponent <ISelectable>();

            if (_selectable == null || !_selectable.CanSelect())
            {
                UninitObject();
                return;
            }

            _damageable         = _monoBehaviour.GetComponent <IDamageable>();
            _targetable         = _monoBehaviour.GetComponent <ITargetable>();
            _moveable           = _monoBehaviour.GetComponent <IMoveable>();
            _attackable         = _monoBehaviour.GetComponent <IAttackable>();
            _behaviorSwitchable = _monoBehaviour.GetComponent <IBehaviorSwitchable>();
            _carriable          = _monoBehaviour.GetComponent <ICarriable>();

            if (_damageable != null)
            {
                // If enemy, don't select.
                if (_targetable.IsEnemy(_targetable.TeamId))
                {
                    UninitObject();
                    return;
                }
            }

            _selectable.Select();

            _isInit = true;
        }
Ejemplo n.º 2
0
        public static bool TargetExistAndReachable(ITargetable requester, ITargetable target, float range)
        {
            var conditionsMet = false;

            if (target != null && target.IsEnemy(requester.TeamId) && target.Damageable.CanBeDamaged())
            {
                if (Vector3.Distance(requester.Transform.position, target.Transform.position) <= range && IsTargetInLineOfSight(requester, target))
                {
                    conditionsMet = true;
                }
            }
            return(conditionsMet);
        }
        private void DamageTarget(ITargetable target)
        {
            if (target == null)
            {
                return;
            }

            if (_lastTraget != target)
            {
                _timeNextDamage = Time.time + fireRate;
                _lastTraget     = target;
                return;
            }
            if (_timeNextDamage > Time.time || !target.IsEnemy(SelectableShip.TeamId) || !target.Damageable.CanBeDamaged())
            {
                return;
            }
            _timeNextDamage = Time.time + fireRate;

            target.Damageable.Damage(damage);
        }