private void OnTriggerEnter2D(Collider2D collision) { PlayerUnitController unit = InteractiveHelpers.GetPlayer(collision); PlayerBaseStats stats = unit.di.stats; PlayerRespawnHandler respawnHandler = unit.mainController.di.respawnHandler; bool playSound = false; foreach ((SlimeType type, bool acceptsType) in checkpointFor.GetPairEnumerable()) { if (acceptsType && stats.HasType(type)) { bool updated = respawnHandler.SetCheckpoint(type, this); if (updated) { playSound = true; } if (!segmentMember.Segment) { segmentMember.Segment = unit.di.camera.CameraSegment; } } } if (playSound) { AudioSingleton.PlaySound(AudioSingleton.Instance.clips.checkpoint); } }
private void RespawnCurrentUnit() { PlayerRespawnHandler respawnHandler = controller.mainController.di.respawnHandler; IPlayerRespawner playerRespawner = respawnHandler.GetCheckpointRespawner(stats.SlimeType); if (playerRespawner.CameraSegment) { camera.CameraSegment = playerRespawner.CameraSegment; } Vector2 respawnPosition = playerRespawner.SpawnPoint; controller.transform.position = respawnPosition; hp.OnRespawn(); physics.velocity.Value = Vector2.zero; }
private void RespawnAssembly() { PlayerRespawnHandler respawnHandler = controller.mainController.di.respawnHandler; IPlayerRespawner kingRespawner = respawnHandler.GetCheckpointRespawner(SlimeType.King); HashSet <SlimeType> respawnSeparately = new HashSet <SlimeType>(); foreach (SlimeType type in SlimeTypeHelpers.GetWithoutKingEnumerable()) { if (stats.HasType(type)) { IPlayerRespawner slimeRespawner = respawnHandler.GetCheckpointRespawner(type); if (slimeRespawner != kingRespawner) { respawnSeparately.Add(type); } } } if (respawnSeparately.Count > 0) { unitHandler.RespawnOutOfAssembly(respawnSeparately); } }