private void Update() { if (ErrorManager.HasError) { return; } DisposeDistance = SetDisposeDistance; MinDisposeMultiply = SetMinDisposeMultiply; GenerateDistance = SetGenerateDistance; MaxGeneratePlatforms = SetMaxGeneratePlatforms; Runner.PlayerController player = Player.Current; if (player == null) { ErrorManager.Show("ERROR", "player == null"); return; } float moveSpeed = Player.Speed * Time.deltaTime; Player.Move(moveSpeed); Generator.Generate(moveSpeed, player); Platforms.Move(moveSpeed, player); DisposedManager.Update(player); Missions.Dispatch("run", player.Distance); }
public void Move(float speed, Runner.PlayerController player) { var result = from c in _platforms.List where c.transform.position.z < player.transform.position.z select c; foreach (var current in result) { current.AllowDispose = true; _disposedManager.Add(current); } }
public void Update(Runner.PlayerController player) { List <Runner.PlatformObject> collection = children.List; var len = collection.Count; Runner.PlatformObject platform = null; var distance = player.gameObject.transform.position; for (var i = 0; i < len; i++) { platform = collection[i]; if (platform.AllowDispose == false) { if (platform.transform.position.z < distance.z) { platform.AllowDispose = true; Add(platform); } else { break; } } } len = list.Count; var index = 0; float currentDistance; float halfPlatformSize; while (index < len) { platform = list[index]; currentDistance = Mathf.Abs(platform.transform.position.Distance(ref distance)); halfPlatformSize = platform.Size.z / 2; if (currentDistance >= LocationManager.DisposeDistance && currentDistance > halfPlatformSize * LocationManager.MinDisposeMultiply) { index++; platform.AllowDispose = false; children.Remove(platform); } else { break; } } if (index > 0) { list.RemoveRange(0, index); } }
public void Move(float move, Runner.PlayerController player) { vectorHelper.Set(0, 0, -move); var len = list.Count; Runner.PlatformObject p; float distance; for (var i = 0; i < len; i++) { p = list[i]; p.Move(vectorHelper); distance = p.Distance(player); } }
public void Generate(float speed, Runner.PlayerController player) { Runner.PlatformObject platform = _platforms.Last; bool isStartPlatform = false; if (platform == null) { platform = _platformsManager.GetRandomStartPlatform(Runner.PlayerData.PlatformType); isStartPlatform = true; if (platform == null) { ErrorManager.Show("empty start platform", "add start platforms"); return; } PlayerData.PlatformTypeRemainingDistance = _platformsManager.GetDistanceByType(platform.Type); _next = platform.GetNextRandom(); _platforms.Add(platform); } float distance = platform.Distance(player); Vector3 size; int count = 0; while (distance <= LocationManager.GenerateDistance && count < Runner.LocationManager.MaxGeneratePlatforms) { int nextType = -1; if (PlayerData.PlatformTypeRemainingDistance <= 0.0f && isStartPlatform == false) { nextType = _platformsManager.GetTypeByDistance(player.Distance, PlayerData.PlatformType, Random.Range(0, 2) > 0); if (nextType == -1) { nextType = platform.Type; } if (nextType != PlayerData.PlatformType) { _next = _platformsManager.GetTransitionPlatform(PlayerData.PlatformType, nextType); } if (_next == null) { _next = _platformsManager.GetRandomPlatformByTypeAndDistance(PlayerData.PlatformType, player.Distance); } PlayerData.PlatformType = nextType; PlayerData.PlatformTypeRemainingDistance += _platformsManager.GetDistanceByType(nextType); } else { _next = _next != null ? _next : _platformsManager.GetRandomPlatformByTypeAndDistance(PlayerData.PlatformType, _player.Distance); } _platformsManager.GetSize(out size, platform); vectorHelper.x = 0; vectorHelper.y = 0; vectorHelper.z = size.z - size.z / 2; _next.transform.position = platform.transform.position + vectorHelper; platform = _next; _platformsManager.GetSize(out size, platform); vectorHelper.x = 0; vectorHelper.y = 0; vectorHelper.z = size.z - size.z / 2; platform.transform.position += vectorHelper; distance = platform.Distance(player); _platforms.Add(platform); _next = platform.GetNextRandom(); count++; } }