public void Hide(GlobalEvent evt) { if (landscapePaintingStatus == LandscapePaintingStatus.CombineDisplay) { landscapePaintingStatus = LandscapePaintingStatus.HideAfterDisplay; } }
public void Combine(GlobalEvent evt) { if (landscapePaintingStatus == LandscapePaintingStatus.SplitDisplay) { landscapePaintingStatus = LandscapePaintingStatus.CombineDisplay; } }
public void UpdatePosition(LandscapePaintingStatus status, float lerpSpeed, bool shouldHide) { if (lastStatus != status) { lastStatus = status; positionStable = false; rotationStable = false; } switch (status) { case LandscapePaintingStatus.Hide: if (!positionStable) { targetBlock.localPosition = Vector3.Lerp(targetBlock.localPosition, combineLocalPosition, Time.deltaTime * lerpSpeed); if (Vector3.Distance(targetBlock.localPosition, combineLocalPosition) < 0.001f) { positionStable = true; } } if (!rotationStable) { targetBlock.localRotation = Quaternion.Lerp(targetBlock.localRotation, combineLocalRotation, Time.deltaTime * lerpSpeed); Quaternion v = targetBlock.localRotation * Quaternion.Inverse(combineLocalRotation); Vector3 e = v.eulerAngles; if (e.magnitude < 0.001f) { rotationStable = true; } } if (shouldHide) { Hide(); } else { Show(); } break; case LandscapePaintingStatus.CombineDisplay: if (!positionStable) { targetBlock.localPosition = Vector3.Lerp(targetBlock.localPosition, combineLocalPosition, Time.deltaTime * lerpSpeed); if (Vector3.Distance(targetBlock.localPosition, combineLocalPosition) < 0.001f) { positionStable = true; } } if (!rotationStable) { targetBlock.localRotation = Quaternion.Lerp(targetBlock.localRotation, combineLocalRotation, Time.deltaTime * lerpSpeed); Quaternion v = targetBlock.localRotation * Quaternion.Inverse(combineLocalRotation); Vector3 e = v.eulerAngles; if (e.magnitude < 0.001f) { rotationStable = true; } } Show(); break; case LandscapePaintingStatus.SplitDisplay: if (!positionStable) { targetBlock.localPosition = Vector3.Lerp(targetBlock.localPosition, splitLocalPoint.localPosition, Time.deltaTime * lerpSpeed); if (Vector3.Distance(targetBlock.localPosition, splitLocalPoint.localPosition) < 0.001f) { positionStable = true; } } if (!rotationStable) { targetBlock.localRotation = Quaternion.Lerp(targetBlock.localRotation, splitLocalPoint.localRotation, Time.deltaTime * lerpSpeed); Quaternion v = targetBlock.localRotation * Quaternion.Inverse(splitLocalPoint.localRotation); Vector3 e = v.eulerAngles; if (e.magnitude < 0.001f) { rotationStable = true; } } Show(); break; case LandscapePaintingStatus.HideAfterDisplay: if (!positionStable) { targetBlock.localPosition = Vector3.Lerp(targetBlock.localPosition, combineLocalPosition, Time.deltaTime * lerpSpeed); if (Vector3.Distance(targetBlock.localPosition, combineLocalPosition) < 0.001f) { positionStable = true; } } if (!rotationStable) { targetBlock.localRotation = Quaternion.Lerp(targetBlock.localRotation, combineLocalRotation, Time.deltaTime * lerpSpeed); Quaternion v = targetBlock.localRotation * Quaternion.Inverse(combineLocalRotation); Vector3 e = v.eulerAngles; if (e.magnitude < 0.001f) { rotationStable = true; } } if (shouldHide) { Hide(); } else { Show(); } break; default: break; } }
void UpdateState() { if (lastStatus != landscapePaintingStatus) { lastStatus = landscapePaintingStatus; positionStable = false; rotationStable = false; scaleStable = false; } switch (landscapePaintingStatus) { case LandscapePaintingStatus.Hide: if (!positionStable) { transform.position = Vector3.Lerp(transform.position, hidePoint.position, Time.deltaTime * lerpSpeed); if (Vector3.Distance(transform.position, hidePoint.position) < 0.001f) { positionStable = true; transform.position = hidePoint.position; } } if (!rotationStable) { transform.rotation = Quaternion.Lerp(transform.rotation, hidePoint.rotation, Time.deltaTime * lerpSpeed); Quaternion v = transform.rotation * Quaternion.Inverse(hidePoint.rotation); Vector3 e = v.eulerAngles; if (e.magnitude < 0.001f) { rotationStable = true; transform.rotation = hidePoint.rotation; } } if (!scaleStable) { transform.localScale = Vector3.Lerp(transform.localScale, originalScale, Time.deltaTime * lerpSpeed); if (Vector3.Distance(transform.localScale, originalScale) < 0.001f) { scaleStable = true; transform.localScale = originalScale; } } if (positionStable && rotationStable) { childHide = true; } break; case LandscapePaintingStatus.CombineDisplay: if (!positionStable) { transform.position = Vector3.Lerp(transform.position, displayPoint.position, Time.deltaTime * lerpSpeed); if (Vector3.Distance(transform.position, displayPoint.position) < 0.001f) { positionStable = true; transform.position = displayPoint.position; } } if (!rotationStable) { transform.rotation = Quaternion.Lerp(transform.rotation, displayPoint.rotation, Time.deltaTime * lerpSpeed); Quaternion v = transform.rotation * Quaternion.Inverse(displayPoint.rotation); Vector3 e = v.eulerAngles; if (e.magnitude < 0.001f) { rotationStable = true; transform.rotation = displayPoint.rotation; } } if (!scaleStable) { transform.localScale = Vector3.Lerp(transform.localScale, displayScale, Time.deltaTime * lerpSpeed); if (Vector3.Distance(transform.localScale, displayScale) < 0.001f) { scaleStable = true; transform.localScale = displayScale; } } if (positionStable && rotationStable && scaleStable) { var p = InputPlatform.Singleton.GetMoveVector() * InputPlatform.Singleton.ScreenSizeRatio; float deltaX = p.x * 0.2f; //float deltaY = p.y * 0.2f; Vector3 eulerAngles = transform.rotation.eulerAngles; eulerAngles += new Vector3(0, -deltaX, 0); transform.rotation = Quaternion.Euler(eulerAngles); } childHide = false; break; case LandscapePaintingStatus.SplitDisplay: if (!positionStable) { transform.position = Vector3.Lerp(transform.position, displayPoint.position, Time.deltaTime * lerpSpeed); if (Vector3.Distance(transform.position, displayPoint.position) < 0.001f) { positionStable = true; transform.position = displayPoint.position; } } if (!rotationStable) { transform.rotation = Quaternion.Lerp(transform.rotation, displayPoint.rotation, Time.deltaTime * lerpSpeed); Quaternion v = transform.rotation * Quaternion.Inverse(displayPoint.rotation); Vector3 e = v.eulerAngles; if (e.magnitude < 0.001f) { rotationStable = true; transform.rotation = displayPoint.rotation; } } if (!scaleStable) { transform.localScale = Vector3.Lerp(transform.localScale, displayScale, Time.deltaTime * lerpSpeed); if (Vector3.Distance(transform.localScale, displayScale) < 0.001f) { scaleStable = true; transform.localScale = displayScale; } } childHide = false; break; case LandscapePaintingStatus.HideAfterDisplay: if (!positionStable) { transform.position = Vector3.Lerp(transform.position, hidePoint.position, Time.deltaTime * lerpSpeed); if (Vector3.Distance(transform.position, hidePoint.position) < 0.001f) { positionStable = true; transform.position = hidePoint.position; } } if (!rotationStable) { transform.rotation = Quaternion.Lerp(transform.rotation, hidePoint.rotation, Time.deltaTime * lerpSpeed); Quaternion v = transform.rotation * Quaternion.Inverse(hidePoint.rotation); Vector3 e = v.eulerAngles; if (e.magnitude < 0.001f) { rotationStable = true; transform.rotation = hidePoint.rotation; } } if (!scaleStable) { transform.localScale = Vector3.Lerp(transform.localScale, originalScale, Time.deltaTime * lerpSpeed); if (Vector3.Distance(transform.localScale, originalScale) < 0.001f) { scaleStable = true; transform.localScale = originalScale; } } if (positionStable && rotationStable) { childHide = true; } else { childHide = false; } break; default: break; } foreach (var sb in splitingBlocks) { sb.UpdatePosition(landscapePaintingStatus, lerpSpeed, childHide); } lastStatus = landscapePaintingStatus; }