Ejemplo n.º 1
0
 public CursorInfoDisplay(MouseController mouseController, BuildModeController buildModeController)
 {
     mc  = mouseController;
     bmc = buildModeController;
 }
    private void UpdateDrag()
    {
        //RETURN OVER UI
        if (EventSystem.current.IsPointerOverGameObject())
        {
            return;
        }

        //!Start of drag
        if (Input.GetMouseButtonDown(0))
        {
            dragStartPos = currFramePos;
        }

        int startX = Mathf.FloorToInt(dragStartPos.x);
        int endX   = Mathf.FloorToInt(currFramePos.x);
        int startY = Mathf.FloorToInt(dragStartPos.y);
        int endY   = Mathf.FloorToInt(currFramePos.y);

        if (endX < startX)   // IF we are dragging from the left.
        {
            int temp = endX;
            endX   = startX;
            startX = temp;
        }

        if (endY < startY)   // IF we are dragging from the left.
        {
            int temp = endY;
            endY   = startY;
            startY = temp;
        }



        //Clean up old drag previews
        while (dragPreviewGO.Count > 0)
        {
            {
                GameObject go = dragPreviewGO[0];
                dragPreviewGO.RemoveAt(0);
                SimplePool.Despawn(go);
            }
        }

        if (Input.GetMouseButton(0))
        {
            //Display a preview of drag area
            for (int x = startX; x <= endX; x++)
            {
                for (int y = startY; y <= endY; y++)
                {
                    Tile t = WorldController.Instance.World.GetTileAt(x, y);
                    if (t != null)
                    {
                        //Display Building hint ontop of tile
                        GameObject go = SimplePool.Spawn(cursorPrefab, new Vector3(x, y, 0), Quaternion.identity);
                        go.transform.SetParent(this.transform, true);
                        dragPreviewGO.Add(go);
                    }
                }
            }
        }

        //! end drag
        if (Input.GetMouseButtonUp(0))
        {
            BuildModeController bmc = GameObject.FindObjectOfType <BuildModeController>();

            for (int x = startX; x <= endX; x++)
            {
                for (int y = startY; y <= endY; y++)
                {
                    Tile t = WorldController.Instance.World.GetTileAt(x, y);

                    if (t != null)
                    {
                        //Call build mode controller do build
                        bmc.DoBuild(t);
                    }
                }
            }
        }
    }
Ejemplo n.º 3
0
 // Use this for initialization.
 public KeyboardController(BuildModeController buildModeController, WorldController worldController)
 {
     bmc = buildModeController;
     wc  = worldController;
 }
Ejemplo n.º 4
0
    public void Start()
    {
        // Create GameObject so we can have access to a transform which has a position of "Vector3.zero".
        new GameObject("VisualPath", typeof(VisualPath));
        GameObject go;

        TileSpriteController      = new TileSpriteController(World);
        CharacterSpriteController = new CharacterSpriteController(World);
        FurnitureSpriteController = new FurnitureSpriteController(World);
        UtilitySpriteController   = new UtilitySpriteController(World);
        JobSpriteController       = new JobSpriteController(World, FurnitureSpriteController, UtilitySpriteController);
        InventorySpriteController = new InventorySpriteController(World, inventoryUI);
        ShipSpriteController      = new ShipSpriteController(World);

        BuildModeController      = new BuildModeController();
        SpawnInventoryController = new SpawnInventoryController();
        MouseController          = new MouseController(BuildModeController, FurnitureSpriteController, UtilitySpriteController, circleCursorPrefab);
        QuestController          = new QuestController();
        CameraController         = new CameraController();
        TradeController          = new TradeController();
        AutosaveManager          = new AutosaveManager();

        // Register inputs actions
        KeyboardManager.Instance.RegisterInputAction("DevMode", KeyboardMappedInputType.KeyDown, ChangeDevMode);

        // Hiding Dev Mode spawn inventory controller if devmode is off.
        SpawnInventoryController.SetUIVisibility(SettingsKeyHolder.DeveloperMode);

        CameraController.Initialize();

        // Initialising controllers.
        GameObject canvas = GameObject.Find("Canvas");

        go      = Instantiate(Resources.Load("UI/ContextMenu"), canvas.transform.position, canvas.transform.rotation, canvas.transform) as GameObject;
        go.name = "ContextMenu";

        GameObject timeScale = Instantiate(Resources.Load("UI/TimeScale"), GameObject.Find("TopRight").transform, false) as GameObject;

        timeScale.name = "TimeScale";

        GameObject dateTimeDisplay = Instantiate(Resources.Load("UI/DateTimeDisplay"), canvas.transform, false) as GameObject;

        dateTimeDisplay.name = "DateTimeDisplay";

        GameController.Instance.IsModal = false;

        // Settings UI is a 'dialog box' (kinda), so it comes here.
        // Where as DevConsole is a constant menu item (it can appear 'anywhere' so it appears after)
        GameObject settingsMenu = (GameObject)Instantiate(Resources.Load("UI/SettingsMenu/SettingsMenu"));

        if (settingsMenu != null)
        {
            settingsMenu.name = "Settings Menu";
            settingsMenu.transform.SetParent(canvas.transform, false);
            settingsMenu.SetActive(true);
        }

        // This will place it after context menu (and the inventory menu) and settings menu
        DialogBoxManager = GameObject.Find("Dialog Boxes").GetComponent <DialogBoxManager>();
        DialogBoxManager.transform.SetAsLastSibling();

        GameObject devConsole = (GameObject)Instantiate(Resources.Load("UI/Console/DevConsole"));

        if (devConsole != null)
        {
            devConsole.name = "DevConsole-Spawned";
            devConsole.transform.SetParent(canvas.transform, false);
            devConsole.transform.SetAsLastSibling();
            devConsole.SetActive(true);
            DeveloperConsole.DevConsole.Close();
        }
    }
