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>(); }
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; } }
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; } }
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(); } } } }
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; } }