Пример #1
0
    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);
    }
Пример #2
0
 public INetworkTentacleState ChangeState(NetworkTentacle tentacle, GameObject gameObject)
 {
     if (tentacle.bodyPartCount_ == 0)
     {
         return(new NetworkDeadState(tentacle));
     }
     return(this);
 }
Пример #3
0
 public void DoStateAction(NetworkTentacle tentacle)
 {
     headDistance_ = Vector3.Distance(tentacle_.Head_.transform.position, target_.transform.position);
     if (headDistance_ <= nextPartDistance_)
     {
         nextPartDistance_ = headDistance_ - bodyPartRadius_;
         tentacle_.CreateBodyPart();
     }
     HandleExtensionMovement();
 }
Пример #4
0
 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>();
 }
Пример #5
0
 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]);
     }
 }
Пример #6
0
    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);
    }
Пример #7
0
 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();
             }
         }
     }
 }
Пример #8
0
 public NetworkDeadState(NetworkTentacle tentacle)
 {
     tentacle.GetComponentInParent <NetworkCell>().RemoveTarget(tentacle.Target_);
 }
Пример #9
0
 public void DoStateAction(NetworkTentacle tentacle)
 {
 }
Пример #10
0
 public INetworkTentacleState ChangeState(NetworkTentacle tentacle, GameObject gameObject)
 {
     return(null);
 }
Пример #11
0
 public void DoStateAction(NetworkTentacle tentacle)
 {
     TravelToParent();
     TravelToTarget();
 }
Пример #12
0
 public void DoStateAction(NetworkTentacle tentacle)
 {
     HandlePulse();
 }