// Bloco de funcoes referentes ao lancamento de objetos public void LiftObject(GameObject liftedObject) { currentObject = liftedObject; currLiftableObjectScript = currentObject.GetComponent <LiftableObject>(); currLiftableObjectScript.Lift(holdingPosition); }
void LiftAndDrop() { // Lifting if (Input.GetMouseButtonDown(0) && !_isLifting) { Ray camRay = new Ray(_cam.transform.position, _cam.transform.forward); RaycastHit camRayHit; if (Physics.Raycast(camRay, out camRayHit, _requiredProximity)) { if (camRayHit.transform.GetComponent<LiftableObject>()) { if (!camRayHit.transform.gameObject.GetComponent<LiftableObject>().isSet) { liftedObject = camRayHit.transform.gameObject.GetComponent<LiftableObject>(); liftedObject.Lift(); _isLifting = true; } } } } // Dropping else if (Input.GetMouseButtonDown(0) && _isLifting) { liftedObject.Drop(); liftedObject = null; _isLifting = false; } }
public void PutDownObject() { Vector3 placingPosition = transform.position + (transform.forward * 1.5f); currLiftableObjectScript.PutDown(placingPosition); currLiftableObjectScript = null; }
/* Name: Drop() * Description: Attempts to drop an object in front of the player, if there's * enough space. */ private void Drop() { Vector2 dropLocation = DropPoint(); switch (facing) { case Direction.EAST: dropLocation.x += actDistance; break; case Direction.WEST: dropLocation.x -= actDistance; break; case Direction.NORTH: dropLocation.y += actDistance; break; case Direction.SOUTH: dropLocation.y -= actDistance; break; } // Attempt to drop the item. If successful, the player is no longer holding the item. if (heldItem.OnDrop(dropLocation, facing)) { heldItem = null; } }
// Funcion que pone un objeto en la mesa o llena el objecto que // ya se encuentra en ella public override bool PutDownObject(LiftableObject liftable) { if (TopObject == null) { liftable.transform.parent = this.transform; liftable.transform.localPosition = liftable.Offset; liftable.transform.localRotation = Quaternion.Euler(0f, liftable.transform.localEulerAngles.y, 0f); TopObject = liftable; audioSource.clip = PutClip; audioSource.Play(); return(true); } else if (liftable is Ingredient && TopObject is CookingPot) { bool didFill = (TopObject as CookingPot).Fill((liftable as Ingredient)); if (didFill) { Destroy(liftable.gameObject); return(true); } } else if (liftable is CookingPot && TopObject is Plate) { bool didFill = (TopObject as Plate).Fill(liftable as CookingPot); if (didFill) { (liftable as CookingPot).Empty(); return(false); } } return(false); }
public static PacketWriter RemoveCube(LiftableObject liftableObject) { PacketWriter pWriter = PacketWriter.Of(SendOp.LIFTABLE); pWriter.Write(LiftableMode.RemoveCube); pWriter.WriteString($"4_{CoordB.AsHexadecimal(liftableObject.Position.ToByte())}"); return(pWriter); }
public override bool PutDownObject(LiftableObject liftable) { if (liftable is Plate && (liftable as Plate).Filled) { checkOrder((liftable as Plate).Ingredients); Destroy(liftable.gameObject); return(true); } return(false); }
public static PacketWriter UpdateEntityById(LiftableObject liftableObject) { PacketWriter pWriter = PacketWriter.Of(SendOp.Liftable); pWriter.Write(LiftableMode.UpdateEntity); pWriter.WriteString(liftableObject.EntityId); pWriter.WriteByte(); pWriter.WriteInt(liftableObject.ItemCount); pWriter.Write(liftableObject.State); return(pWriter); }
public static PacketWriter UpdateEntityById(LiftableObject liftableObject) { PacketWriter pWriter = PacketWriter.Of(SendOp.LIFTABLE); pWriter.Write(LiftableMode.UpdateEntity); pWriter.WriteString(liftableObject.EntityId); pWriter.WriteByte(); pWriter.WriteInt(liftableObject.Enabled ? 1 : 0); // 1 = enable, 0 = disable pWriter.Write(liftableObject.State); return(pWriter); }
public static PacketWriter UpdateEntityByCoord(LiftableObject liftableObject) { PacketWriter pWriter = PacketWriter.Of(SendOp.LIFTABLE); pWriter.Write(LiftableMode.UpdateEntity); pWriter.WriteString($"4_{CoordB.AsHexadecimal(liftableObject.Position.ToByte())}"); pWriter.WriteByte(); pWriter.WriteInt(liftableObject.Enabled ? 1 : 0); // 1 = enable, 0 = disable pWriter.Write(liftableObject.State); return(pWriter); }
private void OnTriggerStay(Collider other) { if (other.gameObject.tag == "EnergySource" && blockPresent == false && !isActive) { energySourceLO = other.gameObject.GetComponent <LiftableObject>(); if (energySourceLO.beingCarried == false) { energySource = other.gameObject; blockPresent = true; energySource.GetComponent <Rigidbody>().isKinematic = true; } } }
public override bool PutDownObject(LiftableObject liftable) { if (TopObject == null && liftable is CookingPot) { (liftable as CookingPot).SubscribeToStove(this); subscribed = true; return(base.PutDownObject(liftable)); } else if (TopObject != null) { return(base.PutDownObject(liftable)); } return(false); }
public static PacketWriter UpdateEntityByCoord(IFieldObject <LiftableObject> fieldLiftableObject) { LiftableObject liftableObject = fieldLiftableObject.Value; PacketWriter pWriter = PacketWriter.Of(SendOp.Liftable); pWriter.Write(LiftableMode.UpdateEntity); pWriter.WriteString($"4_{fieldLiftableObject.Coord.ToByte().AsHexadecimal()}"); pWriter.WriteByte(); pWriter.WriteInt(liftableObject.ItemCount); pWriter.Write(liftableObject.State); return(pWriter); }
public void spawnPlate() { LiftableObject instantiatedPlate = (Instantiate(plate, transform) as GameObject).GetComponent <LiftableObject>(); if (TopObject != null) { instantiatedPlate.transform.localPosition = instantiatedPlate.Offset + new Vector3(0f, (plates.Count + 1) * 0.1f, 0f); plates.Push(instantiatedPlate); } else { TopObject = instantiatedPlate; instantiatedPlate.transform.localPosition = instantiatedPlate.Offset; } }
public static PacketWriter Drop(LiftableObject liftableObject) { PacketWriter pWriter = PacketWriter.Of(SendOp.LIFTABLE); pWriter.Write(LiftableMode.Drop); pWriter.WriteString($"4_{CoordB.AsHexadecimal(liftableObject.Position.ToByte())}"); pWriter.WriteInt(1); pWriter.WriteUnicodeString(liftableObject.EffectQuestId); pWriter.WriteUnicodeString(liftableObject.EffectQuestState); pWriter.WriteUnicodeString("0"); pWriter.WriteUnicodeString("0"); pWriter.WriteByte(1); return(pWriter); }
public override bool PutDownObject(LiftableObject liftable) { if (liftable is CookingPot) { (liftable as CookingPot).Empty(); } else if (liftable is Plate) { (liftable as Plate).Empty(); } else if (liftable is Ingredient) { Destroy(liftable.gameObject); return(true); } return(false); }
public static PacketWriter Drop(IFieldObject <LiftableObject> fieldLiftableObject) { LiftableObject liftableObject = fieldLiftableObject.Value; PacketWriter pWriter = PacketWriter.Of(SendOp.Liftable); pWriter.Write(LiftableMode.Drop); pWriter.WriteString($"4_{fieldLiftableObject.Coord.ToByte().AsHexadecimal()}"); pWriter.WriteInt(liftableObject.ItemCount); pWriter.WriteUnicodeString(liftableObject.Metadata.MaskQuestId); pWriter.WriteUnicodeString(liftableObject.Metadata.MaskQuestState); pWriter.WriteUnicodeString(liftableObject.Metadata.EffectQuestId); pWriter.WriteUnicodeString(liftableObject.Metadata.EffectQuestState); pWriter.WriteBool(true); // effect return(pWriter); }
/* Name: Lift() * Description: Attempts to lift an object in front of the player. * Parameters: RaycastHit2D objectHit - The object to try and lift. */ private void Lift(RaycastHit2D objectHit) { // If a liftable object was hit... if ((objectHit.transform.tag == "Liftable") || (objectHit.transform.tag == "Resource")) { float heightOffset = headHeight + GetComponent <BoxCollider2D>().offset.y; // Set it as the lifted object. heldItem = objectHit.transform.GetComponent <LiftableObject>(); /* If the object can't be lifted - if it's a mineable rock or otherwise - * then reset the heldItem to be null */ heldItem.OnLift(this, heightOffset); // This is where a lifting animation should happen. } }
/* Name: Start() * Description: The initializations needed when this object is created. * */ protected override void Start() { // A reference to the collider of the player object. BoxCollider2D collider = GetComponent <BoxCollider2D>(); base.Start(); heldItem = null; // Gets the midpoint of the player's collision box, to determine // where they lift from. playerLiftOffset = collider.offset.y; // Gets an offset for where the bottom of the box collider is, in // relation to the player's transform location. playerBottomOffset = collider.offset.y - collider.size.y / 2; // The player shouldn't be destroyed between rounds, just disabled. //DontDestroyOnLoad (gameObject); }
// Funcion que levanta el objeto y lo coloca en el transform // especificado en los argumentos. public virtual LiftableObject LiftTopObject(Transform hands) { if (TopObject != null) { TopObject.transform.parent = hands; TopObject.transform.localPosition = Vector3.zero; TopObject.transform.localRotation = Quaternion.identity; TopObject.transform.parent.localPosition = new Vector3(-0.00626f, 0.00559f, 0.00225f); TopObject.transform.parent.localRotation = Quaternion.Euler(-90f, 0f, 35f); Utilities.ChangeHighlight(TopObject.transform, Color.black); LiftableObject lObject = TopObject; TopObject = null; audioSource.clip = GrabClip; audioSource.Play(); return(lObject); } return(null); }
public static PacketWriter LoadLiftables(List <IFieldObject <LiftableObject> > liftableObjects) { PacketWriter pWriter = PacketWriter.Of(SendOp.Liftable); pWriter.Write(LiftableMode.LoadLiftables); pWriter.Write(liftableObjects.Count); foreach (IFieldObject <LiftableObject> fieldLiftableObject in liftableObjects) { LiftableObject liftableObject = fieldLiftableObject.Value; pWriter.WriteString(liftableObject.EntityId); pWriter.WriteByte(); // not sure ? pWriter.WriteInt(liftableObject.ItemCount); pWriter.Write(liftableObject.State); pWriter.WriteUnicodeString(liftableObject.Metadata.MaskQuestId); pWriter.WriteUnicodeString(liftableObject.Metadata.MaskQuestState); pWriter.WriteUnicodeString(liftableObject.Metadata.EffectQuestId); pWriter.WriteUnicodeString(liftableObject.Metadata.EffectQuestState); pWriter.WriteBool(true); // effect } return(pWriter); }
public static PacketWriter PlaceLiftable(LiftableObject liftable, int ownerObjectId) { PacketWriter pWriter = PacketWriter.Of(SendOp.RESPONSE_CUBE); pWriter.Write(ResponseCubePacketMode.PlaceFurnishing); pWriter.WriteBool(false); pWriter.WriteInt(ownerObjectId); pWriter.WriteInt(ownerObjectId); pWriter.WriteInt(); pWriter.WriteInt(); pWriter.Write(liftable.Position.ToByte()); pWriter.WriteByte(); pWriter.WriteLong(); pWriter.WriteInt(liftable.ItemId); pWriter.WriteLong(); pWriter.WriteLong(); pWriter.WriteByte(); pWriter.WriteByte(1); pWriter.Write(liftable.Rotation.Z); pWriter.WriteInt(); pWriter.WriteByte(); return(pWriter); }
protected new virtual void Start() { Id = gameObject.GetInstanceID(); TopObject = LookForLiftable(gameObject); audioSource = GetComponent <AudioSource>(); }
// Update is called once per frame void Update() { if (objectToLift != null) { objectToLift.transform.position = Vector3.Lerp(objectToLift.transform.position, liftPoint.position, liftSpeed * Time.deltaTime); } if (cleanBotState == botState.Patrol) { } else if (cleanBotState == botState.Cleaning) { } else if (cleanBotState == botState.Lifting) { } else if (cleanBotState == botState.Holding) { } else if (cleanBotState == botState.Dropping) { } else if (cleanBotState == botState.Returning) { } currentDest = agent.destination; gyroscope.transform.position = transform.position; RaycastHit rayHit; if (Physics.Raycast(transform.position, transform.forward + new Vector3(0, -0.5f, 0), out rayHit, 2f, rayMask)) { if (rayHit.collider.gameObject.tag == "Bar" && !isCleaning) { bar = rayHit.collider.gameObject.GetComponent <LoadingBar>(); if (bar.currentFillNum > 0.25f) { beeper.clip = barBeep; beeper.Play(); initHerbPos = transform.position; isCleaning = true; agent.speed = 0.1f; isTurning = true; Invoke("resetSpeed", 0.5f); agent.SetDestination(bar.initialSource.position); } } else { if (Physics.Raycast(transform.position, transform.forward, out rayHit, 2f, rayMask)) { if ((rayHit.collider.gameObject.tag == "Wall" || rayHit.collider.gameObject.tag == "Pushable") && !isTurning && (Vector3.Angle(transform.forward, moveTransforms[currentPos].position - transform.position) < 5f)) { beeper.clip = wallBeep; beeper.Play(); isTurning = true; currentPos = (currentPos + turnDirectionInt) % 4; if (currentPos == -1) { currentPos = moveTransforms.Length - 1; } agent.SetDestination(moveTransforms[currentPos].position); //initDir = transform.rotation; agent.speed = 0.1f; Invoke("resetSpeed", 1f); } else if (rayHit.collider.gameObject.tag == "EnergySource" /*&& isCleaning*/) { //pick up block here source = rayHit.collider.gameObject.GetComponent <LiftableObject>(); if (Vector3.Distance(source.initialPos, source.transform.position) > 3) { isCleaning = true; //interactionController.objectToLift = rayHit.collider.gameObject; //interactionController.LiftObject(); objectToLift = rayHit.collider.gameObject; agent.speed = 0.1f; isTurning = true; Invoke("resetSpeed", 0.5f); agent.SetDestination(source.initialPos); holdingSource = true; if (initHerbPos == new Vector3(0, 25, 0)) { initHerbPos = transform.position; } } } } } } Debug.DrawRay(transform.position, (transform.forward + new Vector3(0, -0.5f, 0)).normalized * 2f, Color.cyan); if (!isCleaning) { //agent.SetDestination(movePoint); if (Mathf.Abs(agent.destination.x - initHerbPos.x) < 0.01f && Mathf.Abs(agent.destination.z - initHerbPos.z) < 0.01f) //y value will differ { if (Vector3.Distance(transform.position, initHerbPos) < 1) { agent.SetDestination(moveTransforms[currentPos].position); initHerbPos = new Vector3(0, 25, 0); //this is a dummy number as null is not assignable to a V3 } } else { agent.SetDestination(moveTransforms[currentPos].position); } } else { if (!holdingSource && bar.currentFillNum < 0.25f) { isCleaning = false; bar = null; source = null; agent.speed = 0.1f; isTurning = true; agent.SetDestination(initHerbPos); Invoke("resetSpeed", 0.5f); //agent.SetDestination(movePoint); } else if (holdingSource == true && Vector3.Distance(transform.position, source.initialPos) < 2f && !isTurning) { //put source down interactionController.objectToLift = source.gameObject; agent.SetDestination(initHerbPos); interactionController.dropObject(); interactionController.objectToLift = null; holdingSource = false; isCleaning = false; bar = null; source = null; agent.speed = 0.1f; isTurning = true; //print(initHerbPos); //print (agent.destination); Invoke("resetSpeed", 0.5f); //agent.SetDestination(movePoint); } } }
void Awake() { _lo = GetComponent<LiftableObject>(); _audio = GetComponent<AudioSource>(); }
// Update is called once per frame void Update() { //PushableObject pushScript; LiftableObject liftScript = null; EnvironmentalPushable envPushable = null; pushBoxController = null; if (characterControl != null && characterControl.lockMovement == true) { dropObject(); } //Raycasting (4 directions) ---------------------------- RaycastHit rayHit; if (Physics.Raycast(transform.position + new Vector3(0, 1, 0), transform.forward + new Vector3(0, -0.5f, 0), out rayHit, 1.2f, rayMask)) { pushBoxController = rayHit.collider.gameObject.GetComponent <PushableObject>(); liftScript = rayHit.collider.gameObject.GetComponent <LiftableObject>(); envPushable = rayHit.collider.gameObject.GetComponent <EnvironmentalPushable>(); } if ((pushBoxController == null && liftScript == null && envPushable == null) && Physics.Raycast(transform.position + new Vector3(0, 1, 0) + 0.25f * transform.right, transform.forward + new Vector3(0, -0.5f, 0) + 1.5f * transform.right, out rayHit, 1.2f, rayMask)) { pushBoxController = rayHit.collider.gameObject.GetComponent <PushableObject>(); liftScript = rayHit.collider.gameObject.GetComponent <LiftableObject>(); envPushable = rayHit.collider.gameObject.GetComponent <EnvironmentalPushable>(); } if ((pushBoxController == null && liftScript == null && envPushable == null) && Physics.Raycast(transform.position + new Vector3(0, 1, 0) - 0.25f * transform.right, transform.forward + new Vector3(0, -0.5f, 0) - 1.5f * transform.right, out rayHit, 1.2f, rayMask)) { pushBoxController = rayHit.collider.gameObject.GetComponent <PushableObject>(); liftScript = rayHit.collider.gameObject.GetComponent <LiftableObject>(); envPushable = rayHit.collider.gameObject.GetComponent <EnvironmentalPushable>(); } if (optionalCam != null) { if ((pushBoxController == null && liftScript == null && envPushable == null) && Physics.Raycast(optionalCam.transform.position, optionalCam.transform.forward, out rayHit, (Vector3.Distance(transform.position, optionalCam.transform.position) + 1.3f), rayMask)) { pushBoxController = rayHit.collider.gameObject.GetComponent <PushableObject>(); liftScript = rayHit.collider.gameObject.GetComponent <LiftableObject>(); envPushable = rayHit.collider.gameObject.GetComponent <EnvironmentalPushable>(); } } Debug.DrawRay(transform.position + new Vector3(0, 1, 0) + 0.25f * transform.right, (transform.forward + new Vector3(0, -0.5f, 0) + 1.5f * transform.right).normalized * 1.2f, Color.magenta); Debug.DrawRay(transform.position + new Vector3(0, 1, 0) - 0.25f * transform.right, (transform.forward + new Vector3(0, -0.5f, 0) - 1.5f * transform.right).normalized * 1.2f, Color.magenta); if (optionalCam != null) { Debug.DrawRay(optionalCam.transform.position, (optionalCam.transform.forward).normalized * (Vector3.Distance(transform.position, optionalCam.transform.position) + 1.2f), Color.green); } Debug.DrawRay(transform.position + new Vector3(0, 1, 0), (transform.forward + new Vector3(0, -0.5f, 0)).normalized * 1.2f, Color.magenta); //------------------------------------------------------- //Raycast resolution ---------------------- if (liftScript != null && characterControl.lockMovement != true) { objectToLift = liftScript.gameObject; nextToPickup = true; } else { if (!holdingPickup) { objectToLift = null; } nextToPickup = false; if (pushBoxController != null) { objectToPush = pushBoxController.gameObject; nextToPushable = true; } else { if (!pushingObject) { objectToPush = null; } nextToPushable = false; if (envPushable != null) { nextToEnvPushable = true; } else { nextToEnvPushable = false; } } } //----------------------------------------- if (objectToLift != null) { if (nextToPickup && !holdingPickup && !pushingObject && !objectToLift.GetComponent <LiftableObject>().beingCarried) { prompt.SetActive(true); if (Input.GetKeyDown(KeyCode.E) || Input.GetButtonDown("Interact")) { //lerpingPickup = true; objectToLift.GetComponent <LiftableObject>().beingCarried = true; LiftObject(); } } } if (nextToPushable && !holdingPickup && !pushingObject) { prompt.SetActive(true); if (Input.GetKeyDown(KeyCode.E) || Input.GetButtonDown("Interact")) { transitioning = true; pushingObject = true; characterControl.lockMovement = true; characterControl.pushing = true; //character.pushingObject = true; objectToPush.GetComponent <Rigidbody>().mass = 200f; //gameObject.GetComponent<MoveBehaviour>().pushing = true; //objectToPush.GetComponent<Rigidbody>().isKinematic = true; //Physics.IgnoreCollision(objectToPush.GetComponent<Collider>(), gameObject.transform.parent.GetComponent<Collider>()); //pushPos.position = objectToPush.transform.position; pushBoxController.beingPushed = true; float tempDist = Vector3.Distance(transform.position, pushBoxController.pushPoints[0].position); int nearestPoint = 0; for (int i = 0; i < pushBoxController.pushPoints.Length; i++) { if (Vector3.Distance(transform.position, pushBoxController.pushPoints[i].position) < tempDist) { tempDist = Vector3.Distance(transform.position, pushBoxController.pushPoints[i].position); nearestPoint = i; } } pushPoint = pushBoxController.pushPoints[nearestPoint]; } } if (nextToEnvPushable && !holdingPickup && !pushingObject) { if (envPushable.animPlayed == false) { prompt.SetActive(true); if (Input.GetKeyDown(KeyCode.E) || Input.GetButtonDown("Interact")) { envPushable.PlayAnim(); prompt.SetActive(false); } } } if ((!nextToPickup && !nextToPushable && !nextToEnvPushable) || holdingPickup || pushingObject) { prompt.SetActive(false); } if (holdingPickup && !transitioning) { if (Input.GetKeyDown(KeyCode.E) || Input.GetButtonDown("Interact")) { //lerpingPickup = false; dropObject(); } } if (pushingObject && !transitioning) { //print(pushPos.position); if (Input.GetKeyDown(KeyCode.E) || Input.GetButtonDown("Interact")) { pushingObject = false; characterControl.pushing = false; characterControl.lockMovement = false; objectToPush.GetComponent <Rigidbody>().mass = 100000; //gameObject.GetComponent<MoveBehaviour>().pushing = false; //Physics.IgnoreCollision(objectToPush.GetComponent<Collider>(), gameObject.transform.parent.GetComponent<Collider>(), false); } else { if (Vector3.Distance(transform.position, new Vector3(pushPoint.position.x, transform.position.y, pushPoint.position.z)) > 0.03f && characterControl.lockMovement) { transform.position = Vector3.Lerp(transform.position, new Vector3(pushPoint.position.x, transform.position.y, pushPoint.position.z), 0.5f); Physics.IgnoreCollision(objectToPush.GetComponent <Collider>(), gameObject.transform.GetComponent <Collider>()); //play moving anim here } else { Physics.IgnoreCollision(objectToPush.GetComponent <Collider>(), gameObject.transform.GetComponent <Collider>(), false); if (characterControl.lockMovement) { characterControl.lockMovement = false; transform.LookAt(new Vector3(objectToPush.transform.position.x, transform.position.y, objectToPush.transform.position.z)); } else { transform.LookAt(new Vector3(objectToPush.transform.position.x, transform.position.y, objectToPush.transform.position.z)); if (Vector3.Distance(pushPos.position, new Vector3(pushPoint.position.x, pushPos.position.y, pushPoint.position.z)) > 1.5f) { pushingObject = false; characterControl.pushing = false; characterControl.lockMovement = false; objectToPush.GetComponent <Rigidbody>().mass = 100000; } } } } } if (holdingPickup && lerpingPickup) { objectToLift.transform.LookAt(liftPos.position + transform.forward); objectToLift.transform.position = Vector3.Lerp(objectToLift.transform.position, liftPos.position, liftSpeed); } /*if (pushingObject) * { * //objectToPush.transform.position = Vector3.Lerp(objectToPush.transform.position, pushPos.position, 5); * }*/ transitioning = false; }
// Update is called once per frame void Update() { currentDest = agent.destination; gyroscope.transform.position = transform.position; if (cleanBotState == botState.Patrol) { agent.SetDestination(moveTransforms[currentPos].position); RaycastHit rayHit; //Right Ray Check if (Physics.Raycast(transform.position, transform.forward + new Vector3(0, -0.5f, 0) + (0.75f * transform.right), out rayHit, 2f, rayMask) && (cleanBotState != botState.Lifting) && (cleanBotState != botState.Cleaning)) { if (rayHit.collider.gameObject.tag == "Bar") { bar = rayHit.collider.gameObject.GetComponent <LoadingBar>(); if (bar.currentFillNum > 0.25f) { beeper.clip = barBeep; beeper.Play(); initHerbPos = transform.position; //isCleaning = true; cleanBotState = botState.Cleaning; agent.speed = 0.1f; isTurning = true; Invoke("resetSpeed", 0.5f); agent.SetDestination(bar.initialSource.position); } } else { if (Physics.Raycast(transform.position, transform.forward + 0.75f * transform.right, out rayHit, 2f, rayMask)) { if (rayHit.collider.gameObject.tag == "EnergySource") { //pick up block here source = rayHit.collider.gameObject.GetComponent <LiftableObject>(); if (Vector3.Distance(source.initialPos, source.transform.position) > 3 && !source.beingCarried) { beeper.clip = barBeep; beeper.Play(); cleanBotState = botState.Lifting; objectToLift = rayHit.collider.gameObject; agent.speed = 0.1f; isTurning = true; Invoke("resetSpeed", 0.5f); if (initHerbPos == new Vector3(0, 25, 0)) { initHerbPos = transform.position; } } } } } } //Left Ray Check if (Physics.Raycast(transform.position, transform.forward + new Vector3(0, -0.5f, 0) - 0.75f * transform.right, out rayHit, 2f, rayMask) && (cleanBotState != botState.Lifting) && (cleanBotState != botState.Cleaning)) { if (rayHit.collider.gameObject.tag == "Bar") { bar = rayHit.collider.gameObject.GetComponent <LoadingBar>(); if (bar.currentFillNum > 0.25f) { beeper.clip = barBeep; beeper.Play(); initHerbPos = transform.position; //isCleaning = true; cleanBotState = botState.Cleaning; agent.speed = 0.1f; isTurning = true; Invoke("resetSpeed", 0.5f); agent.SetDestination(bar.initialSource.position); } } else { if (Physics.Raycast(transform.position, transform.forward - 0.75f * transform.right, out rayHit, 2f, rayMask)) { if (rayHit.collider.gameObject.tag == "EnergySource") { //pick up block here source = rayHit.collider.gameObject.GetComponent <LiftableObject>(); if (Vector3.Distance(source.initialPos, source.transform.position) > 3 && !source.beingCarried) { beeper.clip = barBeep; beeper.Play(); cleanBotState = botState.Lifting; objectToLift = rayHit.collider.gameObject; agent.speed = 0.1f; isTurning = true; Invoke("resetSpeed", 0.5f); if (initHerbPos == new Vector3(0, 25, 0)) { initHerbPos = transform.position; } } } } } } //ForwardRayCheck if (Physics.Raycast(transform.position, transform.forward + new Vector3(0, -0.5f, 0), out rayHit, 2f, rayMask)) { if (rayHit.collider.gameObject.tag == "Bar") { bar = rayHit.collider.gameObject.GetComponent <LoadingBar>(); if (bar.currentFillNum > 0.25f) { beeper.clip = barBeep; beeper.Play(); initHerbPos = transform.position; cleanBotState = botState.Cleaning; agent.speed = 0.1f; isTurning = true; Invoke("resetSpeed", 0.5f); agent.SetDestination(bar.initialSource.position); } } else { if (Physics.Raycast(transform.position, transform.forward, out rayHit, 2f, rayMask)) { if ((rayHit.collider.gameObject.tag == "Wall" || rayHit.collider.gameObject.tag == "Pushable") && !isTurning && (Vector3.Angle(transform.forward, moveTransforms[currentPos].position - transform.position) < 5f)) { beeper.clip = wallBeep; beeper.Play(); isTurning = true; currentPos = (currentPos + turnDirectionInt) % 4; if (currentPos == -1) { currentPos = moveTransforms.Length - 1; } agent.SetDestination(moveTransforms[currentPos].position); //initDir = transform.rotation; agent.speed = 0.1f; Invoke("resetSpeed", 1f); } else if (rayHit.collider.gameObject.tag == "EnergySource") { //pick up block here source = rayHit.collider.gameObject.GetComponent <LiftableObject>(); if (Vector3.Distance(source.initialPos, source.transform.position) > 3 && !source.beingCarried) { beeper.clip = barBeep; beeper.Play(); cleanBotState = botState.Lifting; objectToLift = rayHit.collider.gameObject; agent.speed = 0.1f; isTurning = true; Invoke("resetSpeed", 0.5f); if (initHerbPos == new Vector3(0, 25, 0)) { initHerbPos = transform.position; } } } } } } //Debug.DrawRay(transform.position, (transform.forward + new Vector3(0, -0.5f, 0)).normalized * 2f, Color.cyan); //Debug.DrawRay(transform.position, (transform.forward + 0.75f*transform.right).normalized * 2f, Color.magenta); //Debug.DrawRay(transform.position, (transform.forward - 0.75f * transform.right).normalized * 2f, Color.magenta); } else if (cleanBotState == botState.Cleaning) { if (bar.currentFillNum < 0.25f) { cleanBotState = botState.Returning; bar = null; source = null; agent.speed = 0.1f; isTurning = true; Invoke("resetSpeed", 0.5f); //agent.SetDestination(movePoint); } else { RaycastHit rayHit; if (Physics.Raycast(transform.position, transform.forward, out rayHit, 2f, rayMask)) { if (rayHit.collider.gameObject.tag == "EnergySource") { //pick up block here source = rayHit.collider.gameObject.GetComponent <LiftableObject>(); if (Vector3.Distance(source.initialPos, source.transform.position) > 3) { beeper.clip = barBeep; beeper.Play(); cleanBotState = botState.Lifting; objectToLift = rayHit.collider.gameObject; agent.speed = 0.1f; isTurning = true; Invoke("resetSpeed", 0.5f); if (initHerbPos == new Vector3(0, 25, 0)) { initHerbPos = transform.position; } } } } } } else if (cleanBotState == botState.Lifting) { agent.SetDestination(transform.position); objectToLift = source.gameObject; objectToLift.GetComponent <Rigidbody>().isKinematic = true; source.beingCarried = true; if (Vector3.Distance(objectToLift.transform.position, liftPoint.position) > 0.4f) { objectToLift.transform.position = Vector3.Lerp(objectToLift.transform.position, liftPoint.position, liftSpeed * Time.deltaTime); } else { cleanBotState = botState.Holding; } } else if (cleanBotState == botState.Holding) { objectToLift = source.gameObject; objectToLift.transform.position = Vector3.Lerp(objectToLift.transform.position, liftPoint.position, liftSpeed * 10 * Time.deltaTime); agent.SetDestination(source.initialPos); if (Vector3.Distance(transform.position, source.initialPos) < 1.25f && !isTurning) { //put source down cleanBotState = botState.Dropping; //agent.SetDestination(initHerbPos); //interactionController.dropObject(); //interactionController.objectToLift = null; //holdingSource = false; //isCleaning = false; //bar = null; //source = null; //agent.speed = 0.1f; //isTurning = true; //print(initHerbPos); //print (agent.destination); //Invoke("resetSpeed", 0.5f); //agent.SetDestination(movePoint); } } else if (cleanBotState == botState.Dropping) { agent.SetDestination(transform.position); if (objectToLift != null) { if (Vector3.Distance(objectToLift.transform.position, dropPoint.position) > 0.4f) { objectToLift.transform.position = Vector3.Lerp(objectToLift.transform.position, dropPoint.position, liftSpeed * Time.deltaTime); } else { objectToLift.GetComponent <Rigidbody>().isKinematic = false; source.beingCarried = false; objectToLift = null; bar = null; source = null; agent.speed = 0.1f; isTurning = true; Invoke("resetSpeed", 0.5f); cleanBotState = botState.Returning; } } } else if (cleanBotState == botState.Returning) { if (Mathf.Abs(agent.destination.x - initHerbPos.x) < 0.01f && Mathf.Abs(agent.destination.z - initHerbPos.z) < 0.01f) //y value will differ { if (Vector3.Distance(transform.position, initHerbPos) < 1) { agent.SetDestination(moveTransforms[currentPos].position); initHerbPos = new Vector3(0, 25, 0); //this is a dummy number as null is not assignable to a V3 cleanBotState = botState.Patrol; } } else { //agent.SetDestination(moveTransforms[currentPos].position); agent.SetDestination(initHerbPos); } } }
public void ObjectSetInPlace() { liftedObject = null; _isLifting = false; }
public abstract bool PutDownObject(LiftableObject liftable);
// Update is called once per frame void Update() { RaycastHit rayHit; if (Physics.Raycast(transform.position, transform.forward + new Vector3(0, -0.5f, 0), out rayHit, 2f, rayMask)) { if (rayHit.collider.gameObject.tag == "Bar" && !isCleaning) { bar = rayHit.collider.gameObject.GetComponent <LoadingBar>(); if (bar.currentFillNum > 0.25f) { isCleaning = true; agent.speed = 0.1f; isTurning = true; Invoke("resetSpeed", 0.75f); agent.SetDestination(bar.initialSource.position); } } else { if (rayHit.collider.gameObject.tag == "EnergySource" && isCleaning) { //pick up block here interactionController.objectToLift = rayHit.collider.gameObject; interactionController.LiftObject(); source = rayHit.collider.gameObject.GetComponent <LiftableObject>(); agent.speed = 0.1f; isTurning = true; Invoke("resetSpeed", 0.5f); agent.SetDestination(source.initialPos); holdingSource = true; } } } Debug.DrawRay(transform.position, (transform.forward + new Vector3(0, -0.5f, 0)).normalized * 2f, Color.cyan); if (!isCleaning) { if (Vector3.Distance(transform.position, movePoints[currentPos]) < 0.1f && !isTurning) { currentPos = (currentPos + 1) % movePoints.Length; agent.speed = 0.1f; isTurning = true; Invoke("resetSpeed", 0.5f); } agent.SetDestination(movePoints[currentPos]); } else { if (bar.currentFillNum < 0.25f && !holdingSource) { isCleaning = false; bar = null; source = null; agent.speed = 0.1f; isTurning = true; Invoke("resetSpeed", 0.5f); agent.SetDestination(movePoints[currentPos]); } else if (holdingSource == true && Vector3.Distance(transform.position, source.initialPos) < 2f && !isTurning) { //put source down interactionController.objectToLift = source.gameObject; interactionController.dropObject(); interactionController.objectToLift = null; holdingSource = false; isCleaning = false; bar = null; source = null; agent.speed = 0.1f; isTurning = true; Invoke("resetSpeed", 0.5f); agent.SetDestination(movePoints[currentPos]); } } }