public INetworkTentacleState ChangeState(NetworkTentacle tentacle, GameObject gameObject) { if (tentacle.ParentCellCurrentHealth <= 0 || tentacle.gotCut_) { return(new NetworkToParentState(tentacle.Target_, tentacle)); } Vector3 auxPox = Vector3.MoveTowards(headPart_.targetGO_.transform.position, headPart_.parentTentacle_.transform.position, 0.2f); if (headPart_.transform.position == auxPox || headPart_.transform.position == headPart_.targetGO_.transform.position) //headPart_.atDestination) { return(new NetworkAtTargetState(tentacle.Target_, tentacle_)); } if (tentacle.IsDefending_()) { float distanceFromHeadToParent = Vector3.Distance(tentacle_.Head_.transform.position, tentacle_.transform.position); Vector3 middlePoint = Vector3.MoveTowards(tentacle_.Target_.transform.position, tentacle_.transform.position, Vector3.Distance(tentacle_.transform.position, tentacle_.Target_.transform.position) / 2); float distanceFromMiddleToParent = Vector3.Distance(middlePoint, tentacle_.transform.position); if (distanceFromHeadToParent > distanceFromMiddleToParent) { return(new NetworkToParentState(tentacle.Target_, tentacle)); } } return(this); }
public INetworkTentacleState ChangeState(NetworkTentacle tentacle, GameObject gameObject) { if (tentacle.bodyPartCount_ == 0) { return(new NetworkDeadState(tentacle)); } return(this); }
public void DoStateAction(NetworkTentacle tentacle) { headDistance_ = Vector3.Distance(tentacle_.Head_.transform.position, target_.transform.position); if (headDistance_ <= nextPartDistance_) { nextPartDistance_ = headDistance_ - bodyPartRadius_; tentacle_.CreateBodyPart(); } HandleExtensionMovement(); }
public NetworkAtTargetState(GameObject target, NetworkTentacle tentacle) { tentacle_ = tentacle; target_ = target; bodyPartRadius_ = 0.2f; pulseTime_ = 0; pulseHoldTime_ = 0.08f; tentacleHead_ = tentacle.Head_.GetComponent <NetworkTentaclePart>(); atCell_ = tentacleHead_.targetGO_.GetComponent <NetworkCell>() != null; targetCell_ = target.GetComponent <NetworkCell>(); }
public NetworkCutState(NetworkTentacle tentacle, GameObject cutOrigin) { tentacle_ = tentacle; cutIdenx_ = tentacle_.BodyParts_.IndexOf(cutOrigin); toTarget_ = new List <GameObject>(); toParent_ = new List <GameObject>(); for (int i = 0; i <= cutIdenx_; i++) { toTarget_.Add(tentacle_.BodyParts_[i]); } for (int i = tentacle_.bodyPartCount_ - 1; i > cutIdenx_; i--) { toParent_.Add(tentacle_.BodyParts_[i]); } }
public INetworkTentacleState ChangeState(NetworkTentacle tentacle, GameObject gameObject) { if (tentacle.gotCut_) { return(new NetworkCutState(tentacle, tentacle_.cutOrigin_)); } if (tentacle.IsDefending_() && atCell_) { return(new NetworkToParentState(tentacle.Target_, tentacle)); } if (!targetCell_.Targets_.Contains(tentacle_.ParentCell_.gameObject) && tentacleHead_.TargetGO.tag != "Cell")//If target cell stopped defending { tentacleHead_.targetGO_ = tentacle_.Target_; return(new NetworkToTargetState(tentacle.Target_, tentacle)); } return(this); }
public NetworkToTargetState(GameObject target, NetworkTentacle tentacle) { tentacle_ = tentacle; target_ = target; headDistance_ = Vector3.Distance(tentacle.Head_.transform.position, target_.transform.position); bodyPartRadius_ = 0.2f; nextPartDistance_ = headDistance_ - bodyPartRadius_; headPart_ = tentacle.Head_.GetComponent <NetworkTentaclePart>(); targetCell_ = target_.GetComponent <NetworkCell>(); if (NetworkCell.AreAlly(tentacle_.ParentCell_, targetCell_, tentacle_.ParentCell_.TeamManager_)) { foreach (NetworkTentacle targetTentacle in targetCell_.Tentacles_) { if (targetTentacle.Target_ == tentacle_.ParentCell_.gameObject) { targetTentacle.Retreat(); } } } }
public NetworkDeadState(NetworkTentacle tentacle) { tentacle.GetComponentInParent <NetworkCell>().RemoveTarget(tentacle.Target_); }
public void DoStateAction(NetworkTentacle tentacle) { }
public INetworkTentacleState ChangeState(NetworkTentacle tentacle, GameObject gameObject) { return(null); }
public void DoStateAction(NetworkTentacle tentacle) { TravelToParent(); TravelToTarget(); }
public void DoStateAction(NetworkTentacle tentacle) { HandlePulse(); }