public override void StartAction() { Cat cat = GetCat(); FurnitureBase foodBow = catCafe.GetFurnitureByType(FurnitureType.Food); InteractPoint point = foodBow.ReserveInteractionPoint(cat); if (point == null) { // TODO need to check, there is bug when two cat both reserve ActionEnd(); return; } // TODO if no point CatWalkTask walkTask = actionHolder.AddComponent <CatWalkTask>(); walkTask.SetTaskTarget(foodBow.gameObject, point.transform.position, cat); CatEatTask eatTask = actionHolder.AddComponent <CatEatTask>(); eatTask.SetTaskTarget(foodBow.gameObject, Vector3.zero, cat); TaskChain chain = actionHolder.AddComponent <TaskChain>(); chain.PushTask(walkTask); chain.PushTask(eatTask); chain.notifyTaskChainEnd += OnTaskChainEnd; chain.StartTaskChain(); }
public override void StartAction() { Cat cat = GetCat(); FurnitureBase drinkBow = catCafe.GetFurnitureByType(FurnitureType.Water); InteractPoint point = drinkBow.ReserveInteractionPoint(cat); if (point == null) { ActionEnd(); return; } CatWalkTask walkTask = actionHolder.AddComponent <CatWalkTask>(); walkTask.SetTaskTarget(drinkBow.gameObject, point.transform.position, cat); CatDrinkTask drinkTask = actionHolder.AddComponent <CatDrinkTask>(); drinkTask.SetTaskTarget(drinkBow.gameObject, Vector3.zero, cat); TaskChain chain = actionHolder.AddComponent <TaskChain>(); chain.PushTask(walkTask); chain.PushTask(drinkTask); chain.notifyTaskChainEnd += OnTaskChainEnd; chain.StartTaskChain(); }
public override void InteractionEnd(Cat cat) { InteractPoint point = GetOccupiedPoint(cat); if (point != null) { point.ReleaseOccupy(); } else { Debug.LogError("occupied list not found"); } NotifyEnd(cat); }
// Update is called once per frame void Update() { #region Custom UI rotate // Rotate the UI to fave the camera canvasRot.y = Quaternion.Slerp(characterHoverCanvas.transform.rotation, Quaternion.LookRotation(characterHoverCanvas.transform.position - mainCamera.transform.position), 2.0f * Time.deltaTime).eulerAngles.y; canvasRot.y = Mathf.Clamp(canvasRot.y, 25.0f, 60.0f); characterHoverCanvas.transform.rotation = Quaternion.Euler(canvasRot); #endregion interactPoint = focusController.focus; if (shop.isBrowsing) { // Handle shop UI when player is close or not if (Vector3.Distance(transform.position, shop.playerManager.transform.position) < shop.radius) { shopCanvas.gameObject.SetActive(true); if (!isSetup) { SetupUI(); isSetup = true; } } else { if (isSetup == true) { Debug.Log("DEBUG - Stats: Closing shop..."); CloseShop(); } } // Handle shop UI when player defocuses while browsing shop if (interactPoint == null) { CloseShop(); } } }
// Update is called once per frame void Update() { // when hitting the left mouse button // B22 fix, player interacting with items behind the UI interface if (!EventSystem.current.IsPointerOverGameObject() && Input.GetMouseButtonDown(0)) { // creating a ray from the screen to a point in game Ray ray = cam.ScreenPointToRay(Input.mousePosition); // if the ray hits an object with a focus layer if (Physics.Raycast(ray, out RaycastHit hit, rayCastRange, FocusMask)) // inline variable declaration for RaycastHit { InteractPoint interaction = hit.collider.GetComponent <InteractPoint>(); // if the ray actually hit anything if (interaction != null) { // if we don't have a focused item already if (focus == null) { Focus(interaction); } // if the item that we are trying to focus is not already focused else if (focus.name != interaction.name) { DeFocus(); Focus(interaction); } } } else if (Physics.Raycast(ray, rayCastRange) && focus != null) { DeFocus(); } }
public bool CanOccupy(Cat cat) { InteractPoint point = GetReservedPoint(cat); return(!point.isOccupied); }
public override void PreCatInteraction(Cat cat) { InteractPoint point = GetReservedPoint(cat); point.CatOccupy(cat); }