public void LoadTo(IHackable hackable)
        {
            if (hackable.GetGameObject().name.ToString() != name)
            {
                Debug.LogError("No such IHackable found to load.");
                return;
            }

            if (isHacked)
            {
                hackable.Hack();
            }
        }
Esempio n. 2
0
        private void Awake()
        {
            _anim               = GetComponent <Animator>();
            _layerMask          = 1 << LayerMask.NameToLayer(Layer.Hackable);
            _objectHacking      = null;
            _currentHackingTime = 0f;
            isHacking           = false;
            canHack             = false;

            _line = GetComponentInChildren <LineRenderer>();
            NullChecker(_anim, "Animator is missing. Please attach it to the object.");
            NullChecker(_line, "Line renderer is missing. Please attach it to child.");
            NullChecker(hackLineStartPos, "hackLineStartPos is missing. Please add reference.");
        }
Esempio n. 3
0
        private IEnumerator HackStopped()
        {
            _anim.SetBool(AnimationParams.HackingStance, false);
            _anim.SetBool(AnimationParams.Hacking, false);
            AudioManager.Instance.Stop(AudioClipName.Hacking);
            PlayerMovement.Instance.canMove = true;
            _line.enabled  = false;
            canHack        = false;
            isHacking      = false;
            _objectHacking = null;

            PlayerUi.Instance.RestoreHack(timeBetweenHacks);
            yield return(new WaitForSeconds(timeBetweenHacks));

            canHack = true;
        }
Esempio n. 4
0
    void Update()
    {
        EquippedHackDisplay.text = ActiveHack.DisplayName;

        RaycastHit hit;
        bool       didHit = Physics.SphereCast(transform.position, SpherecastRadius, transform.forward, out hit, Mathf.Infinity, HackRayLayers, QueryTriggerInteraction.Ignore);

        bool hackableTarget = didHit &&
                              ((1 << hit.collider.gameObject.layer) & HackableLayers) != 0; // layer is in hackable layers

        HackingUIContainer.SetActive(hackableTarget);
        if (!hackableTarget)
        {
            return;
        }

        IHackable target = hit.collider.GetComponentInParent <IHackable>();

        TargetNameDisplay.text = target.HackName;

        // assume target is invalid, do things that are shared in every invalid case:
        ValidityText.color = InvalidColor;
        SubPrompt.text     = OpenHackMenuPrompt;

        // figure out why:
        if (ActiveHack.TargetObjectType != target.HackType)
        {
            ValidityText.text = InvalidTypeVT;
        }
        else if (!ActiveHack.InfiniteRange && Vector3.Distance(DroneMovement.Instance.Position, target.transform.position) > ActiveHack.Range)
        {
            ValidityText.text = OutOfRangeVT;
        }
        // if we assumed wrong:
        else
        {
            ValidityText.text  = TotallyValidVT;
            ValidityText.color = ValidColor;

            SubPrompt.text = UseHackPrompt;
        }

        if (Input.GetButtonDown(UseButton))
        {
            ActiveHack.UseOn(target);
        }
    }
Esempio n. 5
0
    public void UseOn(IHackable target)
    {
        MethodInfo hackMethod = target.GetType().GetMethod(HackMethodName);

        hackMethod.Invoke(target, PassParam ? new object[] { HackMethodParam } : null);

        bool caught  = RandomExtra.Chance(RevealChance);
        bool patched = RandomExtra.Chance(PatchChance);

        if (caught)
        {
            SecurityManager.Instance.Alert = true;
        }
        if (patched)
        {
            InventoryManager.Instance.HacksToBePatched.Add(this);
            Debug.Log("you got patched son");
        }
    }
Esempio n. 6
0
        void Update()
        {
            if (!canHack)
            {
                return;
            }

            //stop hacking when the player turns invisible
            if (isHacking && PlayerInvisibility.Instance.isInvisible)
            {
                StartCoroutine(HackStopped());
                return;
            }

            if (Input.GetButton(InputManager.Hack) && !PlayerInvisibility.Instance.isInvisible)
            {
                _anim.SetBool(AnimationParams.HackingStance, true);
                PlayerMovement.Instance.canMove = false;
                PlayerMovement.Instance.StopMomentum();
                var playerFacingRight = PlayerMovement.Instance.facingRight;

                RaycastHit2D hit = playerFacingRight ?
                                   Physics2D.Raycast(transform.position, Vector2.right, hackDistance, _layerMask) :
                                   Physics2D.Raycast(transform.position, Vector2.left, hackDistance, _layerMask);

                #region Debug Raydrawing
                if (playerFacingRight)
                {
                    Debug.DrawRay(transform.position, Vector2.right * hackDistance);
                }
                else
                {
                    Debug.DrawRay(transform.position, Vector2.left * hackDistance);
                }
                #endregion

                if (!hit)
                {
                    if (_objectHacking != null)
                    {
                        AudioManager.Instance.Play(AudioClipName.HackInterrupted);
                        StartCoroutine(HackStopped());
                    }

                    return;
                }

                var hackableObject = hit.collider.gameObject.GetComponentInParent <IHackable>();
                if (hackableObject == null || hackableObject.IsHacked())
                {
                    return;
                }
                if (hackableObject != _objectHacking)
                {
                    AudioManager.Instance.Play(AudioClipName.Hacking);
                    _objectHacking      = hackableObject;
                    _currentHackingTime = 0f;
                    PlayerUi.Instance.StartHack(hackTimeInSeconds);
                }

                _anim.SetBool(AnimationParams.Hacking, true);
                isHacking            = true;
                _currentHackingTime += Time.deltaTime;

                _line.enabled = true;
                _line.SetPosition(0, hackLineStartPos.position);
                _line.SetPosition(1, hackableObject.GetHackPos().position);
                //Debug.DrawRay(hackLineStartPos.position, hit.collider.transform.position - hackLineStartPos.position);

                if (Math.Abs(_currentHackingTime - hackTimeInSeconds) < 0.01f)
                {
                    LevelManager.Instance.successfulHacks++;
                    _objectHacking.Hacked();
                    StartCoroutine(HackStopped());
                }
            }

            if (Input.GetButtonUp(InputManager.Hack))
            {
                _anim.SetBool(AnimationParams.HackingStance, false);
                PlayerMovement.Instance.canMove = true;
                if (!isHacking)
                {
                    return;
                }
                AudioManager.Instance.Play(AudioClipName.HackInterrupted);
                StartCoroutine(HackStopped());
            }
        }
 public SerializableIHackable(IHackable hackable)
 {
     name     = hackable.GetGameObject().name.ToString();
     isHacked = hackable.IsHacked();
 }