示例#1
0
    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();
    }
示例#2
0
    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();
    }
示例#3
0
    public override void InteractionEnd(Cat cat)
    {
        InteractPoint point = GetOccupiedPoint(cat);

        if (point != null)
        {
            point.ReleaseOccupy();
        }
        else
        {
            Debug.LogError("occupied list not found");
        }
        NotifyEnd(cat);
    }
示例#4
0
    // 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();
            }
        }
示例#6
0
    public bool CanOccupy(Cat cat)
    {
        InteractPoint point = GetReservedPoint(cat);

        return(!point.isOccupied);
    }
示例#7
0
    public override void PreCatInteraction(Cat cat)
    {
        InteractPoint point = GetReservedPoint(cat);

        point.CatOccupy(cat);
    }