private void Update() { if (Input.GetKeyDown(KeyCode.Alpha1)) { BoostTimer.Instance.ActiveBoost(BoostType.SheepSpeedUp); BoostSpeedOnce(); } if (Input.GetKeyDown(KeyCode.Alpha2)) { BoostTimer.Instance.ActiveBoost(BoostType.x2SheepValue); } if (Input.GetKeyDown(KeyCode.Alpha3)) { BoostTimer.Instance.ActiveBoost(BoostType.SuperBox); } if (Input.GetKeyDown(KeyCode.Alpha4)) { BoostTimer.Instance.ActiveBoost(BoostType.AutoMerge); } if (isOnCutScene) { if (camCart.m_Position == camPath.PathLength && camTarget.gameObject.activeSelf) { camTarget.gameObject.SetActive(false); camOverrall.gameObject.SetActive(true); DOVirtual.DelayedCall(2f, () => { //camOverrall.gameObject.SetActive(false); Destroy(camTarget.gameObject); Destroy(camOverrall.gameObject); Destroy(camCart.transform.parent.gameObject); Destroy(mainCam.GetComponent <Cinemachine.CinemachineBrain>()); cameraHandler.enabled = true; isOnCutScene = false; SheepController sheepController = SheepFactory.Instance.CreateNewSheep(1); GameController.Instance.PutSheepBackToCage(sheepController); SimpleResourcesManager.Instance.ShowParticle("MergeFx", sheepController.transform.position, 1); }); } } else { if (BoostTimer.Instance.IsAutoMerge) { AutoMergeSheep(); } //Mouse down if (Input.GetMouseButtonDown(0)) { Ray camRay = mainCam.ScreenPointToRay(Input.mousePosition); RaycastHit rayHit; int farmerLayer = LayerMask.GetMask("Farmer"); int sheepLayer = LayerMask.GetMask("Sheep"); if (Physics.Raycast(camRay, out rayHit, float.MaxValue, farmerLayer)) { farmer.Waving(); BoostSpeedOnce(); } else if (Physics.Raycast(camRay, out rayHit, float.MaxValue, sheepLayer)) { SheepController sheepController = rayHit.collider.GetComponent <SheepController>(); if (sheepController.SheepStateProp == SheepController.SheepState.Idle) { pickingSheep = sheepController; var pos = lastPickingPos = pickingSheep.transform.position; pos.y += 0.5f; pickingSheep.transform.position = pos; cameraHandler.enabled = false; pickingSheep.SetIsPickingUp(true); moveOutTrigger.gameObject.SetActive(true); } else if (sheepController.SheepStateProp == SheepController.SheepState.Running) { if (!this.IsCageFull()) { PutSheepBackToCage(sheepController); } else { //TODO: Show TextNofity } } //MarkCanMergeSheep(pickingSheep); } } else if (Input.GetMouseButton(0)) //Mouse move { if (pickingSheep != null) { float currentHeight = pickingSheep.transform.position.y; Ray camRay = GameController.Instance.mainCam.ScreenPointToRay(Input.mousePosition); RaycastHit rayHit; int groundLayer = LayerMask.GetMask("Island"); if (Physics.Raycast(camRay, out rayHit, float.MaxValue, groundLayer)) { Vector3 mouseWorldPos = rayHit.point; mouseWorldPos.y = currentHeight; pickingSheep.transform.position = mouseWorldPos; } int sheepLayer = LayerMask.GetMask("Sheep"); if (Physics.Raycast(camRay, out rayHit, float.MaxValue, sheepLayer)) { SheepController selectSheep = rayHit.collider.GetComponent <SheepController>(); if (lastCanMergeSheep != null && lastCanMergeSheep != selectSheep) { lastCanMergeSheep.SetCanMerge(false); } if (selectSheep.SheepStateProp == SheepController.SheepState.Idle && selectSheep.SheepType == pickingSheep.SheepType) { selectSheep.SetCanMerge(true); } lastCanMergeSheep = selectSheep; } else { if (lastCanMergeSheep != null) { lastCanMergeSheep.SetCanMerge(false); } } } } else if (Input.GetMouseButtonUp(0)) { if (pickingSheep != null) { Ray camRay = GameController.Instance.mainCam.ScreenPointToRay(Input.mousePosition); RaycastHit rayHit; int sheepLayer = LayerMask.GetMask("Sheep"); int roadLayer = LayerMask.GetMask("Road"); int islandLayer = LayerMask.GetMask("Island"); int groundLayer = LayerMask.GetMask("Ground"); bool hitSheep = Physics.Raycast(camRay, out rayHit, float.MaxValue, sheepLayer); if (hitSheep && rayHit.collider.GetComponent <SheepController>().SheepStateProp == SheepController.SheepState.Idle) { SheepController selectSheep = rayHit.collider.GetComponent <SheepController>(); if (selectSheep.SheepType < numOfSheepType && selectSheep.SheepStateProp == SheepController.SheepState.Idle && selectSheep.SheepType == pickingSheep.SheepType) { //DoMerge(); DoMerge(pickingSheep, selectSheep); } else { var pos = pickingSheep.transform.position; pos.y -= 0.5f; pickingSheep.transform.position = pos; } } else if (Physics.Raycast(camRay, out rayHit, float.MaxValue, groundLayer)) { var pos = pickingSheep.transform.position; pos.y -= 0.5f; pickingSheep.transform.position = pos; } else if (Physics.Raycast(camRay, out rayHit, float.MaxValue, islandLayer)) { pickingSheep.transform.position = lastPickingPos; OpenGateLeaveSheepOut(pickingSheep); } pickingSheep.SetIsPickingUp(false); pickingSheep = null; lastCanMergeSheep = null; cameraHandler.enabled = true; moveOutTrigger.gameObject.SetActive(false); } } } }