public override void use(CRController source, CRAbility ability, CRController target) { _source = source; _target = target; _ability = ability; }
public void cancel() { if (Network.isServer) networkView.RPC("NetworkCancel", RPCMode.Others); _ability = null; }
public override void use(CRController source, CRAbility ability, CRController target) { _source = source; _target = target; _ability = ability; transform.parent = _source.transform; }
public static void Cast(CRController source, CRAbility ability, CRController target) { GameObject go = GameObject.Instantiate(ability.action) as GameObject; go.transform.parent = target.transform; go.transform.localPosition = Vector3.zero; if (Network.isServer) { CRCombatAction[] actions = (CRCombatAction[])go.GetComponentsInChildren<CRCombatAction>(); foreach (CRCombatAction action in actions) { ResloveCombatAction(source, action, target); } } }
public override void use(CRController source, CRAbility ability, CRController target) { CRCombatManager.Cast(source, ability, target); Destroy(gameObject); }
public void SetAbility(int index, CRAbility ability) { abilities[index].ability = ability; }
public abstract void use(CRController source, CRAbility ability, CRController target);
public void Update() { if (_ability) { if (_pathing) { if (Vector3.Distance(transform.position, _target.transform.position) > (GetComponent<NavMeshAgent>().radius + _target.GetComponent<NavMeshAgent>().radius) + 1.0f + _ability.range) { return; } else { use (_ability, _target); return; } } if (!_controller.creature.conditionManager.canCast()) { _ability = null; _target = null; } else if (_cast.IsDone()) { if (Network.isServer) { CRResource resource = _controller.creature.attributeManager.GetResource(_ability.resourceType); if (!resource || resource.currentValue < _ability.cost) { NetworkChat.instance.send(_controller.GetComponent<CRControllerBinding>().owner, "Not enough " + _ability.resourceType.ToString().ToLower() + ".", 0); cancel(); return; } if (_ability.requiresTarget()) { if (_target.creature.isDead()) { NetworkChat.instance.send(_controller.GetComponent<CRControllerBinding>().owner, "Target is dead.", 0); cancel(); return; } if (Vector3.Distance(transform.position, target.transform.position) > (GetComponent<NavMeshAgent>().radius + _target.GetComponent<NavMeshAgent>().radius) + 1.0f + _ability.range * 1.1f) { NetworkChat.instance.send(_controller.GetComponent<CRControllerBinding>().owner, "Out of range.", 0); cancel(); return; } } resource.Consume(_ability.cost); _ability.triggerCooldown(); if (_ability.type == CRAbilityType.PBAOE) { List<CRController> targets = GetTargetsInRadius(transform.position, _ability.range, _ability.targetType); foreach (CRController target in targets) { CreateBridge(_controller, _ability, target); } } else { CreateBridge(_controller, _ability, _target); } } _ability = null; _target = null; } } }
void NetworkInstantiateAction(int index, NetworkViewID target) { _ability = GetComponentInChildren<CRAbilityManager>().GetAbility(index); _ability.triggerCooldown(); GameObject go = Instantiate (_ability.bridge, transform.position, Quaternion.identity) as GameObject; go.GetComponent<CRAbilityBridge>().use(_controller, _ability, NetworkView.Find(target).GetComponent<CRController>()); }
void NetworkCast(int index) { _ability = GetComponentInChildren<CRAbilityManager>().GetAbility(index); start(); }
void NetworkCancel() { Debug.Log ("cancel"); _ability = null; //remove particles if needed }
private void CreateBridge(CRController source, CRAbility ability, CRController target) { GameObject go = Instantiate (ability.bridge, transform.position, Quaternion.identity) as GameObject; go.GetComponent<CRAbilityBridge>().use(source, ability, target); networkView.RPC ("NetworkInstantiateAction", RPCMode.Others, ability.id, target.networkView.viewID); }
public bool use(CRAbility ability, CRController target) { if (ability.targetType == CRAbilityTargetType.SELF) { target = _controller; } _target = target; _ability = ability; if (!ability) return false; if (!_gcd.IsDone()) { _ability = null; return false; } if (ability.onCooldown()) { NetworkChat.instance.send(_controller.GetComponent<CRControllerBinding>().owner, "Ability not ready yet.", 0); _ability = null; return false; } if (!_controller.creature.conditionManager.canCast()) { NetworkChat.instance.send(_controller.GetComponent<CRControllerBinding>().owner, "You are silenced.", 0); _ability = null; return false; } CRResource resource = _controller.creature.attributeManager.GetResource(ability.resourceType); if (!resource || resource.currentValue < _ability.cost) { NetworkChat.instance.send(_controller.GetComponent<CRControllerBinding>().owner, "Not enough " + _ability.resourceType.ToString().ToLower() + ".", 0); _ability = null; return false; } if (_ability.requiresTarget() && _ability.targetType != CRAbilityTargetType.ALL) { int reputation = _controller.creature.faction.GetReputation(_target.creature.faction.type); if (_ability.targetType == CRAbilityTargetType.HOSTILE) { if (_controller == _target) { NetworkChat.instance.send(_controller.GetComponent<CRControllerBinding>().owner, "You must target an enemy for that.", 0); _ability = null; return false; } if (reputation != CRFaction.HATED) { NetworkChat.instance.send(_controller.GetComponent<CRControllerBinding>().owner, "You must target an enemy for that.", 0); _ability = null; return false; } } else { if (reputation != CRFaction.FRIENDLY) { NetworkChat.instance.send(_controller.GetComponent<CRControllerBinding>().owner, "You must target a friend for that.", 0); _ability = null; return false; } } } if (_ability.requiresTarget()) { if (Vector3.Distance(transform.position, target.transform.position) > (GetComponent<NavMeshAgent>().radius + _target.GetComponent<NavMeshAgent>().radius) + 2.0f + ability.range) { _pathing = true; //NetworkChat.instance.send(_controller.GetComponent<CRControllerBinding>().owner, "Out of range.", 0); //_ability = null; return true; } if (target.creature.isDead()) { NetworkChat.instance.send(_controller.GetComponent<CRControllerBinding>().owner, "Target is dead.", 0); cancel(); return false; } } CRAbilityRequirement[] requirements = (CRAbilityRequirement[])ability.GetComponentsInChildren<CRAbilityRequirement>(); foreach (CRAbilityRequirement requirement in requirements) { if (!requirement.satisfied(_controller, _target)) { if (_controller.creature.conditionManager.hasCondition(CRConditionType.STEALTHED)) _controller.stop(); cancel(); return false; } } start(); return true; }
public CRUseAbility(CRAbilityBehaviour behaviour, CRAbility ability, CRController target) { _behaviour = behaviour; _ability = ability; _target = target; }