Ejemplo n.º 5
0
    private void UpdateDragging()
    {
        //If over UI element, break
        if (EventSystem.current.IsPointerOverGameObject())
        {
            return;
        }

        //Start LMB drag
        if (Input.GetMouseButtonDown(0))
        {
            dragStartPosition = currentMousePosition;
        }

        int start_x = Mathf.RoundToInt(dragStartPosition.x);
        int end_x   = Mathf.RoundToInt(currentMousePosition.x);

        if (end_x < start_x)
        {
            int tmp = end_x;
            end_x   = start_x;
            start_x = tmp;
        }

        int start_y = Mathf.RoundToInt(dragStartPosition.y);
        int end_y   = Mathf.RoundToInt(currentMousePosition.y);

        if (end_y < start_y)
        {
            int tmp = end_y;
            end_y   = start_y;
            start_y = tmp;
        }

        //clean up old drag previews
        while (dragPreviews.Count > 0)
        {
            GameObject go = dragPreviews[0];
            dragPreviews.RemoveAt(0);
            SimplePool.Despawn(go);
        }

        //checks if LMB is currently dragging
        if (Input.GetMouseButton(0))
        {
            //display preview of drag area
            for (int x = start_x; x <= end_x; x++)
            {
                for (int y = start_y; y <= end_y; y++)
                {
                    Tile t = WorldController.World.GetTileAt(x, y);
                    if (t != null)
                    {
                        //display the building hint on this tile position
                        GameObject go = SimplePool.Spawn(circleCursorPrefab, new Vector3(x, y, 0), Quaternion.identity);
                        go.transform.SetParent(this.transform, true);
                        dragPreviews.Add(go);
                    }
                }
            }
        }

        //end LMB drag
        if (Input.GetMouseButtonUp(0))
        {
            BuildModeController bmc = FindObjectOfType <BuildModeController>();

            for (int x = start_x; x <= end_x; x++)
            {
                for (int y = start_y; y <= end_y; y++)
                {
                    Tile t = WorldController.World.GetTileAt(x, y);

                    if (t != null)
                    {
                        bmc.DoBuild(t);
                    }
                }
            }
        }
    }
