public void LoadTo(IHackable hackable) { if (hackable.GetGameObject().name.ToString() != name) { Debug.LogError("No such IHackable found to load."); return; } if (isHacked) { hackable.Hack(); } }
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."); }
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; }
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); } }
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"); } }
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(); }