예제 #1
0
        void Update()
        {
            currTimer -= Time.deltaTime;

            if (currTimer <= 0)
            {
                currTimer = flowDelay;

                if (lManage.ReturnAdjacentDown(bData) == BLOCK_NULL)
                {
                    lManage.CreateBlock(new GridPos(bData.blockPos.x, bData.blockPos.y - 1, bData.blockPos.z), bData.blockID);
                }
                else
                {
                    if (lManage.ReturnAdjacentDown(bData) != bData.blockID)
                    {
                        if (lManage.ReturnAdjacentLeft(bData) == BLOCK_NULL)
                        {
                            lManage.CreateBlock(new GridPos(bData.blockPos.x - 1, bData.blockPos.y, bData.blockPos.z), bData.blockID);
                        }
                        if (lManage.ReturnAdjacentRight(bData) == BLOCK_NULL)
                        {
                            lManage.CreateBlock(new GridPos(bData.blockPos.x + 1, bData.blockPos.y, bData.blockPos.z), bData.blockID);
                        }
                        if (lManage.ReturnAdjacentForward(bData) == BLOCK_NULL)
                        {
                            lManage.CreateBlock(new GridPos(bData.blockPos.x, bData.blockPos.y, bData.blockPos.z + 1), bData.blockID);
                        }
                        if (lManage.ReturnAdjacentBack(bData) == BLOCK_NULL)
                        {
                            lManage.CreateBlock(new GridPos(bData.blockPos.x, bData.blockPos.y, bData.blockPos.z - 1), bData.blockID);
                        }
                    }
                }
            }
        }
