Exemplo n.º 1
0
 public ITentacleState ChangeState(Tentacle tentacle, GameObject gameObject)
 {
     if (state_ == ToParentSubState.partialReturn && tentacle_.Head_.GetComponent <TentaclePart>().atDestination)
     {
         return(new AtTargetState(tentacle.Target_, tentacle));
     }
     if (state_ == ToParentSubState.partialReturn && !tentacle.IsDefending_())
     {
         return(new ToTargetState(tentacle.Target_, tentacle));
     }
     if (tentacle.bodyPartCount_ == 0)
     {
         return(new DeadState(tentacle));
     }
     return(this);
 }
Exemplo n.º 2
0
    public ITentacleState ChangeState(Tentacle tentacle, GameObject gameObject)
    {
        if (tentacle.gotCut_)
        {
            return(new CutState(tentacle, tentacle_.cutOrigin_));
        }
        if (tentacle.IsDefending_() && atCell_)
        {
            return(new ToParentState(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 ToTargetState(tentacle.Target_, tentacle));
        }

        return(this);
    }
Exemplo n.º 3
0
 void HandleExtensionMovement()
 {
     travelTime_ += Time.deltaTime;
     if (travelTime_ > travelSpeed_)
     {
         foreach (GameObject bodyPart in tentacle_.BodyParts_)
         {
             TentaclePart part = bodyPart.GetComponent <TentaclePart>();
             if (!part.atDestination)
             {
                 if (part.BodyPartId_ == 0 && tentacle_.IsDefending_())
                 {
                     if (middleGO_ == null)
                     {
                         Vector3 midlePos = Vector3.MoveTowards(part.targetGO_.transform.position, tentacle_.transform.position, Vector3.Distance(tentacle_.transform.position, part.targetGO_.transform.position) / 2);
                         midlePos  = Vector3.MoveTowards(midlePos, tentacle_.Target_.transform.position, 0.1f);
                         middleGO_ = new GameObject();
                         middleGO_.transform.position = midlePos;
                         part.targetGO_ = middleGO_;
                     }
                     part.transform.position = Vector3.MoveTowards(part.transform.position, part.targetGO_.transform.position, Tentacle.travelSpeed_ * Time.deltaTime);
                 }
                 else
                 {
                     if (part.BodyPartId_ == 0 && middleGO_ != null)
                     {
                         part.targetGO_ = tentacle_.Target_;
                     }
                     Vector3 variable   = Vector3.MoveTowards(part.targetGO_.transform.position, tentacle_.transform.position, 0.2f);
                     float   distance   = Vector3.Distance(part.transform.position, variable);
                     float   distance2D = Vector2.Distance(part.transform.position, variable);
                     part.transform.position = Vector3.MoveTowards(part.transform.position, Vector3.MoveTowards(part.targetGO_.transform.position, tentacle_.transform.position, 0.2f), Tentacle.travelSpeed_ * Time.deltaTime);
                 }
             }
         }
         travelTime_ = 0;
     }
 }
Exemplo n.º 4
0
    public ITentacleState ChangeState(Tentacle tentacle, GameObject gameObject)
    {
        if (tentacle.ParentCellCurrentHealth <= 0 || tentacle.gotCut_)//TODO: isDefending is not enough to know wether the tentacle should expant or contract, need a better solution
        {
            return(new ToParentState(tentacle.Target_, tentacle));
        }
        if (headPart_.atDestination)
        {
            return(new AtTargetState(tentacle.Target_, tentacle_));
        }
        if (tentacle.IsDefending_())
        {
            float   distanceFromHeadToParent = Vector3.Distance(tentacle_.Head_.transform.position, tentacle_.transform.position);
            Vector3 middlePoint = (tentacle_.transform.position + tentacle_.Target_.transform.position) / 2;
            float   distanceFromMiddleToParent = Vector3.Distance(middlePoint, tentacle_.transform.position);
            if (distanceFromHeadToParent >= distanceFromMiddleToParent)
            {
                return(new ToParentState(tentacle.Target_, tentacle));
            }
        }


        return(this);
    }