Esempio n. 1
0
    ///To be run on client
    public override IEnumerator Process()
    {
//		Logger.Log("Processed " + ToString());
        yield return(WaitFor(SubjectPlayer));

        if (NetworkObject == null)
        {
            yield break;
        }
        RegisterPlayer registerPlayer = NetworkObject.GetComponent <RegisterPlayer>();

        if (!registerPlayer)
        {
            yield break;
        }
        if (Upright)
        {
            registerPlayer.GetUp();
        }
        else
        {
            registerPlayer.LayDown();
        }
    }
Esempio n. 2
0
    public void ServerPerformInteraction(HandApply interaction)
    {
        GameObject target    = interaction.TargetObject;
        GameObject performer = interaction.Performer;

        // Direction for lerp
        Vector2 dir = (target.transform.position - performer.transform.position).normalized;

        WeaponNetworkActions wna = performer.GetComponent <WeaponNetworkActions>();

        // If we're not on help intent we deal damage!
        // Note: this has to be done before the stun, because otherwise if we hit ourselves with an activated stun baton on harm intent
        // we wouldn't deal damage to ourselves because CmdRequestMeleeAttack checks whether we're stunned
        bool helpIntent = interaction.Performer.GetComponent <PlayerMove>().IsHelpIntent;

        if (!helpIntent)
        {
            // Direction of attack towards the attack target.
            wna.CmdRequestMeleeAttack(target, gameObject, dir, interaction.TargetBodyPart, LayerType.None);
        }

        RegisterPlayer registerPlayerVictim = target.GetComponent <RegisterPlayer>();

        // Stun the victim. We checke whether the baton is activated in WillInteract
        if (registerPlayerVictim)
        {
            registerPlayerVictim.Stun(stunTime);
            SoundManager.PlayNetworkedAtPos(stunSound, target.transform.position);

            // Special case: If we're on help intent (only stun), we should still show the lerp (unless we're hitting ourselves)
            if (helpIntent && performer != target)
            {
                wna.RpcMeleeAttackLerp(dir, gameObject);
            }
        }
    }
Esempio n. 3
0
 public void Awake()
 {
     playerNetworkActions = GetComponent <PlayerNetworkActions>();
     registerPlayer       = GetComponent <RegisterPlayer>();
     Observers.Add(this.gameObject);
 }
Esempio n. 4
0
 public void SetRegisterPlayer(RegisterPlayer registerPlayer)
 {
     player = registerPlayer;
 }
Esempio n. 5
0
 public void Awake()
 {
     playerNetworkActions = GetComponent <PlayerNetworkActions>();
     registerPlayer       = GetComponent <RegisterPlayer>();
 }
 /// <summary>
 /// Defines a relationship in which the onObservationEnded action is invoked when
 /// the storage is no longer allowed to be observed by the observer.
 /// </summary>
 /// <param name="observedStorage">interactable storage being observed</param>
 /// <param name="observer">player who is trying to observe the storage</param>
 /// <param name="maxRange">max range allowed for continued observation</param>
 /// <param name="onObservationEnded">invoked when relationship is ended</param>
 public static ObserveStorageRelationship Observe(InteractableStorage observedStorage, RegisterPlayer observer,
                                                  float maxRange, Action <ObserveStorageRelationship> onObservationEnded)
 {
     return(new ObserveStorageRelationship(observedStorage, observer, maxRange, onObservationEnded));
 }
Esempio n. 7
0
    public void OnInventoryMoveServer(InventoryMove info)
    {
        // NamedSlot slot = wearType == WearType.hardsuit ? NamedSlot.outerwear : NamedSlot.feet;

        //Wearing
        if (info.ToSlot != null && info.ToRootPlayer)
        {
            var toPlayer = info.ToPlayer;

            if (toPlayer == null)
            {
                return;
            }

            var mind = toPlayer.PlayerScript.mind;

            if (mind != null && mind.StepSound == SoundChange)
            {
                mind.StepSound = null;
            }
        }

        //taking off
        if (info.FromSlot != null && info.FromPlayer)
        {
            var fromPlayer = info.FromPlayer;

            if (fromPlayer == null)
            {
                return;
            }

            var mind = fromPlayer.PlayerScript.mind;

            if (mind != null && mind.StepSound == null)
            {
                Player         = info.ToPlayer;
                mind.StepSound = SoundChange;
            }
        }



        //Wearing
        // if (info.ToSlot != null && info.ToSlot?.NamedSlot != null)
        // {
        // var mind = info.ToRootPlayer.PlayerScript.mind;
        // if(mind != null && info.ToSlot.NamedSlot == slot)
        // {
        // TryChange(mind, info.ToSlot.NamedSlot, info.ToPlayer);
        // }
        // }
        //taking off
        // if (info.FromSlot != null && info.FromSlot?.NamedSlot != null)
        // {
        // var mind = info.FromPlayer.PlayerScript.mind;
        // if(mind != null && info.FromSlot.NamedSlot == slot)
        // {
        // TryChange(mind, info.FromSlot.NamedSlot, info.FromPlayer, true);
        // }
        // }
    }
