public void UpdateRetract() { if (tentaclePieces.Count == 0) { return; } if (Time.time - lastUpdate < TENTACLE_GROWTH_SPEED) { return; } lastUpdate = Time.time; TentaclePiece last = tentaclePieces.GetLastObject(); tentaclePieces.Remove(last); last.RemoveFromContainer(); UpdateTentacle(); }
public void UpdateDrag() { if (Time.time - lastUpdate < TENTACLE_GROWTH_SPEED) { return; } lastUpdate = Time.time; float tip_x, tip_y; if (tentaclePieces.Count == 0) { tip_x = lastX; tip_y = depthY; } else { tip_x = tentaclePieces.GetLastObject().tipX; tip_y = tentaclePieces.GetLastObject().tipY; } //might also want to add a time component so we don't insta-grow Vector2 delta = new Vector2(lastX - tip_x, lastY - tip_y); if (delta.magnitude > BONE_LENGTH) { if (tentaclePieces.Count < MAX_TENTACLE_PIECES) { //y-positive, invert the y float angle = Mathf.Atan2(delta.y * -1, delta.x) * RXMath.RTOD; if (tentaclePieces.Count > 1) { float angle_diff = angle - tentaclePieces[tentaclePieces.Count - 2].rotation; while (angle_diff > 180f) { angle_diff -= 360f; } while (angle_diff < -180f) { angle_diff += 360f; } if (Mathf.Abs(angle_diff) > TENTACLE_MAX_TURN_ANGLE) { float dampening = (1 - Mathf.Abs(TENTACLE_MAX_TURN_ANGLE / angle_diff)) * angle_diff; angle -= dampening; } } TentaclePiece bone = new TentaclePiece(angle); tentaclePieces.Add(bone); AddChild(bone); bone.x = tip_x; bone.y = tip_y; UpdateTentacle(); } } }