void SetLevel(LevelBehaviour level, int dir) { if (level != currentLevel) { return; } progressing = true; var levelIndex = Array.IndexOf(levels, level); if ((levelIndex == 0 & dir < 0) || (levelIndex == levels.Length - 1 && dir > 0)) { currentLevel.TransitToIdentity(transitionSpeed, TransitionCompleted); } else { var nextLevelIndex = dir < 0 ? levelIndex - 1 : levelIndex + 1; var nextLevel = levels[nextLevelIndex]; currentLevel.TransitTo(nextLevel, transitionSpeed, TransitionCompleted); currentLevel = nextLevel; } }
// Use this for initialization void Start() { levels = transform.GetComponentsInChildren <LevelBehaviour>(); LevelBehaviour preview = levels[0]; foreach (var level in levels.Skip(1)) { level.SetRotatorFor(preview); preview = level; } currentLevel = levels[0]; currentLevel.SetPlatform(platform.transform); }
public void SignalLevel(LevelBehaviour level, int dir) { if (progressing) { queredLevel = level; queredDir = dir; return; } else { SetLevel(level, dir); } }
void Update() { if (!progressing && locks == 0) { if (queredLevel != null) { SetLevel(queredLevel, queredDir); queredLevel = null; } else { if (Time.fixedTime - completedTime > pauseDuration) { SetLevel(currentLevel, -1); } } } }
Quaternion GetGoalLocalRotation(LevelBehaviour level) { return(WorldToLocalRotation(Quaternion.LookRotation(level.rotator.position - rotator.position))); }
public void TransitTo(LevelBehaviour level, float speedDegrees, Action completedCallback) { endPoint = GetGoalLocalRotation(level); TransitTo(endPoint, speedDegrees, completedCallback); }
public void SetRotatorFor(LevelBehaviour level) { rotator.localRotation = GetGoalLocalRotation(level); }