void Collide(Transform trans, Vector3 point, Vector3 normal) { bool playerWasHit = DoDamageTo(trans, point); if (playerWasHit) { ScreenSpaceDebug.AddMessage("HIT", point, Color.green); } if (recoil > 0) { DoRecoil(point, playerWasHit); } if (playerWasHit) { EffectsScript.ExplosionHit(point, Quaternion.LookRotation(normal)); } else { EffectsScript.Explosion(point, Quaternion.LookRotation(normal)); } dead = true; Destroy(GetComponent <Rigidbody>()); GetComponent <Renderer>().enabled = false; }
private void CheckTargets() { for (int i = targets.Count - 1; i >= 0; i--) { if (targets[i].Script != null) { ScreenSpaceDebug.AddMessageOnce(targets[i].LockStrength.ToString(), targets[i].Script.transform.position); if (targets[i].NeedsLockSent) { targets[i].Script.GetTargetedBy(playerScript); targets[i].TimeSinceLastLockSend = 0f; } if (targets[i].WasLocked && !targets[i].Locked) { targets[i].Script.GetUntargetedBy(playerScript); } if (targets[i].LockStrength <= Mathf.Epsilon) { targets.RemoveAt(i); } else { targets[i].WasLocked = targets[i].Locked; } } else { targets.RemoveAt(i); } } }
public void DoDamageOwner( int damage, Vector3 point, PlayerPresence instigator) { ScreenSpaceDebug.AddMessage("DAMAGE", point, Color.red); if ( !dead ) { if (invulnerable) return; Shield -= damage; timeUntilShieldRegen = shieldRegenTime; if(Shield < 0) { Health += Shield; Shield = 0; } if(Health <= 0) { Health = 0; dead = true; PlayDeathPrefab(); GetComponent<PlayerScript>().RequestedToDieByOwner(instigator); Camera.main.GetComponent<WeaponIndicatorScript>().CooldownStep = 0; } } }
public void Awake() { Instance = this; Messages = new List <Message>(); LineMessages = new Dictionary <int, LineMessage>(); AnonymousMessages = new List <LineMessage>(); KeysCache = new List <int>(); DefaultLabelStyle = new GUIStyle(Skin.label) { }; }
public void Update() { MessageLog.Update(); if (CurrentServer != null) { if (Input.GetKeyDown("f8")) { uLink.Network.Disconnect(); } } // Hide/show options if (Input.GetKeyDown(KeyCode.Escape) && !MessageLog.HasInputOpen) { ShowOptions = !ShowOptions; } if (CurrentServer == null) { TimeUntilRefresh -= Time.deltaTime; if (TimeUntilRefresh <= 0f) { TimeUntilRefresh += TimeBetweenRefreshes; ExternalServerList.Refresh(); } OptionsMenu.ShouldDisplaySpectateButton = false; } // TODO this generates a lot of garbage, probably should be removed down the line... var sb = new StringBuilder(); sb.AppendLine(PlayerScript.UnsafeAllEnabledPlayerScripts.Count + " PlayerScripts"); sb.Append(PlayerPresence.UnsafeAllPlayerPresences.Count + " PlayerPresences"); ScreenSpaceDebug.AddLineOnce(sb.ToString()); for (int i = 0; i < PlayerScript.UnsafeAllEnabledPlayerScripts.Count; i++) { var character = PlayerScript.UnsafeAllEnabledPlayerScripts[i]; var presenceName = character.Possessor == null ? "null" : character.Possessor.Name; ScreenSpaceDebug.AddLineOnce("Character: " + character.name + " possessed by " + presenceName); } for (int i = 0; i < PlayerPresence.UnsafeAllPlayerPresences.Count; i++) { var presence = PlayerPresence.UnsafeAllPlayerPresences[i]; var characterName = presence.Possession == null ? "null" : presence.Possession.name; ScreenSpaceDebug.AddLineOnce("Presence: " + presence.Name + " possessing " + characterName); } OptionsMenu.Update(); //Cursor.visible = !PlayerScript.lockMouse; }
private void ReceiveStoppedBeingLockedOnBy(PlayerScript enemy) { // ReSharper disable once ConditionIsAlwaysTrueOrFalse // ReSharper disable once HeuristicUnreachableCode if (this == null) { return; } if (networkView.isMine && enemy != null) { ScreenSpaceDebug.AddMessage("UNTARGETED BY", enemy.transform.position); } }
private void ReceiveStartedBeingLockedOnBy(PlayerScript enemy) { // Sometimes unity will call an RPC even if 'this' has already been // 'destroyed', and because unity overloads null comparison to mean // 'destroyed', well, we're going to do this check. Great. // ReSharper disable once ConditionIsAlwaysTrueOrFalse // ReSharper disable once HeuristicUnreachableCode if (this == null) { return; } // Also check if enemy is null, might have been destroyed by the time // this RPC is called. if (networkView.isMine && enemy != null) { ScreenSpaceDebug.AddMessage("TARGETED BY", enemy.transform.position); } }
public void Update() { if (networkView.isMine) { WeaponIndicatorScript.Instance.ShouldRender = Possession != null; UpdateShouldCameraSpin(); Relay.Instance.OptionsMenu.ShouldDisplaySpectateButton = !IsSpectating; if (Possession == null) { if (Input.GetButtonDown("Fire") && !IsSpectating) { IndicateRespawn(); } } // Update player labels if (Camera.current != null) { foreach (var playerScript in PlayerScript.UnsafeAllEnabledPlayerScripts) { if (playerScript == null) { continue; } Vector3 position = Camera.current.WorldToScreenPoint(InfoPointForPlayerScript(playerScript)); Vector2 prevScreenPosition; if (!LastGUIDebugPositions.TryGetValue(playerScript, out prevScreenPosition)) { prevScreenPosition = (Vector2)position; } Vector2 newScreenPosition = Vector2.Lerp(prevScreenPosition, (Vector2)position, 1f - Mathf.Pow(0.0000000001f, Time.deltaTime)); LastGUIDebugPositions[playerScript] = newScreenPosition; } } IsDoingMenuStuff = Relay.Instance.MessageLog.HasInputOpen; // Debug visibility info for other playerscripts if (Possession != null) { foreach (var character in PlayerScript.UnsafeAllEnabledPlayerScripts) { if (character != Possession) { bool canSee = Possession.CanSeeOtherPlayer(character); if (canSee) { ScreenSpaceDebug.AddMessageOnce("VISIBLE", character.transform.position); } } } } // Leaderboard show/hide // Always show when not possessing anything // Never show when already showing options screen if (Possession == null || TimeToHoldLeaderboardFor >= 0f) { Server.Leaderboard.Show = true; } // Otherwise, show when holding tab else { Server.Leaderboard.Show = Input.GetKey("tab") && !Relay.Instance.ShowOptions; } TimeToHoldLeaderboardFor -= Time.deltaTime; // TODO test this in a multiplayer environment // if game is no longer active, i.e., round end or host forced end, then if (!this.Server.IsGameActive) { // force mouse state to be unlocked //playerScript.lockMouse = false; Cursor.visible = true; Cursor.lockState = CursorLockMode.None; } //if (!Relay.Instance.ShowOptions && Possession != null && !ShouldDisplayJoinPanel) // playerScript.lockMouse = true; // if (ShouldDisplayJoinPanel || Relay.Instance.ShowOptions || !Server.IsGameActive) // playerScript.lockMouse = false; // Update ping Ping = uLink.Network.GetAveragePing(Server.networkView.owner); } if (Possession != null) { // toggle bubble Possession.TextBubbleVisible = IsDoingMenuStuff; } if (Input.GetKeyDown("f11")) { ScreenSpaceDebug.LogMessageSizes(); } TimeSinceLastRespawnRequest += Time.deltaTime; }