void Start() { //var playersToCreate = PlayersState.INSTANCE.GetPlayers(); var playersToCreate = PlayersState.INSTANCE.PlayerInfos; if (playersToCreate.Count == 0) { Debug.Log("0 Players joined the game"); return; } //var spawnPointManager = GameObject.FindObjectOfType<SpawnPointManager>(); var allPlayerSettings = new List <PlayerSettings>(playersToCreate.Count); for (var i = 0; i < playersToCreate.Count; i++) { var playerMenuSettings = playersToCreate[i]; allPlayerSettings.Add( AddPlayer( playerMenuSettings.Number, playerMenuSettings.Color, GetNextSpawnPoint() ) ); } AFEventManager.INSTANCE.PostEvent(AFEvents.PlayersAllCreated(allPlayerSettings)); }
private void CollisionHandler(JCollider thisBody, JCollider otherBody) { var playerHealth = otherBody.GetComponent <PlayerHealth>(); var otherColor = settings.color; if (playerHealth != null) { var playerSettings = otherBody.GetComponent <PlayerSettings>(); otherColor = playerSettings.color; if (playerHealth.DoDamage(settings.Damage)) { AFEventManager.INSTANCE.PostEvent(AFEvents.Kill(settings.PlayerOwnerNumber, playerSettings.playerNumber)); } } else { Debug.Log("Bullet hit something else.."); } if (playerHealth != null || settings.DestroyOnAnyOverlap) { Debug.Log("Time to destroy bullet"); var hitParticles = Instantiate(settings.hitParticlesPrefab, transform.position, transform.rotation); var colorModule = hitParticles.colorOverLifetime; colorModule.enabled = true; ParticleSystem.MinMaxGradient gradient = new ParticleSystem.MinMaxGradient(settings.color, otherColor); var mainModule = hitParticles.main; mainModule.startColor = gradient; Destroy(gameObject); } }
void Update() { if (!playerInput.InputIsFresh) { return; } timeSinceLastFire += Time.deltaTime; var tryToDropBomb = UsePlayerInput ? playerInput.input.Fire2 : false; if (BombDropped && tryToDropBomb) { AFEventManager.INSTANCE.PostEvent(AFEvents.BombTrigger(settings.playerNumber, true)); } else if (tryToDropBomb && timeSinceLastFire >= minTimeBetweenFire) { timeSinceLastFire = 0; BombDropped = true; var newBomb = Instantiate(bombPrefab, transform.position, transform.rotation); newBomb.PlayerOwnerNumber = settings.playerNumber; newBomb.color = settings.color; } }
private void HandleGameOver() { Debug.Log("Game over"); var winningPlayer = currentRoundScores.SortedByDescendingScores()[0]; AFEventManager.INSTANCE.PostEvent(AFEvents.GameOver(winningPlayer.PlayerNumber(), winningPlayer.Score(), winningPlayer.PlayerColor())); }
void Update() { var input = playerInputComponent.input; if (!startDelayManager.IsAwaiting && input.JoinLeave) { AFEventManager.INSTANCE.PostEvent(AFEvents.PauseMenuEnable(playerSettings.playerNumber, playerSettings.color)); } }
private void TriggerExplosionDueToLifeTime() { if (AlreadyTriggered) { return; } AFEventManager.INSTANCE.PostEvent(AFEvents.BombTrigger(settings.PlayerOwnerNumber, false)); TriggerExplosion(); }
// returns true if player is killed, false otherwise public bool DoDamage(int damage) { healthLeft -= damage; if (healthLeft <= 0) { healthLeft = 0; Debug.Log("Player " + settings.playerNumber + " died!"); AFEventManager.INSTANCE.PostEvent(AFEvents.HealthDamage(settings.playerNumber, damage, healthLeft)); PlayerDeathManager.instance.RegisterPlayerDeath(settings); return(true); } AFEventManager.INSTANCE.PostEvent(AFEvents.HealthDamage(settings.playerNumber, damage, healthLeft)); return(false); }
void HandlePlayerKilledEvent(KilledEventPayload payload) { var killerScore = currentRoundScores.GetScoreForPlayer <UndeadScore>(payload.playerNumberOfKiller); var killedScore = currentRoundScores.GetScoreForPlayer <UndeadScore>(payload.playerNumberOfKilledPlayer); if (killerScore.Undead && killedScore.Undead) { // Undead player killed another undead player. // This is uninteresting. Won't generate a Scoring event return; } if (payload.playerNumberOfKilledPlayer == payload.playerNumberOfKiller) { // Player killed itself, should become undead. Won't generate a Scoring event killedScore.Undead = true; MakeUndead(PlayerFetcher.FindPlayerByPlayerNumber(killedScore.PlayerNumber())); } else { // Player killed another player. Will generate a Scoring event var scoreForKillV2 = killerScore.Undead ? UndeadKillPoints : AliveKillPoints; killerScore.IncreaseScoreBy(scoreForKillV2); if (!killedScore.Undead) { killedScore.Undead = true; MakeUndead(PlayerFetcher.FindPlayerByPlayerNumber(killedScore.PlayerNumber())); } AFEventManager.INSTANCE.PostEvent(AFEvents.Score(payload.playerNumberOfKiller, killerScore.Score(), killerScore.Score())); } killedScore.Deaths++; if (currentRoundScores.DoTrueForAllCheck(score => ((UndeadScore)score).Undead)) { if (IsEntireGameOver()) { Debug.Log("Game over, all players are undead!"); var winningScoreForRound = currentRoundScores.SortedByDescendingScores()[0]; AFEventManager.INSTANCE.PostEvent(AFEvents.GameOver(winningScoreForRound.PlayerNumber(), winningScoreForRound.Score(), winningScoreForRound.PlayerColor())); } else { Debug.Log("Round over, all players are undead!"); var winningScore = currentRoundScores.SortedByDescendingScores()[0]; AFEventManager.INSTANCE.PostEvent(AFEvents.RoundOver(winningScore.PlayerNumber(), winningScore.Score(), winningScore.PlayerColor())); } } }
public bool HandleEvent(AFEvent afEvent) { switch (afEvent.type) { case AFEventType.KILLED: { HandlePlayerKilledEvent((KilledEventPayload)afEvent.payload); return(true); } case AFEventType.PLAYERS_ALL_CREATED: { var payload = (PlayersAllCreatedPayload)afEvent.payload; HandleGameStart(payload.AllPlayers); return(true); } case AFEventType.COUNT_DOWN_FINISHED: { var payload = (CountDownFinishedPayload)afEvent.payload; if (!payload.TimerName.Equals(RoundTimerName)) { break; } countDownTimerInstance.StopTimer(); if (IsEntireGameOver()) { Debug.Log("Game over, time ran out!"); var winningScore = currentRoundScores.SortedByDescendingScores()[0]; AFEventManager.INSTANCE.PostEvent(AFEvents.GameOver(winningScore.PlayerNumber(), winningScore.Score(), winningScore.PlayerColor())); } else { Debug.Log("Round over, time ran out!"); var winningScore = currentRoundScores.SortedByDescendingScores()[0]; AFEventManager.INSTANCE.PostEvent(AFEvents.RoundOver(winningScore.PlayerNumber(), winningScore.Score(), winningScore.PlayerColor())); } break; } case AFEventType.GAME_START: { countDownTimerInstance.StartTimer(); break; } } return(false); }
private void ReEnablePlayer(PlayerSettings playerSettings) { playerSettings.GetComponent <PlayerHealth>().ResetHealth(); var playerHealth = playerSettings.GetComponent <PlayerHealth>(); playerHealth.ResetHealth(); AFEventManager.INSTANCE.PostEvent(AFEvents.Respawn(playerSettings.playerNumber, playerHealth.HealthLeft)); EnableOrDisablePlayer(playerSettings, true); var newSpawnPoint = spawnPointManager.GetNextSpawnPoint(); var pTransform = playerSettings.transform; pTransform.position = newSpawnPoint.position; pTransform.rotation = newSpawnPoint.rotation; }
private void AddUIForAllPlayers(List <PlayerSettings> players) { var width = entireMenuBarUIArea.rect.width / players.Count; for (var i = 0; i < players.Count; i++) { var player = players[i]; var uiPlayerElementInstance = Instantiate(uiPlayerElementPrefab, entireMenuBarUIArea); uiPlayerElementInstance.BackgroundColor = new Color(player.color.r, player.color.g, player.color.b, uiPlayerElementInstance.BackgroundColor.a); uiPlayerElementInstance.PlayerNumber = player.playerNumber; uiPlayerElementInstance.Position = new Vector3(i * width + 0.5f * width, 0f, 0f); uiPlayerElementInstance.health = player.MaxHealth; playerToUiElement.Add(player.playerNumber, uiPlayerElementInstance); AFEventManager.INSTANCE.PostEvent(AFEvents.PlayerMenuBarUICreated(player.playerNumber)); } }
public void TriggerExplosion() { if (AlreadyTriggered) { return; } AlreadyTriggered = true; var colliders = colliderManager.FindOverlaps(collider); var playerCollidersCount = 0; for (var i = 0; i < colliders.Count; i++) { var playerSettings = colliders[i].GetComponent <PlayerSettings>(); var playerHealth = colliders[i].GetComponent <PlayerHealth>(); var playerPhysics = colliders[i].GetComponent <PlayerPhysics>(); if (playerSettings != null && playerHealth != null && playerPhysics != null) { playerCollidersCount++; var explosionDirection = (playerSettings.transform.position - transform.position); var distance = explosionDirection.magnitude; var centerDistanceMultiplier = 1f - distance / settings.BlastRadius; var blastDamage = Mathf.Max(1, Mathf.RoundToInt(settings.BlastDamage * centerDistanceMultiplier)); var blastDamageMultiplier = settings.BlastDamage / settings.MaxBlastDamageSetting; var resultingSpeed = playerPhysics.Speed * playerPhysics.MovementDirection + explosionDirection.normalized * settings.BlastAcceleration * settings.BlastAccelerationDuration * centerDistanceMultiplier * blastDamageMultiplier; playerPhysics.Speed = resultingSpeed.magnitude; playerPhysics.MovementDirection = resultingSpeed.normalized; if (playerHealth.DoDamage(blastDamage)) { AFEventManager.INSTANCE.PostEvent(AFEvents.Kill(settings.PlayerOwnerNumber, playerSettings.playerNumber)); } } } AFEventManager.INSTANCE.RemoveListener(this); var explosionParticles = Instantiate(explosionParticlesPrefab, transform.position, transform.rotation); var particlesMainModule = explosionParticles.main; particlesMainModule.startColor = settings.color; Destroy(gameObject); }
public void AttachWeapon(Weapon weaponPrefab, WeaponUpgradePath upgradePath) { var weaponInstance = Instantiate(weaponPrefab, transform); weaponInstance.bulletColor = settings.color; weaponInstance.PlayerNumber = settings.playerNumber; if (activeWeaponInstance != null) { Destroy(activeWeaponInstance.gameObject); } activeWeaponInstance = weaponInstance; ActiveWeaponUpgradePath = upgradePath; AFEventManager.INSTANCE.PostEvent(AFEvents.WeaponUpgrade( settings.playerNumber, upgradePath.UpgradeProgress, upgradePath.UpgradeColor )); }
private bool HandleKilledEvent(KilledEventPayload payload) { if (payload.playerNumberOfKiller == payload.playerNumberOfKilledPlayer) { // Player killed itself, no score event generated for this... return(false); } var playerScore = currentRoundScores.GetScoreForPlayer <SimpleScore>(payload.playerNumberOfKiller); var newScore = playerScore.IncreaseScoreBy(1); AFEventManager.INSTANCE.PostEvent(AFEvents.Score(payload.playerNumberOfKiller, newScore, maxScore)); if (newScore == maxScore) { countDownTimerInstance.StopTimer(); HandleGameOver(); } //if (playerScores.ContainsKey(payload.playerNumberOfKiller)) //{ // var oldScore = playerScores[payload.playerNumberOfKiller]; // var newScore = oldScore + 1; // playerScores[payload.playerNumberOfKiller] = newScore; // AFEventManager.INSTANCE.PostEvent(AFEvents.Score(payload.playerNumberOfKiller, newScore, maxScore)); // if (newScore == maxScore) // { // countDownTimerInstance.StopTimer(); // HandleGameOver(); // } //} //else //{ // playerScores.Remove(payload.playerNumberOfKilledPlayer); //} return(false); }
void NotifyCountDownFinished() { timeLeft = 0; UpdateText(); AFEventManager.INSTANCE.PostEvent(AFEvents.ContDownOver(TimerName)); }
void NotifyGameCanStart() { AFEventManager.INSTANCE.PostEvent(AFEvents.GameStart()); }