Ejemplo n.º 6
0
    /// <summary>
    /// updates the info of the object, and it's surrounding tiles,
    /// and checks to make sure the position that the object is attempting to be placed at is valid
    /// </summary>
    /// <param name="obj">Object that is trying to be moved</param>
    /// <param name="pos">position that the object is trying to be placed at</param>
    /// <param name="rotLevel">rotLevel, which helps to determine the position and rotation of the object</param>
    /// <param name="moveNeighbors">moveNeighbors, defaults to true and determines whether the Object's neighbors should be moved</param>
    public static void MoveObject(Object obj, Vector3 pos, int rotLevel, bool moveNeighbors = true)
    {
        switch (obj.type)
        {
        case ObjType.Wall:
            Wall.MoveObject((Wall)obj, pos, rotLevel, moveNeighbors);
            break;

        case ObjType.Table:
            Table.MoveObject((Table)obj, pos, rotLevel, moveNeighbors);
            break;

        case ObjType.Chair:
            Chair.MoveObject((Chair)obj, pos, rotLevel, moveNeighbors);
            break;

        default:
            BuildModeController bmc = WorldController.Instance.MouseController.bmc;
            Tile prevT = WorldController.Instance.World.GetTileAt(Mathf.RoundToInt(obj.pos.x), Mathf.RoundToInt(obj.pos.z), bmc.ActiveFloor);
            Tile newT  = WorldController.Instance.World.GetTileAt(Mathf.RoundToInt(pos.x), Mathf.RoundToInt(pos.z), bmc.ActiveFloor);
            if (moveNeighbors == true && obj.connectsToNeighbors == true)
            {
                foreach (Object n in obj.neighbors)
                {
                    Vector3 nPos  = pos - (obj.pos - n.pos);
                    Tile    nNewT = WorldController.Instance.World.GetTileAt(Mathf.RoundToInt(nPos.x), Mathf.RoundToInt(nPos.z), bmc.ActiveFloor);
                    foreach (Object otherObj in nNewT.objs)
                    {
                        if (otherObj.pos == nPos && otherObj != n && n.neighbors.Contains(otherObj) == false)
                        {
                            Debug.LogError("MoveObject: Trying to place an Object where there is already one");
                            return;
                        }
                    }
                    if (nNewT.Type == TileType.Empty)
                    {
                        Debug.LogError("MoveObject: Trying to assign an Object to an empty tile!");
                        return;
                    }
                }
            }
            else
            {
                foreach (Object otherObj in newT.objs)
                {
                    if (otherObj.pos == pos && otherObj != obj && obj.neighbors.Contains(otherObj) == false)
                    {
                        Debug.LogError("MoveObject: Trying to place an Object where there is already one");
                        return;
                    }
                }
                if (newT.Type == TileType.Empty)
                {
                    Debug.LogError("MoveObject: Trying to assign an Object to an empty tile!");
                    return;
                }
            }
            if (prevT.objs.Contains(obj) == true)
            {
                prevT.objs.Remove(obj);
            }
            if (obj.tiles.Contains(prevT) == true)
            {
                obj.tiles.Remove(prevT);
            }
            Vector3 diffPos = pos - obj.pos;
            diffPos.y   = 0;
            obj.diffPos = diffPos;
            //obj.pos = new Vector3(newT.x,obj.defaultY + (2.75f * bmc.ActiveFloor),newT.y);
            obj.pos = new Vector3(newT.x, obj.defaultY, newT.y);
            if (obj.connectsToNeighbors == true && Object.moveNeighbors == true && moveNeighbors == true)
            {
                obj.MoveNeighbors(obj);
            }
            Quaternion rot = Quaternion.identity;
            rot.eulerAngles = new Vector3(0f, 90f * rotLevel, 0f);
            obj.rot         = rot;
            newT.objs.Add(obj);
            obj.tiles.Add(newT);
            if (obj.cbObjectChanged != null)
            {
                obj.cbObjectChanged(obj);
            }
            break;
        }
    }
