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; }
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); }