Esempio n. 8
0
        public void ServerPerformInteraction(HandApply interaction)
        {
            GameObject target    = interaction.TargetObject;
            GameObject performer = interaction.Performer;

            // Direction for lerp
            Vector2 dir = (target.transform.position - performer.transform.position).normalized;

            WeaponNetworkActions wna = performer.GetComponent <WeaponNetworkActions>();
            ToggleableEffect     toggleableEffect = gameObject.GetComponent <ToggleableEffect>();

            // If we're on harm intent we deal damage!
            // Note: this has to be done before the teleport, otherwise the target may be moved out of range.
            if (interaction.Intent == Intent.Harm &&
                (toggleableEffect.CurrentWeaponState == ToggleableEffect.WeaponState.Off ||
                 toggleableEffect.CurrentWeaponState == ToggleableEffect.WeaponState.NoCell))
            {
                // Direction of attack towards the attack target.
                wna.ServerPerformMeleeAttack(target, dir, interaction.TargetBodyPart, LayerType.None);
                return;                 //Only do damage to the target, do not do anything afterwards.
            }
            //If the thing is off on any intent, tell the player that it won't do anything.
            else if (toggleableEffect.CurrentWeaponState == ToggleableEffect.WeaponState.Off ||
                     toggleableEffect.CurrentWeaponState == ToggleableEffect.WeaponState.NoCell)
            {
                Chat.AddActionMsgToChat(interaction.Performer,
                                        $"You attempt to prod {interaction.TargetObject.ExpensiveName()} but the {gameObject.ExpensiveName()} was off!",
                                        $"{interaction.Performer.ExpensiveName()} prods {interaction.TargetObject.ExpensiveName()}, luckily the {gameObject.ExpensiveName()} was off!");
                SoundManager.PlayNetworkedAtPos(CommonSounds.Instance.Tap, gameObject.RegisterTile().WorldPosition);
                return;
            }

            if (canEffect && hasBattery)
            {
                if (Battery.Watts >= chargeUsage)
                {
                    Battery.Watts -= chargeUsage;
                }
                else
                {
                    if (toggleableEffect != null)
                    {
                        toggleableEffect.TurnOff();
                    }

                    timer     = cooldown;
                    canEffect = false;
                }
            }

            RegisterPlayer registerPlayerVictim = target.GetComponent <RegisterPlayer>();

            // Teleport and stun the victim (if needed). We check if there is a cooldown preventing the attacker from effecting the victim.
            if (registerPlayerVictim && canEffect)
            {
                // deactivates the weapon and makes you wait.
                if (cooldown != 0)
                {
                    canEffect = false;
                    timer     = cooldown;
                }

                if (canStun)
                {
                    registerPlayerVictim.ServerStun(stunTime);
                }

                if (canTeleport)
                {
                    TeleportUtils.ServerTeleportRandom(target, minTeleportDistance, maxTeleportDistance, avoidSpace, avoidImpassable);
                }

                SoundManager.PlayNetworkedAtPos(useSound, target.transform.position, sourceObj: target.gameObject);

                // Special case: If we're off harm intent (only teleporting and/or stunning), we should still show the lerp (unless we're hitting ourselves).
                if (interaction.Intent != Intent.Harm && performer != target)
                {
                    wna.RpcMeleeAttackLerp(dir, gameObject);
                }
            }
            else if (!canEffect)
            {
                if (coolDownMessage)
                {
                    return;
                }
                coolDownMessage = true;
                if (hasBattery)
                {
                    if (Battery.Watts >= chargeUsage)
                    {
                        Chat.AddExamineMsg(performer, $"{gameObject.ExpensiveName()} is on cooldown.");
                    }
                    else
                    {
                        Chat.AddExamineMsg(performer, $"{gameObject.ExpensiveName()} is out of power.");
                    }
                }
                else
                {
                    Chat.AddExamineMsg(performer, $"{gameObject.ExpensiveName()} is on cooldown.");
                }
            }
        }
Esempio n. 9
0
 public void Cross(RegisterPlayer registerPlayer)
 {
     crossed.Invoke(registerPlayer);
 }