void CarryInput() { if (!Input.GetKeyDown(KeyCode.K)) { return; } if (_canCarry) { // Carry _canCarry = false; _carrying = true; _stateHandler.state = PlayerState.Carrying; _objectCanCarried.Carry(carrier, _spriteRenderer); _objectCollider.isTrigger = true; _carriedObject = _objectCanCarried; _player.speed -= _deltaWeight; _objectCanCarried = null; } else if (_carrying) { // Throw _carrying = false; _carriedObject.transform.SetParent(null); var carriedObjRigid = _carriedObject.GetComponent <Rigidbody2D>(); _carriedObject.startDirection = _directionGetter.direction; _carriedObject.Throw(_directionGetter.direction, throwingForce); // _objectCollider.isTrigger = false; _stateHandler.state = PlayerState.Walking; _player.speed += _deltaWeight; _carriedObject = null; _objectCollider = null; } }
public void Grab() { carriedObject = null; leftHand.isGripped = true; rightHand.isGripped = true; CarryableObject objectCarried = null; if (leftHand.objectToTarget == null && rightHand.objectToTarget != null) { objectCarried = rightHand.objectToTarget; } else if (rightHand.objectToTarget == null && leftHand.objectToTarget != null) { objectCarried = leftHand.objectToTarget; } else if (leftHand.objectToTarget != null && leftHand.objectToTarget == rightHand.objectToTarget) { objectCarried = leftHand.objectToTarget; } if (objectCarried != null) { carriedObject = objectCarried; carriedObject.AttachTo(this); } }
public CarryableObject PickUp() { CarryableObject res = co; co = null; return(res); }
public void ConfirmEnd(CarryableObject co) { if (co == null) { return; } AudioManager.PlayConfirmedObjectSound(); Destroy(co.gameObject); finishedObjects++; if (finishedObjects == currentGoal) { if (DayTimer.Instance.DayNewTasksEnd > DayTimer.Instance.elapsedTime) { currentGoal += levelData.AdditionalObjects; AudioManager.Instance.SwitchMusic(AudioManager.MusicMode.Heavy); } else { DayTimer.Instance.DayHasEnded(); dialogReader.Read(winDialog, ActionsRunner.RunFunctionAsEnumerator(GameManager.GoToNextScene), false); } } GoalInformations.UpdateAll(); }
protected void OnTriggerEnter(Collider other) { if (other.CompareTag(CarryableObject.commonTag)) { CarryableObject co = other.GetComponent <CarryableObject>(); co.CurrentConveyorBeltPart = this; } }
public void ResendToPool(CarryableObject co) { if (co == null) { return; } Destroy(co.gameObject); spawnedObjects--; }
private void GenerateObject() { CarryableObject co = LevelManager.Instance.RequireSpawn(); if (co == null) { return; } co.transform.SetPositionAndRotation(CarryablesAnchor, Quaternion.identity); }
public void Ungrab() { leftHand.isGripped = false; rightHand.isGripped = false; if (carriedObject != null) { carriedObject.Detach(this); carriedObject = null; } }
public CarryableObject RequireSpawn() { if (currentGoal > spawnedObjects) { spawnedObjects++; GameObject toSpawn = levelData.SpawnedObjectsPrefabs[Random.Range(0, levelData.SpawnedObjectsPrefabs.Count)]; CarryableObject co = Instantiate(toSpawn, CarryableObjectsDefaultParent).GetComponent <CarryableObject>(); return(co); } return(null); }
private void PickUp(CarryableObject co) { if (carriedObjects.Count >= capacity) { return; } co.gameObject.transform.SetParent(transform); carriedObjects.Push(co); co.gameObject.transform.SetPositionAndRotation(transform.position + Vector3.up * (carriedObjects.Count + 1) * .75f, transform.rotation); co.OnPickup(); }
public bool Dispose(CarryableObject co) { if (this.co == null && co != null) { this.co = co; co.transform.SetParent(LevelManager.Instance.CarryableObjectsDefaultParent); co.transform.SetPositionAndRotation(CarryablesAnchor, Quaternion.identity); return(true); } return(false); }
public override void TouchAction() { if (seed_object == null) { return; } if (seed_object.is_aloft) { audioSource.Play(); isEnabled = true; DestroyObject(seed_object.gameObject); seed_object = null; Invoke("SetReady", duration); } }
protected virtual void OnTriggerExit(Collider other) { if (other.CompareTag(CarryableObject.commonTag)) { CarryableObject co = other.GetComponent <CarryableObject>(); if (co.CurrentConveyorBeltPart != this) { return; } co.CurrentConveyorBeltPart = null; } }
public void LoadItem(CarryableObject item) { itemHeld = item; item.transform.parent = transform; item.transform.position = this.transform.position; //StartCoroutine(StartHover()); /* * if (this.gameObject.GetComponent<HeldItemRotator>()) { * this.gameObject.GetComponent<HeldItemRotator>().cube = itemHeld.transform; * this.gameObject.GetComponent<HeldItemRotator>().startStartStart(); * * } */ }
void OnCollisionEnter2D(Collision2D other) { var obstacleObj = other.gameObject.GetComponent <CarryableObject>(); if (obstacleObj != null && obstacleObj is Object && !obstacleObj.Equals(null)) { // be able carrying if (_carriedObject != null && _carriedObject is Object && !_carriedObject.Equals(null)) { return; } _canCarry = obstacleObj.canCarry; _objectCanCarried = obstacleObj; _objectCollider = other.collider; } }
private void Update() { selector.transform.position = CubeFrontPosition + selectorOffset; if (Input.GetKeyDown(interactionKey) || Input.GetMouseButtonDown(0)) { List <Collider> foundObjects = new List <Collider>(Physics.OverlapSphere(CubeFrontPosition, .1f)); CarryableObject foundCarryableObject = null; var it = foundObjects.GetEnumerator(); while (it.MoveNext()) { if (it.Current.CompareTag(CarryableObject.commonTag) && foundCarryableObject == null) { foundCarryableObject = it.Current.GetComponent <CarryableObject>(); } if (it.Current.CompareTag(ConveyorBelt.commonTag)) { InteractWithConveyorBelt(it.Current.GetComponent <ConveyorBeltPart>()); return; } if (it.Current.CompareTag(ObjectsHolder.commonTag)) { InteractWithObjectsHolder(it.Current.GetComponent <ObjectsHolder>()); return; } if (it.Current.CompareTag(Phone.commonTag)) { it.Current.GetComponent <Phone>().InteractWith(); return; } } if (foundCarryableObject != null) { PickUp(foundCarryableObject); } else if (it.Current == null) { Dispose(CubeFrontPosition); } } }
void releaseObject() { /* if(heldByPlayerID != PhotonNetwork.player.ID) { * return; * }*/ if (carrying == null) { return; } heldByPlayerID = -1; if (carrying.childCount > 0) { carrying.GetChild(0).SendMessage("playerDropped", SendMessageOptions.DontRequireReceiver); } if (!sliding) { //Check to see if carried object has a special script attatched for dropping it CarryableObject carryableObject = carrying.GetChild(0).GetComponent <CarryableObject>(); //if it does, then execute it if (carryableObject != null) { RaycastHit hit; Physics.Raycast(new Ray(transform.position, transform.forward), out hit); carryableObject.dropObject(hit); } //otherwise just drop it else { carrying.GetChild(0).GetComponent <Collider>().enabled = true; carrying.GetChild(0).GetComponent <Rigidbody>().isKinematic = wasObjectKinematic; //Turn inertia and gravity back on carrying.GetChild(0).transform.parent = carrying.GetChild(0).transform.parent.parent; } Destroy(carrying.gameObject); // accumulates new GO's without this } else { carrying.GetComponent <Rigidbody>().isKinematic = wasObjectKinematic; } carrying = null; sliding = false; setEmAbility(true); }
private void InteractWithObjectsHolder(ObjectsHolder oh) { if (carriedObjects.Count > 0 && oh.Dispose(carriedObjects.Peek())) { carriedObjects.Pop(); return; } else { CarryableObject co = oh.PickUp(); if (co != null) { PickUp(co); } } }
private void Dispose(Vector3 disposePosition) { if (carriedObjects.Count == 0 || CubeFrontPosition == CubePosition) { return; } CarryableObject co = carriedObjects.Pop(); if (co == null) { Dispose(disposePosition); return; } co.gameObject.transform.SetParent(LevelManager.Instance.CarryableObjectsDefaultParent); co.transform.SetPositionAndRotation(disposePosition, Quaternion.identity); co.OnDispose(); }
void OnTriggerEnter(Collider collision) { if (isGripped) { return; } if (objectToTarget != null) { return; } if (collision.gameObject.tag == "Carryable") { CarryableObject co = collision.gameObject.GetComponentInParent <CarryableObject>(); Debug.Log($"{gameObject.name} Can carry a {co.name}"); objectToTarget = co; } }
void OnTriggerExit(Collider collision) { if (isGripped) { return; } if (collision.gameObject.tag == "Carryable") { CarryableObject co = collision.gameObject.GetComponentInParent <CarryableObject>(); Debug.Log($"{gameObject.name} is out of range of {co.name}"); if (objectToTarget == co) { objectToTarget = null; } } }
protected void OnTriggerStay(Collider other) { if (other.CompareTag(CarryableObject.commonTag)) { CarryableObject co = other.GetComponent <CarryableObject>(); if (co.CurrentConveyorBeltPart != this) { return; } if (IsAlignedAlongAxis(co.gameObject)) { co.Move(transform.forward, ParentConveyorBelt.Speed); } else { co.MoveToAlign(CarryablesAnchor, ParentConveyorBelt.Speed); } } }
/* * void FixedUpdate() * { * if (!inCannonAimMode) * { * float moveX = Input.GetAxis("Horizontal"); * float moveZ = Input.GetAxis("Vertical"); * rb.velocity = (transform.TransformDirection(new Vector3(moveX, 0, moveZ) * currSpeed)); * } * } */ #region Player Interaction void PlayerInteract() { //Sets the frame drop to false, so the script recognizes that it doesn't need to skip a frame in all if statements bool droppedThisFrame = false; ///If the player is holding an object and left clicks, while not looking at anything. ///The player sets their held object to null, turns off the parent to the held object, and throws it, resetting its held variables and letting the frame skip if (isHolding && Input.GetMouseButtonDown(0) && !isHoverHolding) { Transform objectHolding = hand.GetChild(0); currentlyHolding = null; Rigidbody tempRb = objectHolding.GetComponent <Rigidbody>(); tempRb.constraints = RigidbodyConstraints.None; tempRb.AddForce(Camera.main.transform.forward * 10, ForceMode.Impulse); tempRb.detectCollisions = true; objectHolding.parent = null; isHolding = false; droppedThisFrame = true; isHoverHolding = false; } //The game's raycast is set to a bool, hit RaycastHit hit; ///If the raycast hits something /// Debug.DrawRay(Camera.main.transform.position, Camera.main.transform.forward, Color.green); if (Physics.Raycast(Camera.main.transform.position, Camera.main.transform.forward, out hit, 500)) { ///If the raycast hits a carryable object, and the player is not holding anything, or hasn't just thrown their object if (hit.collider.tag == "Carryable" && !isHolding && !droppedThisFrame) { CarryableObject tempObj = hit.collider.GetComponent <CarryableObject>(); //textDisplay.text = "Pick up " + tempObj.carryableType; //crosshair.sprite = crossUse; ///If the player clicks while the raycast is hitting a carryable object, and the player isn't holding or hasn't thrown anything ///the object is childed to the player, and the player is now holding something. if (Input.GetMouseButtonDown(0)) { hit.transform.SetParent(hand, true); hit.transform.position = hand.position; currentlyHolding = tempObj.GetComponent <CarryableObject>(); Rigidbody tempRb = hit.collider.GetComponent <Rigidbody>(); tempRb.constraints = RigidbodyConstraints.FreezeAll; tempRb.detectCollisions = false; isHolding = true; isHoverHolding = false; } } ///If the raycast hits a zone that can hold an item and the player is holding an item else if (hit.collider.tag == "ItemZone" && isHolding) { if (currentlyHolding.thisST != Seatable.Nonseatable) { ///The game declares that the player is hovering over something and holding an item isHoverHolding = true; //crosshair.sprite = crossUse; //if (currentlyHolding.carryableType == CannonState.Ramrod || currentlyHolding.carryableType == CannonState.Cleaner) // textDisplay.text = "Use " + currentlyHolding.carryableType; //else // textDisplay.text = "Load " + currentlyHolding.carryableType; if (Input.GetMouseButtonDown(0)) { #region //CannonController tempCannon = hit.transform.parent.GetComponent<CannonController>(); //if (tempCannon.LoadItem(currentlyHolding)) //{ // if (currentlyHolding.carryableType != CannonState.Ramrod && currentlyHolding.carryableType != CannonState.Cleaner) // { // isHoverHolding = false; // isHolding = false; //currentlyHolding = null; //} //} #endregion Transform objectHolding = hand.GetChild(0); #region //Rigidbody tempRb = objectHolding.GetComponent<Rigidbody>(); //tempRb.constraints = RigidbodyConstraints.None; //tempRb.detectCollisions = true; //objectHolding.parent = null; //hit.transform.SetParent(hand, true); //objectHolding = tempObj.GetComponent<CarryableObject>(); //objectHolding.transform.position = hit.transform.position; #endregion objectHolding.parent = null; //objectHolding.position = hit.transform.position; hit.transform.GetComponent <ItemHolder>().LoadItem(currentlyHolding); isHoverHolding = false; isHolding = false; currentlyHolding = null; droppedThisFrame = true; } } } else if (hit.collider.tag == "ItemZone" && !isHolding && !droppedThisFrame) { CarryableObject tempObj = hit.collider.GetComponent <ItemHolder>().itemHeld; if (Input.GetMouseButtonDown(0)) { try { Transform tempItem = hit.transform.GetChild(1); //print(hit.transform.GetChild(0)); tempItem.transform.SetParent(hand, true); tempItem.transform.position = hand.position; currentlyHolding = tempObj; Rigidbody tempRb = tempObj.GetComponent <Rigidbody>(); tempRb.constraints = RigidbodyConstraints.FreezeAll; hit.transform.GetComponent <ItemHolder>().itemHeld = null; hit.transform.GetComponent <ItemHolder>().StopAllCoroutines(); tempRb.detectCollisions = false; isHolding = true; isHoverHolding = true; } catch { } } #region /* * else if (hit.collider.tag == "Fuse" && isHolding) * { * if (currentlyHolding.carryableType == CannonState.Igniter) * { * isHoverHolding = true; * var tempCannon = hit.transform.parent.GetComponent<CannonController>(); * if (tempCannon.currentState == CannonState.Igniter) * { * textDisplay.text = "Fire Cannon"; * crosshair.sprite = crossUse; * if (Input.GetMouseButtonDown(0)) * { * tempCannon.Fire(); * } * } * } * } * else if (hit.collider.tag == "AimMode" && !isHolding) * { * crosshair.sprite = crossUse; * textDisplay.text = "Aim Cannon."; * if (Input.GetMouseButtonDown(0)) * { * var tempCannon = hit.transform.parent.GetComponent<CannonController>(); * cam.enabled = false; * tempCannon.cam.enabled = true; * inCannonAimMode = true; * crosshair.enabled = false; * textDisplay.text = "Click again to leave Aim Mode."; * rb.constraints = RigidbodyConstraints.FreezeAll; * rb.detectCollisions = false; * } * } * else * { * isHoverHolding = false; * crosshair.sprite = crossDefault; * textDisplay.text = ""; * } */ #endregion } else if (hit.collider.tag == "Button" && !isHolding && !droppedThisFrame) { if (Input.GetMouseButtonDown(0)) { //print(hit.transform); //print(hit.transform.GetComponent<Button>()); //print(this.gameObject); print(hit.transform.GetComponent <Button>().thisButton); hit.transform.GetComponent <Button>().DoButtonStuff(gameObject); droppedThisFrame = true; } } else if (hit.collider.tag == "Door" && !isHolding && !droppedThisFrame) { if (hit.transform.GetComponent <Door>().thisDoor == DoorType.Door) { if (Input.GetMouseButton(0)) { //if (hit.transform.GetComponent<Door>().doorClosed == true) //{ //hit.transform.GetComponent<Door>().InteractDoor(); //} //else { // hit.transform.GetComponent<Door>().CloseDoor(); //} } } } ///If none of that is true, than they're obviously not hoverholding else { isHoverHolding = false; //crosshair.sprite = crossDefault; //textDisplay.text = ""; } } #region /* * public IEnumerator<float> LeaveAimMode(CannonController cannon) * { * rb.constraints = RigidbodyConstraints.FreezeRotation; * rb.detectCollisions = true; * cannon.cam.enabled = false; * cam.enabled = true; * textDisplay.text = ""; * crosshair.enabled = true; * crosshair.sprite = crossDefault; * yield return Timing.WaitForSeconds(0.1f); * inCannonAimMode = false; * } */ #endregion #endregion }
void OnCollisionExit2D(Collision2D other) { _canCarry = false; _objectCollider = null; _objectCanCarried = null; }