예제 #2
0
        void Update()
        {
            if (paused || win)
            {
                padMarker.SetActive(false);
                minionPointer.SetActive(false);
                stepPad.SetActive(false);
                toolHighlight.SetActive(false);
            }
            else if (Input.GetMouseButton(1))
            {
                newRot.y += ((Input.GetAxis("Mouse X") * cameraSensitivity) * Time.deltaTime);
                padMarker.SetActive(false);
                stepPad.SetActive(false);
                toolHighlight.SetActive(false);
                if (selectedMinion == null)
                {
                    minionPointer.SetActive(false);
                }
                else
                {
                    minionPointer.SetActive(true);
                    minionPointer.transform.Rotate(new Vector3(0, 80.0f * Time.deltaTime, 0));
                    minionPointer.transform.position = new Vector3(selectedMinion.transform.position.x,
                                                                   selectedMinion.transform.position.y - 0.3f,
                                                                   selectedMinion.transform.position.z);
                }
            }
            else if ((currentlyHeldItem >= 101) && (selectedMinion == null))
            {
                padMarker.SetActive(false);
                pointerRay = Camera.main.ScreenPointToRay(Input.mousePosition);
                if (Physics.Raycast(pointerRay, out hit))
                {
                    blockData hitBlock = hit.transform.GetComponent <blockData>();
                    if (hitBlock != null)
                    {
                        if (gridParent.IsValidToolingLocation(currentlyHeldItem, hitBlock))
                        {
                            toolHighlight.SetActive(true);
                            toolHighlight.transform.position = hitBlock.transform.position;
                            if (Input.GetMouseButtonUp(0))
                            {
                                gridParent.DeleteBlock(hitBlock);

                                //Remove icon
                                Destroy(slots[currentlySelectedSlot - 1].transform.GetChild(0).gameObject);
                                //Deselect slot
                                slots[currentlySelectedSlot - 1].GetComponent <Image>().color = Color.black;
                                PlayerInventory[currentlySelectedSlot - 1] = 0;
                                currentlySelectedSlot = 0;
                                currentlyHeldItem     = 0;
                                toolHighlight.SetActive(false);
                            }
                        }
                    }
                }
            }
            else if ((currentlyHeldItem != 0) && (selectedMinion == null))
            {
                toolHighlight.SetActive(false);
                pointerRay = Camera.main.ScreenPointToRay(Input.mousePosition);

                if (Physics.Raycast(pointerRay, out hit))
                {
                    blockData hitBlock = hit.transform.GetComponent <blockData>();
                    if ((hitBlock != null) && (hitBlock.blockPos.y != maxLevelY))
                    {
                        if (!hitBlock.isEntity &&
                            (gridParent.levelBlocks[hitBlock.blockPos.x, hitBlock.blockPos.y + 1, hitBlock.blockPos.z] == BLOCK_NULL))
                        {
                            padMarker.SetActive(true);
                            padMarker.transform.position = new Vector3(hitBlock.transform.position.x,
                                                                       hitBlock.transform.position.y + 0.55f,
                                                                       hitBlock.transform.position.z);
                            if (Input.GetMouseButtonUp(0) && IsValidPlace(currentlyHeldItem, hitBlock.blockID))
                            {
                                gridParent.CreateBlock(new GridPos(hitBlock.blockPos.x, hitBlock.blockPos.y + 1, hitBlock.blockPos.z), currentlyHeldItem);

                                //Remove icon
                                Destroy(slots[currentlySelectedSlot - 1].transform.GetChild(0).gameObject);
                                //Deselect slot
                                slots[currentlySelectedSlot - 1].GetComponent <Image>().color = Color.black;
                                PlayerInventory[currentlySelectedSlot - 1] = 0;
                                currentlySelectedSlot = 0;
                                currentlyHeldItem     = 0;
                                //Disable padMarker
                                padMarker.SetActive(false);
                            }
                        }
                        else
                        {
                            padMarker.SetActive(false);
                            minionPointer.SetActive(false);
                        }
                    }
                    else
                    {
                        //When there's no block data
                        padMarker.SetActive(false);
                        minionPointer.SetActive(false);
                    }
                }
                else
                {
                    //When there's no raycast hit.
                    padMarker.SetActive(false);
                    minionPointer.SetActive(false);
                }
            }
            else if (selectedMinion == null)
            {
                pointerRay = Camera.main.ScreenPointToRay(Input.mousePosition);

                if (Physics.Raycast(pointerRay, out hit))
                {
                    if (hit.transform.tag == "minion")
                    {
                        minionPointer.SetActive(true);
                        minionPointer.transform.position = new Vector3(hit.transform.position.x,
                                                                       hit.transform.position.y - 0.3f,
                                                                       hit.transform.position.z);

                        if (Input.GetMouseButtonUp(0))
                        {
                            selectedMinion = hit.transform.gameObject;
                        }
                    }
                    else
                    {
                        minionPointer.SetActive(false);
                    }
                }
            }
            else if (selectedMinion != null)
            {
                toolHighlight.SetActive(false);
                minionPointer.SetActive(true);
                stepPad.SetActive(false);
                pointerRay = Camera.main.ScreenPointToRay(Input.mousePosition);

                minionPointer.transform.Rotate(new Vector3(0, 80.0f * Time.deltaTime, 0));
                minionPointer.transform.position = new Vector3(selectedMinion.transform.position.x,
                                                               selectedMinion.transform.position.y - 0.3f,
                                                               selectedMinion.transform.position.z);

                if (Physics.Raycast(pointerRay, out hit))
                {
                    if ((hit.transform.gameObject == selectedMinion) && (Input.GetMouseButtonUp(0)))
                    {
                        selectedMinion = null;
                        minionPointer.SetActive(false);
                    }
                    else if (hit.transform.tag == "minion")
                    {
                        minionPointer.transform.position = new Vector3(hit.transform.position.x,
                                                                       hit.transform.position.y - 0.3f,
                                                                       hit.transform.position.z);

                        if (Input.GetMouseButtonUp(0))
                        {
                            selectedMinion = hit.transform.gameObject;
                        }
                    }
                    else if ((hit.transform.GetComponent <blockData>() != null) && (hit.transform.GetComponent <blockData>().blockPos.y != maxLevelY))
                    {
                        blockData targetBlock = hit.transform.GetComponent <blockData>();
                        GridPos   aboveTarget = new GridPos(targetBlock.blockPos.x, targetBlock.blockPos.y + 1, targetBlock.blockPos.z);

                        if ((gridParent.levelBlocks[aboveTarget.x, aboveTarget.y, aboveTarget.z] == ENTITY_GOAL) &&
                            (gridParent.IsValidMoveLocation(selectedMinion.GetComponent <blockData>(), targetBlock)))
                        {
                            stepPad.SetActive(true);
                            stepPad.transform.position = new Vector3(hit.transform.position.x,
                                                                     hit.transform.position.y + 0.6f,
                                                                     hit.transform.position.z);
                            if (Input.GetMouseButtonUp(0))
                            {
                                Win();
                                gridParent.DeleteBlock(GameObject.Find("goal(Clone)").GetComponent <blockData>());
                                gridParent.MoveEntity(selectedMinion.GetComponent <blockData>(), aboveTarget);
                            }
                        }
                        else if ((gridParent.levelBlocks[aboveTarget.x, aboveTarget.y, aboveTarget.z] == BLOCK_NULL) &&
                                 (gridParent.IsValidMoveLocation(selectedMinion.GetComponent <blockData>(), targetBlock)))
                        {
                            stepPad.SetActive(true);
                            stepPad.transform.position = new Vector3(hit.transform.position.x,
                                                                     hit.transform.position.y + 0.6f,
                                                                     hit.transform.position.z);
                            if (Input.GetMouseButtonUp(0))
                            {
                                gridParent.MoveEntity(selectedMinion.GetComponent <blockData>(), aboveTarget);
                            }
                        }
                    }
                    else
                    {
                        minionPointer.SetActive(false);
                        stepPad.SetActive(false);
                    }
                }
            }
        }