Esempio n. 1
0
 public AtTargetState(GameObject target, Tentacle tentacle)
 {
     tentacle_       = tentacle;
     target_         = target;
     bodyPartRadius_ = 0.2f;
     pulseTime_      = 0;
     pulseHoldTime_  = 0.03f;
     tentacleHead_   = tentacle.Head_.GetComponent <TentaclePart>();
     atCell_         = tentacleHead_.targetGO_.GetComponent <Cell>() != null;
     targetCell_     = target.GetComponent <Cell>();
 }
Esempio n. 2
0
 void HandlePulse()
 {
     pulseTime_ += Time.deltaTime;
     if (pulseTime_ > pulseHoldTime_)
     {
         foreach (GameObject bodyPartGO in tentacle_.BodyParts_)
         {
             TentaclePart bodyPart = bodyPartGO.GetComponent <TentaclePart>();
             if (bodyPart.HasPulse_)
             {
                 bodyPart.SendPulse();
             }
         }
         pulseTime_ = 0;
     }
 }
Esempio n. 3
0
    void PartialReturn()
    {
        travelTime_ += Time.deltaTime;
        if (travelTime_ > travelSpeed_)
        {
            GameObject   toRemove = null;
            TentaclePart headPart = null;
            foreach (GameObject bodyPartGO in tentacle_.BodyParts_)
            {
                TentaclePart bodyPart = bodyPartGO.GetComponent <TentaclePart>();
                if (middleGO_ == null && bodyPart.BodyPartId_ == 0)
                {
                    Vector3 midlePos = Vector3.MoveTowards(bodyPart.targetGO_.transform.position, tentacle_.transform.position, Vector3.Distance(tentacle_.transform.position, bodyPart.targetGO_.transform.position) / 2);
                    midlePos  = Vector3.MoveTowards(midlePos, tentacle_.Target_.transform.position, -0.3f);
                    middleGO_ = new GameObject();
                    middleGO_.transform.position = midlePos;
                    bodyPart.targetGO_           = middleGO_;
                    headPart = bodyPart;
                }
                if (bodyPart.BodyPartId_ == 0 && !bodyPart.atDestination)
                {
                    /*Vector3 middlePoint = Vector3.MoveTowards(bodyPart.targetGO_.transform.position, tentacle_.transform.position, Vector3.Distance(bodyPart.targetGO_.transform.position, tentacle_.transform.position) / 2);
                     * bodyPart.transform.position = Vector3.MoveTowards(bodyPart.transform.position, middlePoint, 0.01f);*/

                    bodyPart.transform.position = Vector3.MoveTowards(bodyPart.transform.position, bodyPart.targetGO_.transform.position, Tentacle.travelSpeed_ * Time.deltaTime);
                }
                else
                {
                    bodyPartGO.transform.position = Vector3.MoveTowards(bodyPartGO.transform.position, tentacle_.transform.position, Tentacle.travelSpeed_ * Time.deltaTime);
                }
                if (bodyPartGO.transform.position == tentacle_.transform.position)
                {
                    toRemove = bodyPartGO;
                }
            }
            if (toRemove != null)
            {
                tentacle_.RemoveBodyPart(toRemove);
            }
            travelTime_ = 0;
        }
    }
Esempio n. 4
0
 public ToTargetState(GameObject target, Tentacle 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 <TentaclePart>();
     targetCell_       = target_.GetComponent <Cell>();
     if (Cell.AreAlly(tentacle_.ParentCell_, targetCell_))
     {
         foreach (Tentacle targetTentacle in targetCell_.Tentacles_)
         {
             if (targetTentacle.Target_ == tentacle_.ParentCell_.gameObject)
             {
                 targetTentacle.Retreat();
             }
         }
     }
 }
Esempio n. 5
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;
     }
 }