Inheritance: MonoBehaviour
示例#1
0
    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;
            }
        }
    }
示例#4
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)
        {
        };
    }
示例#5
0
    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;
    }
示例#6
0
    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);
        }
    }
示例#7
0
    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);
        }
    }
示例#8
0
    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;
    }