Ejemplo n.º 7
0
    void UpdateDragging()
    {
        // If we're over a UI element, then bail out from this.
        if (EventSystem.current.IsPointerOverGameObject())
        {
            return;
        }

        // Start Drag
        if (Input.GetMouseButtonDown(0))
        {
            dragStartPosition = currFramePosition;
        }

        int start_x = Mathf.FloorToInt(dragStartPosition.x);
        int end_x   = Mathf.FloorToInt(currFramePosition.x);
        int start_y = Mathf.FloorToInt(dragStartPosition.y);
        int end_y   = Mathf.FloorToInt(currFramePosition.y);

        // We may be dragging in the "wrong" direction, so flip things if needed.
        if (end_x < start_x)
        {
            int tmp = end_x;
            end_x   = start_x;
            start_x = tmp;
        }
        if (end_y < start_y)
        {
            int tmp = end_y;
            end_y   = start_y;
            start_y = tmp;
        }

        // Clean up old drag previews
        while (dragPreviewGameObjects.Count > 0)
        {
            GameObject go = dragPreviewGameObjects[0];
            dragPreviewGameObjects.RemoveAt(0);
            SimplePool.Despawn(go);
        }

        if (Input.GetMouseButton(0))
        {
            // Display a preview of the drag area
            for (int x = start_x; x <= end_x; x++)
            {
                for (int y = start_y; y <= end_y; y++)
                {
                    Tile t = WorldController.Instance.world.GetTileAt(x, y);
                    if (t != null)
                    {
                        // Display the building hint on top of this tile position
                        GameObject go = SimplePool.Spawn(circleCursorPrefab, new Vector3(x, y, 0), Quaternion.identity);
                        go.transform.SetParent(this.transform, true);
                        dragPreviewGameObjects.Add(go);
                    }
                }
            }
        }

        // End Drag
        if (Input.GetMouseButtonUp(0))
        {
            BuildModeController bmc = GameObject.FindObjectOfType <BuildModeController>();
            // Loop through all the tiles
            for (int x = start_x; x <= end_x; x++)
            {
                for (int y = start_y; y <= end_y; y++)
                {
                    Tile t = WorldController.Instance.world.GetTileAt(x, y);
                    if (t == null)
                    {
                        continue;
                    }
                    bmc.DoBuild(t);
                }
            }
        }
    }
    void UpdateDragging()
    {
        //if we are over a UI element, bail out !!
        if (EventSystem.current.IsPointerOverGameObject())
        {
            return;
        }


        //Start drag
        //down, ça veut dire que on a cliqué sur les frames précédentes
        if (Input.GetMouseButtonDown(0))
        {
            dragStartPosition = currFramePosition;
        }

        int start_x = Mathf.FloorToInt(dragStartPosition.x);
        int end_x   = Mathf.FloorToInt(currFramePosition.x);
        int start_y = Mathf.FloorToInt(dragStartPosition.y);
        int end_y   = Mathf.FloorToInt(currFramePosition.y);

        // on swappe si en drag & drop vers la gauche la "mauvaise" direction
        //perso je trouve ça sale

        if (end_x < start_x)
        {
            int tmp = end_x;
            end_x   = start_x;
            start_x = tmp;
        }
        if (end_y < start_y)
        {
            int tmp = end_y;
            end_y   = start_y;
            start_y = tmp;
        }

        //clean up old drag previews
        //tant que y'a un gameobject dans dragpreviewmescouilles, (si y'en a un avec l'entree [0] ) tu l'enlève et le delete
        while (dragPreviewGameObjects.Count > 0)
        {
            GameObject go = dragPreviewGameObjects[0];
            dragPreviewGameObjects.RemoveAt(0);
            //au lieu de le delete, on va le despawn du simplepool, comme ça ça évite de créer détruire à mort plein d'éléments
            //ça fait économiser des ressources
            SimplePool.Despawn(go);
        }

        //juste le getmousedbutton, ça veut dire qu'on viens JUSTE de clique, sur CETTE frame
        if (Input.GetMouseButton(0))
        {
            //display a preview of the drag area
            for (int x = start_x; x <= end_x; x++)
            {
                for (int y = start_y; y <= end_y; y++)
                {
                    Tile t = WorldController.Instance.world.GetTileAt(x, y);
                    if (t != null)
                    {
                        //display the building hint on top of this tile positon
                        //Quaternion.identity c'est pour créer un vector sans rotation
                        // on créé un gameobject qui s'appelle go, et on l'ajoute (add) a la liste de gameobject dragpreviewmescouilles
                        //et on le créé avec le script en CC simplepool
                        GameObject go = SimplePool.Spawn(circleCursorPrefab, new Vector3(x, y, 0), Quaternion.identity);

                        //ça permet juste de faire en sorte que les novueaux objets go soient apparentés à mousecontroller
                        //c'est plus propre dans la hierarchy des objets créés
                        go.transform.SetParent(this.transform, true);

                        dragPreviewGameObjects.Add(go);
                    }
                }
            }
        }


        //end drag (drop)
        if (Input.GetMouseButtonUp(0))
        {
            BuildModeController bmc = GameObject.FindObjectOfType <BuildModeController>();

            //go on loope through all the tiles
            for (int x = start_x; x <= end_x; x++)
            {
                for (int y = start_y; y <= end_y; y++)
                {
                    Tile t = WorldController.Instance.world.GetTileAt(x, y);

                    if (t != null)
                    {
                        // call BuildMOdeController :: DoBuild()
                        bmc.DoBuild(t);
                    }
                }
            }
        }
    }