Ejemplo n.º 1
0
 public Ship(ShipType type, GridPosition front, GridPosition rear, int length, bool isHorizontal)
 {
     this.type = type;
     occupiedSquares = new GridPosition[length];
     this.length = length;
     occupiedSquares[0] = front;
     if (isHorizontal)
     {
         int difference = rear.x - front.x;
         for (int x = 1; x < length; x++)
         {
             occupiedSquares[x] = new GridPosition(0, 0);
             if (difference > 0)
                 occupiedSquares[x].x = front.x + x;
             else if (difference < 0)
                 occupiedSquares[x].x = front.x - x;
             occupiedSquares[x].y = front.y;
         }
     }
     else if (isHorizontal == false)
     {
         int difference = front.y - rear.y;
         for (int y = 1; y < length; y++)
         {
             occupiedSquares[y] = new GridPosition(0, 0);
             if (difference > 0)
                 occupiedSquares[y].y = front.y - y;
             else if (difference < 0)
                 occupiedSquares[y].y = front.y + y;
             occupiedSquares[y].x = front.x;
         }
     }
 }
Ejemplo n.º 2
0
	/**
	 * Update objects position
	 */ 
	override public void SetPosition(GridPosition pos) {
		Vector3 position = grid.GridPositionToWorldPosition(pos);
		widget.depth = 999 - (int)position.z;
		position.z = target.localPosition.z;
		target.localPosition = position;
		myPosition = target.localPosition;
	}
	/**
	 * Update objects position
	 */ 
	override public void SetPosition(GridPosition pos) {
		Vector3 position = grid.GridPositionToWorldPosition(pos);
		widget.depth = 1000 - (int)position.z;
		position.z = target.localPosition.z;
		target.localPosition = position;
		myPosition = target.localPosition;
		// Force in front
		if 	(building.State == BuildingState.MOVING || building.State == BuildingState.PLACING)  widget.depth = 5000;
	}
Ejemplo n.º 4
0
 public Node(int x, int y, float G, float F, float H, Node parent, GridPosition c)
 {
     this.x = x;
     this.y = y;
     this.G = G;
     this.H = H;
     this.F = F;
     this.parent = parent;
     this.cell = c;
 }
	virtual public bool CanObjectBePlacedAtPosition(GridPosition[] shape, GridPosition position) {
		GridPosition newPosition;
		foreach (GridPosition g in shape) {
			newPosition = position + g;
			if (newPosition.x < 0 || newPosition.x >= grid.GetLength(0)) return false;
			if (newPosition.y < 0 || newPosition.y >= grid.GetLength(1)) return false;
			if (grid[newPosition.x, newPosition.y] != null) return false;
		}
		return true;
	}
	virtual public void AddObjectAtPosition(IGridObject gridObject, GridPosition position) {

		List<GridPosition> gridPosisitons = new List<GridPosition>();
		GridPosition newPosition;
		foreach (GridPosition g in gridObject.Shape) {
			newPosition = position + g;
			gridPosisitons.Add (newPosition);
			grid[newPosition.x, newPosition.y] = gridObject;
		}
		gridObjects.Add(gridObject, gridPosisitons);
	}
	/**
	 * Initialise the building with the given type and position.
	 */ 
	override public void Init(BuildingTypeData type, GridPosition pos){
		data = new UpgradableBuildingData();
		((UpgradableBuildingData)data).level = 1;
		uid = System.Guid.NewGuid ().ToString ();
		Position = pos;
		this.Type = type;
		State = BuildingState.PLACING;
		CurrentActivity = null;
		CompletedActivity = null;
		view = gameObject;
		view.SendMessage ("UI_Init", this);
		view.SendMessage("SetPosition", data.position);
	}
Ejemplo n.º 8
0
        public Move GetMove(GameGrid grid)
        {
            string input = null;
            do
            {
                Console.WriteLine($"{PlayerName}, please enter your move (column, row)");
                input = Console.ReadLine();
            }
            while (!IsValidInput(input));

            var pos = new GridPosition(input[0], int.Parse(input.Substring(1)));
            return new Move(pos, PlayerSide);
        }
	override public Vector3 GridPositionToWorldPosition(GridPosition position, List<GridPosition> shape) {
		float x = (gridWidth / 2) * (position.x - position.y);
        float y = (gridHeight / 2)*  (position.x + position.y);
		float sz = 9999.0f;
		float lz= -9999.0f;
		float tsz;
		
		// TODO Clean up and fix to cater for even odder shapes
		foreach (GridPosition pos in shape) {
			tsz = ((position.y + pos.y) * (gridHeight / 2)) + ((position.x + pos.x)* (gridHeight / 2)) - 2;
			if (sz >= tsz) sz = tsz;
			if (lz <= tsz) lz = tsz;
		}
		
		return new Vector3(x, y, ((lz + sz) / 2.0f) );

	}
Ejemplo n.º 10
0
 public static int GetDistanceBetweenGridPositions(GridPosition from, GridPosition to)
 {
     return(Mathf.Abs(from.Col - to.Col) + Mathf.Abs(from.Row - to.Row));
 }
Ejemplo n.º 11
0
 public static GameEntity GetEntityWithPosition(this GameContext context, GridPosition value)
 {
     return(((Entitas.PrimaryEntityIndex <GameEntity, GridPosition>)context.GetEntityIndex(Contexts.Position)).GetEntity(value));
 }
Ejemplo n.º 12
0
    /// <summary>
    /// Reads actions/positon from settings.
    /// </summary>
    private void ReadPositions()
    {
      if (_menuSettings == null)
      {
        _menuSettings = new SettingsChangeWatcher<MenuSettings>();
        _menuSettings.SettingsChanged += OnSettingsChanged;
      }
      var menuSettings = _menuSettings.Settings;
      if (menuSettings.MenuItems.Count == 0)
      {
        menuSettings.MainMenuGroupNames = new List<GroupItemSetting>
        {
          new GroupItemSetting { Name = MenuSettings.MENU_NAME_HOME,        Id = new Guid(MenuSettings.MENU_ID_HOME)}, 
          new GroupItemSetting { Name = MenuSettings.MENU_NAME_IMAGE,       Id = new Guid(MenuSettings.MENU_ID_IMAGE)}, 
          new GroupItemSetting { Name = MenuSettings.MENU_NAME_AUDIO,       Id = new Guid(MenuSettings.MENU_ID_AUDIO)}, 
          new GroupItemSetting { Name = MenuSettings.MENU_NAME_MEDIAHUB,    Id = new Guid(MenuSettings.MENU_ID_MEDIAHUB)},
          new GroupItemSetting { Name = MenuSettings.MENU_NAME_TV,          Id = new Guid(MenuSettings.MENU_ID_TV)}, 
          new GroupItemSetting { Name = MenuSettings.MENU_NAME_NEWS,        Id = new Guid(MenuSettings.MENU_ID_NEWS)}, 
          new GroupItemSetting { Name = MenuSettings.MENU_NAME_SETTINGS,    Id = new Guid(MenuSettings.MENU_ID_SETTINGS)}, 
          new GroupItemSetting { Name = MenuSettings.MENU_NAME_OTHERS,      Id = new Guid(MenuSettings.MENU_ID_OTHERS)}
        };
        menuSettings.DefaultMenuGroupId = MenuSettings.MENU_ID_MEDIAHUB;

        var positions = new SerializableDictionary<Guid, GridPosition>();
        positions[new Guid("A4DF2DF6-8D66-479a-9930-D7106525EB07")] = new GridPosition { Column = 0, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_NORMAL, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_NORMAL }; // Videos
        positions[new Guid("80D2E2CC-BAAA-4750-807B-F37714153751")] = new GridPosition { Column = 0, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_NORMAL, Row = MenuSettings.DEFAULT_ROWSPAN_NORMAL, RowSpan = MenuSettings.DEFAULT_ROWSPAN_NORMAL }; // Movies
        positions[new Guid("30F57CBA-459C-4202-A587-09FFF5098251")] = new GridPosition { Column = MenuSettings.DEFAULT_COLSPAN_NORMAL, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_NORMAL, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_NORMAL }; // Series
        positions[new Guid("C33E39CC-910E-41C8-BFFD-9ECCD340B569")] = new GridPosition { Column = MenuSettings.DEFAULT_COLSPAN_NORMAL, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_NORMAL, Row = MenuSettings.DEFAULT_ROWSPAN_NORMAL, RowSpan = MenuSettings.DEFAULT_ROWSPAN_NORMAL }; // OnlineVideos

        positions[new Guid("93442DF7-186D-42e5-A0F5-CF1493E68F49")] = new GridPosition { Column = 2 * MenuSettings.DEFAULT_COLSPAN_NORMAL, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_LARGE, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_LARGE }; // Browse Media
        positions[new Guid("17D2390E-5B05-4fbd-89F6-24D60CEB427F")] = new GridPosition { Column = 2 * MenuSettings.DEFAULT_COLSPAN_NORMAL, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_LARGE, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_LARGE }; // Browse Local (exclusive)
        menuSettings.MenuItems[MenuSettings.MENU_NAME_MEDIAHUB] = positions;

        positions = new SerializableDictionary<Guid, GridPosition>();
        positions[new Guid("55556593-9FE9-436c-A3B6-A971E10C9D44")] = new GridPosition { Column = 2 * MenuSettings.DEFAULT_COLSPAN_NORMAL, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_LARGE, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_LARGE }; // Images
        menuSettings.MenuItems[MenuSettings.MENU_NAME_IMAGE] = positions;

        positions = new SerializableDictionary<Guid, GridPosition>();
        positions[new Guid("94961A9E-4C81-4bf7-9EE4-DF9712C3DCF2")] = new GridPosition { Column = 2 * MenuSettings.DEFAULT_COLSPAN_NORMAL, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_LARGE, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_LARGE }; // Images
        menuSettings.MenuItems[MenuSettings.MENU_NAME_HOME] = positions;

        positions = new SerializableDictionary<Guid, GridPosition>();
        positions[new Guid("30715D73-4205-417f-80AA-E82F0834171F")] = new GridPosition { Column = 0, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_NORMAL, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_NORMAL }; // Audio
        positions[new Guid("E00B8442-8230-4D7B-B871-6AC77755A0D5")] = new GridPosition { Column = MenuSettings.DEFAULT_COLSPAN_NORMAL, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_LARGE, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_LARGE }; // PartyMusicPlayer
        positions[new Guid("2DED75C0-5EAE-4E69-9913-6B50A9AB2956")] = new GridPosition { Column = MenuSettings.DEFAULT_COLSPAN_NORMAL + MenuSettings.DEFAULT_COLSPAN_LARGE, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_NORMAL, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_NORMAL }; // WebRadio
        menuSettings.MenuItems[MenuSettings.MENU_NAME_AUDIO] = positions;

        positions = new SerializableDictionary<Guid, GridPosition>();
        positions[new Guid("B4A9199F-6DD4-4bda-A077-DE9C081F7703")] = new GridPosition { Column = 0, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_LARGE, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_LARGE }; // TV Home
        positions[new Guid("A298DFBE-9DA8-4C16-A3EA-A9B354F3910C")] = new GridPosition { Column = MenuSettings.DEFAULT_COLSPAN_LARGE, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_NORMAL, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_NORMAL }; // Apollo EPG Link
        positions[new Guid("7F52D0A1-B7F8-46A1-A56B-1110BBFB7D51")] = new GridPosition { Column = MenuSettings.DEFAULT_COLSPAN_LARGE + MenuSettings.DEFAULT_COLSPAN_NORMAL, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_NORMAL, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_NORMAL }; // Apollo Recordings Link
        positions[new Guid("87355E05-A15B-452A-85B8-98D4FC80034E")] = new GridPosition { Column = MenuSettings.DEFAULT_COLSPAN_LARGE, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_NORMAL, Row = MenuSettings.DEFAULT_ROWSPAN_NORMAL, RowSpan = MenuSettings.DEFAULT_ROWSPAN_NORMAL }; // Apollo Schedules Link
        menuSettings.MenuItems[MenuSettings.MENU_NAME_TV] = positions;

        positions = new SerializableDictionary<Guid, GridPosition>();
        positions[new Guid("BB49A591-7705-408F-8177-45D633FDFAD0")] = new GridPosition { Column = 0, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_LARGE, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_NORMAL }; // News
        positions[new Guid("BD93C5B3-402C-40A2-B323-DA891ED5F50E")] = new GridPosition { Column = 0, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_LARGE, Row = MenuSettings.DEFAULT_ROWSPAN_NORMAL, RowSpan = MenuSettings.DEFAULT_ROWSPAN_NORMAL }; // Kino
        positions[new Guid("E34FDB62-1F3E-4aa9-8A61-D143E0AF77B5")] = new GridPosition { Column = 2 * MenuSettings.DEFAULT_COLSPAN_NORMAL, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_LARGE, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_LARGE }; // Weather
        menuSettings.MenuItems[MenuSettings.MENU_NAME_NEWS] = positions;

        positions = new SerializableDictionary<Guid, GridPosition>();
        positions[new Guid("F6255762-C52A-4231-9E67-14C28735216E")] = new GridPosition { Column = 2 * MenuSettings.DEFAULT_COLSPAN_NORMAL, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_LARGE, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_LARGE }; // Configuration
        menuSettings.MenuItems[MenuSettings.MENU_NAME_SETTINGS] = positions;

        ServiceRegistration.Get<ISettingsManager>().Save(menuSettings);
      }
      //_menuSettings = menuSettings;
      if (_menuSettings.Settings.MainMenuGroupNames.All(key => key.Name != MenuSettings.MENU_NAME_OTHERS))
      {
        _menuSettings.Settings.MainMenuGroupNames.Add(new GroupItemSetting { Name = MenuSettings.MENU_NAME_OTHERS, Id = new Guid(MenuSettings.MENU_ID_OTHERS) });
        ServiceRegistration.Get<ISettingsManager>().Save(menuSettings);
      }
    }
Ejemplo n.º 13
0
    public void FindPath(GridPosition startCell, GridPosition goalCell, GridPosition[,] map, bool targetCellMustBeFree)
    {
        this.map = map;
        this.mapWidth = map.GetLength(0);
        this.mapHeight = map.GetLength(1);

        start = new Node(startCell.X, startCell.Z, 0, 0, 0, null, startCell);
        end = new Node(goalCell.X, goalCell.Z, 0, 0, 0, null, goalCell);
        openList.Add(start);

        bool keepSearching = true;
        bool pathExists = true;

        while ((keepSearching) && (pathExists))
        {
            Node currentNode = ExtractBestNodeFromOpenList();
            if (currentNode == null)
            {
                pathExists = false;
                Debug.Log("No valid path found");
                break;
            }
            closeList.Add(currentNode);
            if (NodeIsGoal(currentNode))
            {
                keepSearching = false;
            }
            else
            {
                if (targetCellMustBeFree)
                    FindValidFourNeighbours(currentNode);
                else
                    FindValidFourNeighboursIgnoreTargetCell(currentNode);

                foreach (Node neighbour in neighbours)
                {
                    if (FindInCloseList(neighbour) != null)
                        continue;
                    Node inOpenList = FindInOpenList(neighbour);
                    if (inOpenList == null)
                    {
                        openList.Add(neighbour);
                    }
                    else
                    {
                        if (neighbour.G < inOpenList.G)
                        {
                            inOpenList.G = neighbour.G;
                            inOpenList.F = inOpenList.G + inOpenList.H;
                            inOpenList.parent = currentNode;
                        }
                    }
                }
            }
        }

        if (pathExists)
        {
            Node n = FindInCloseList(end);
            while (n != null)
            {
                finalPath.Add(n);
                n = n.parent;
            }
        }
        else
        {
            Debug.Log("!pathExists");
        }
    }
 //Get all of the valid neighbourds of a particular grid position
 public List<GridPosition> GetNeighbours(GridPosition gridPosition, int distance = 1)
 {
     var neighbours = new List<GridPosition>();
     //Get the neighbours within x distance
     for(var x = -distance; x <= distance; x ++ )
     {
         for(var y = -distance; y <= distance; y ++)
         {
             var currentPosition = gridPosition + new GridPosition { x = x, y = y };
             //Verify that that the cell is in the actual map
             if(currentPosition.x >= 0 && currentPosition.y >= 0 && currentPosition.x < width && currentPosition.y < height)
                 neighbours.Add(currentPosition);
         }
     }
     return neighbours;
 }
	override public Vector3 GridPositionToWorldPosition(GridPosition position){
		return GridPositionToWorldPosition(position, new List<GridPosition> (GridPosition.DefaultShape));
	}
Ejemplo n.º 16
0
 public WalkableArea(GridPosition position)
 {
     this.position = position;
 }
Ejemplo n.º 17
0
 /// <summary>
 /// Tries to move the agent in the specified horizontal and vertical direction using the specified CanAgentMoveBy method
 /// to check whether the agent can move in that direction from it's current position.
 /// </summary>
 /// <param name="hDir">Horizontal dir.</param>
 /// <param name="vDir">Vertical dir.</param>
 /// <param name="CanMove">Method that will be used to check whether the agent can move in that direction from it's current position.</param>
 public void Move(HorizontalDirection hDir, VerticalDirection vDir, CanAgentMoveByDelegate CanMove)
 {
     if(hDir == HorizontalDirection.None && vDir == VerticalDirection.None)
     {
         return;
     }
     int xInc = 0, yInc = 0, layerInc = 0;
     switch(hDir)
     {
     case HorizontalDirection.North:
         yInc = 1;
         break;
     case HorizontalDirection.NorthEast:
         yInc = 1;
         xInc = 1;
         break;
     case HorizontalDirection.East:
         xInc = 1;
         break;
     case HorizontalDirection.SouthEast:
         yInc = - 1;
         xInc = 1;
         break;
     case HorizontalDirection.South:
         yInc = - 1;
         break;
     case HorizontalDirection.SouthWest:
         yInc = - 1;
         xInc = - 1;
         break;
     case HorizontalDirection.West:
         xInc = - 1;
         break;
     case HorizontalDirection.NorthWest:
         yInc = 1;
         xInc = - 1;
         break;
     }
     switch(vDir)
     {
     case VerticalDirection.Up:
         layerInc = 1;
         break;
     case VerticalDirection.Down:
         layerInc = - 1;
         break;
     }
     // Call delegate method to determine if the agent can move to that cell
     int outX, outY, outLayer;
     if(CanMove(xInc, yInc, layerInc, out outX, out outY, out outLayer))
     {
         // Move to cell
         CellCoords += new GridPosition(outX, outY, outLayer);
         transform.position += new Vector3(outX * Grid.CellWidth, outY * Grid.CellDepth + outLayer * Grid.CellHeight, 0);
         rend.sortingOrder = CellCoords.Layer - CellCoords.Y;
     }
 }
Ejemplo n.º 18
0
 bool IsWithinBrushSelector(GridPosition pos)
 {
     return(pos.X == GridPosition.GRID_SIZE + 1 && pos.Y < 11);
 }
Ejemplo n.º 19
0
 bool IsOutOfBounds(GridPosition pos)
 {
     return(!(pos.X >= 0 && pos.X < 19 && pos.Y >= 0 && pos.Y < 16));
 }
Ejemplo n.º 20
0
 public List<GridPosition> FindPath(GridPosition origin, GridPosition goal)
 {
     AStar pathFinder = new AStar();
     pathFinder.FindPath(origin, goal, points, true);
     return pathFinder.CellsFromPath();
 }
Ejemplo n.º 21
0
    public bool validatePlacement(GameObject card)
    {
        int maxTile = (int)Math.Sqrt(GameManager.Instance.Tiles.Count);
        Dictionary <GridPosition, TileManager> tempDict = GameManager.Instance.Tiles;
        int          leftTile  = position.xPosition - 1;
        int          rightTile = position.xPosition + 1;
        int          upTile    = position.yPosition - 1;
        int          downTile  = position.yPosition + 1;
        GridPosition left      = null;
        GridPosition down      = null;
        GridPosition up        = null;
        GridPosition right     = null;;

        //had to perform these annoying gymnastics becaue the Dictionary wasn't cooperating?
        foreach (KeyValuePair <GridPosition, TileManager> t in tempDict)
        {
            if (t.Key.xPosition == leftTile && t.Key.yPosition == position.yPosition)
            {
                left = t.Key;
            }
            else if (t.Key.xPosition == rightTile && t.Key.yPosition == position.yPosition)
            {
                right = t.Key;
            }
            else if (position.xPosition == t.Key.xPosition && t.Key.yPosition == upTile)
            {
                up = t.Key;
            }
            else if (position.xPosition == t.Key.xPosition && t.Key.yPosition == downTile)
            {
                down = t.Key;
            }
        }

        if (leftTile >= 0)
        {
            if (!(tempDict[left].card is null))
            {
                int[] tempArr = tempDict[left].card.GetComponent <CardManager>().arrows;

                if ((tempArr[1] == 1 && GameManager.Instance.arrows[3] == 2) ||
                    (tempArr[1] == 2 && GameManager.Instance.arrows[3] == 1))
                {
                    return(true);
                }
            }
        }

        if (rightTile <= maxTile)
        {
            if (!(tempDict[right].card is null))
            {
                int[] tempArr = tempDict[right].card.GetComponent <CardManager>().arrows;

                if ((tempArr[3] == 1 && GameManager.Instance.arrows[1] == 2) ||
                    (tempArr[3] == 2 && GameManager.Instance.arrows[1] == 1))
                {
                    return(true);
                }
            }
        }

        if (upTile >= 0)
        {
            if (!(tempDict[up].card is null))
            {
                int[] tempArr = tempDict[up].card.GetComponent <CardManager>().arrows;

                if ((tempArr[2] == 1 && GameManager.Instance.arrows[0] == 2) ||
                    (tempArr[2] == 2 && GameManager.Instance.arrows[0] == 1))
                {
                    return(true);
                }
            }
        }

        if (downTile <= maxTile)
        {
            if (!(tempDict[down].card is null))
            {
                int[] tempArr = tempDict[down].card.GetComponent <CardManager>().arrows;
                Debug.Log("testing up and down tile" + tempDict[down].card.GetComponent <CardManager>().name);

                if ((tempArr[0] == 1 && GameManager.Instance.arrows[2] == 2) ||
                    (tempArr[0] == 2 && GameManager.Instance.arrows[2] == 1))
                {
                    Debug.Log("tempArr[0]= " + tempArr[0] + " cardBot= " + card.GetComponent <CardManager>().arrows[2]);
                    return(true);
                }
            }
        }

        return(false);
    }
 public void OnPosition(GameEntity entity, GridPosition value)
 {
     _targetPosition = value.ToVector3();
 }
 override public Vector3 GridPositionToWorldPosition(GridPosition position)
 {
     return(GridPositionToWorldPosition(position, new List <GridPosition> (GridPosition.DefaultShape)));
 }
Ejemplo n.º 24
0
 public PathRequest(GridPosition _start, GridPosition _end, Action <List <Cell>, bool> _callback)
 {
     pathStart = _start;
     pathEnd   = _end;
     callback  = _callback;
 }
	abstract public Vector3 GridPositionToWorldPosition(GridPosition position, List<GridPosition> shape);
    private void Update()
    {
        float vertical   = Input.GetAxis("Vertical");
        float horizontal = Input.GetAxis("Horizontal");
        bool  enter      = Input.GetButtonDown("Submit");
        bool  back       = Input.GetButtonDown("Back");

        if (panelUIActive)
        {
            if (back)
            {
                playerUnitUIPanel.SetActive(false);
                enemyUnitUIPanel.SetActive(false);
                panelUIActive = false;
            }
        }
        else if (placingUnit)
        {
            if (vertical > 0)
            {
                unitBeingPlaced.GetComponent <UnitController>().facing = Facing.Left;
            }
            if (vertical < 0)
            {
                unitBeingPlaced.GetComponent <UnitController>().facing = Facing.Right;
            }
            if (horizontal > 0)
            {
                unitBeingPlaced.GetComponent <UnitController>().facing = Facing.Back;
            }
            if (horizontal < 0)
            {
                unitBeingPlaced.GetComponent <UnitController>().facing = Facing.Forward;
            }
            if (back)
            {
                unitBeingPlaced.transform.position = unitsOriginalLocation;
                placingUnit = false;
                movingUnit  = false;
            }
            else if (enter)
            {
                placingUnit = false;
                movingUnit  = false;
            }
        }
        else
        {
            //resonsible for moving cursor when nothing is selected
            if (!(Time.time < nextCursorMoveAllowed))
            {
                GridPosition startPostion = new GridPosition(cursorPosition.x, cursorPosition.y, cursorPosition.elevation);
                if (vertical > 0)
                {
                    cursorPosition.y++;
                }
                if (vertical < 0)
                {
                    cursorPosition.y--;
                }
                if (horizontal > 0)
                {
                    cursorPosition.x++;
                }
                if (horizontal < 0)
                {
                    cursorPosition.x--;
                }

                if (cursorPosition.y < 0)
                {
                    cursorPosition.y = 0;
                }
                if (cursorPosition.x < 0)
                {
                    cursorPosition.x = 0;
                }
                if (cursorPosition.y > maxCursorYPos)
                {
                    cursorPosition.y = maxCursorYPos;
                }
                if (cursorPosition.x > maxCursorXPos)
                {
                    cursorPosition.x = maxCursorXPos;
                }
                if (movingUnit)
                {
                    if (levelController.possibleMoves.Contains(cursorPosition))
                    {
                        updateCursor();
                    }
                    else
                    {
                        cursorPosition = startPostion;
                    }
                }
                else
                {
                    updateCursor();
                }
                if (movingUnit && back)
                {
                    movingUnit     = false;
                    selectedObject = null;
                    levelController.selectedUnit = null;
                }

                nextCursorMoveAllowed = Time.time + cursorDelay;
            }
            GameObject tempSelect = cursor.GetComponent <CursorController>().objectInTile;
            if (tempSelect != null && !movingUnit)
            {
                if (enter)
                {
                    selectObject(cursor.GetComponent <CursorController>().objectInTile);
                    unitsOriginalLocation = selectedObject.transform.position;
                }
            }
            else
            {
                if (movingUnit && enter)
                {
                    levelController.moveUnitGroup(cursorPosition);
                    //moveUnitTo(cursor.transform.position + new Vector3(0, .5f));
                    movingUnit      = false;
                    placingUnit     = true;
                    unitBeingPlaced = selectedObject;
                    selectedObject  = null;
                    levelController.selectedUnit = null;
                }
                if (enter && !movingUnit)
                {
                    selectedObject = null;
                    levelController.selectedUnit = null;
                }
            }
        }
    }
Ejemplo n.º 27
0
 public virtual void AttachGrid()
 {
     gridPosition = gameObject.GetComponent<GridPosition>();
     gridPosition.Grid = GameObject.
        FindGameObjectWithTag("GameController").transform;
 }
Ejemplo n.º 28
0
        /// <summary>
        /// Get the value of the Generator in world space.
        /// </summary>
        /// <param name="x">X coordinate in resolution</param>
        /// <param name="y">Y coordinate in resolution</param>
        /// <param name="position">Position in Terra grid units</param>
        /// <param name="resolution">Resolution of this Tile being sampled</param>
        public float GetValue(int x, int y, GridPosition position, int resolution)
        {
            GenerationData gen = TerraConfig.Instance.Generator;

            return(GetValue(x, y, position, resolution, gen.Spread, gen.Length));
        }
 //Calculate the cost of moving between two nodes
 //later this can take into consideration more than
 //just distance
 float GetWeightOfMovingBetween(GridPosition p1, GridPosition p2)
 {
     return 1;
 }
Ejemplo n.º 30
0
 public int GetGridDistance(GridPosition startingPosition)
 {
     return(Mathf.Abs(startingPosition.x - _gridPosition.x) + Mathf.Abs(startingPosition.y - _gridPosition.y));
 }
Ejemplo n.º 31
0
 private bool IsPositionOutOfBounds(GridPosition gridPosition)
 {
     return(gridPosition.XPos > GridBoundary.XPos || gridPosition.XPos < 0 ||
            gridPosition.YPos > GridBoundary.YPos || gridPosition.YPos < 0);
 }
Ejemplo n.º 32
0
 public TileController GetAnotherTile(GridPosition tilePosition)
 {
     return(_myBoard.GetTile(tilePosition));
 }
Ejemplo n.º 33
0
        // Add all seleced shapes into the grid
        /// <ToBeCompleted></ToBeCompleted>
        protected virtual void ArrangeShapes(int ox, int oy, int sx, int sy)
        {
            lastCommand = new MoveShapesCommand();

            SortedList <GridPosition, Shape> positionAssignments
                = new SortedList <GridPosition, Shape>(selectedShapes.Count, new GridPositionComparer());

            foreach (Shape s in selectedShapes)
            {
                GridPosition gp;
                gp.col = (s.X - ox + (s.X > ox? sx / 2: -sx / 2)) / sx;
                gp.row = (s.Y - oy + (s.Y > oy? sy / 2: -sy / 2)) / sy;
                gp.dir = -1;
                gp.idx = 0;
                int i = positionAssignments.IndexOfKey(gp);
                if (i >= 0)
                {
                    // Search a free index for this position
                    while (i < positionAssignments.Count && positionAssignments.Keys[i].col == gp.col && positionAssignments.Keys[i].row == gp.row)
                    {
                        ++i;
                    }
                    gp.idx = i;
                }
                positionAssignments.Add(gp, s);
            }
            // Where more than one shape want to go to the same position, select the
            // nearest one and assign the others to the edges.
            int idx = 0;

            while (idx < positionAssignments.Count)
            {
                int          minIdx  = 0;
                int          minDist = int.MaxValue;
                GridPosition gp      = positionAssignments.Keys[idx];
                while (idx < positionAssignments.Count && positionAssignments.Keys[idx].col == gp.col &&
                       positionAssignments.Keys[idx].row == gp.row)
                {
                    GridPosition p    = positionAssignments.Keys[idx];
                    int          dist = CalcDistance(positionAssignments[p].X, ox, sx) + CalcDistance(positionAssignments[p].Y, oy, sy);
                    if (dist < minDist)
                    {
                        minIdx  = idx;
                        minDist = dist;
                    }
                    ++idx;
                }
                // Make the minimum index the shape at the node
                Shape shape = positionAssignments.Values[minIdx];
                positionAssignments.RemoveAt(minIdx);
                --idx;
                lastCommand.AddMove(shape, ox + gp.col * sx - shape.X, oy + gp.row * sy - shape.Y);
            }
            // CopyFrom the other shapes to edges

            /*idx = 0;
             * while (idx < positionAssignments.Count) {
             *      GridPosition gp = positionAssignments.Keys[idx];
             *
             *      if (positionAssignments[gp].Y < oy + gp.row * sy) --gp.row;
             *
             * }*/
            // Move the edge shapes to their respective positions
            idx = 0;
            while (idx < positionAssignments.Count)
            {
                GridPosition gp = positionAssignments.Keys[idx];
                // Count the number of shapes for the same edge
                int startIdx = idx;
                while (idx < positionAssignments.Count && positionAssignments.Keys[idx].col == gp.col &&
                       positionAssignments.Keys[idx].row == gp.row && positionAssignments.Keys[idx].dir == gp.dir)
                {
                    ++idx;
                }
                int count = idx - startIdx;
                // Distribute the shapes along their respective edge
                for (int i = startIdx; i < idx; ++i)
                {
                    if (gp.dir == 0)
                    {
                        // Position on horizontal edge
                        lastCommand.AddMove(positionAssignments[gp],
                                            ox + gp.col * sx + (i - startIdx + 1) * sx / (count + 1) - positionAssignments[gp].X,
                                            oy + gp.row * sy - positionAssignments[gp].Y);
                    }
                    else
                    {
                        // Position on vertical edge
                        lastCommand.AddMove(positionAssignments[gp],
                                            ox + gp.col * sx - positionAssignments[gp].X,
                                            oy + gp.row * sy + (i - startIdx + 1) * sy / (count + 1) - positionAssignments[gp].Y);
                    }
                }
            }
            project.ExecuteCommand(lastCommand);
        }
Ejemplo n.º 34
0
        /// <summary>
        /// Reads actions/positon from settings.
        /// </summary>
        private void ReadPositions()
        {
            var menuSettings = ServiceRegistration.Get <ISettingsManager>().Load <MenuSettings>();

            if (menuSettings.MenuItems.Count == 0)
            {
                menuSettings.MainMenuGroupNames = new List <string> {
                    MenuSettings.MENU_NAME_IMAGE, MenuSettings.MENU_NAME_AUDIO, MenuSettings.MENU_NAME_MEDIAHUB, MenuSettings.MENU_NAME_TV, MenuSettings.MENU_NAME_NEWS, MenuSettings.MENU_NAME_SETTINGS, MenuSettings.MENU_NAME_OTHERS
                };
                menuSettings.DefaultIndex = 2;

                var positions = new SerializableDictionary <Guid, GridPosition>();
                positions[new Guid("A4DF2DF6-8D66-479a-9930-D7106525EB07")] = new GridPosition {
                    Column = 0, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_NORMAL, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_NORMAL
                };                                                                                                                                                                                               // Videos
                positions[new Guid("80D2E2CC-BAAA-4750-807B-F37714153751")] = new GridPosition {
                    Column = 0, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_NORMAL, Row = MenuSettings.DEFAULT_ROWSPAN_NORMAL, RowSpan = MenuSettings.DEFAULT_ROWSPAN_NORMAL
                };                                                                                                                                                                                                                                 // Movies
                positions[new Guid("30F57CBA-459C-4202-A587-09FFF5098251")] = new GridPosition {
                    Column = MenuSettings.DEFAULT_COLSPAN_NORMAL, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_NORMAL, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_NORMAL
                };                                                                                                                                                                                                                                 // Series
                positions[new Guid("C33E39CC-910E-41C8-BFFD-9ECCD340B569")] = new GridPosition {
                    Column = MenuSettings.DEFAULT_COLSPAN_NORMAL, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_NORMAL, Row = MenuSettings.DEFAULT_ROWSPAN_NORMAL, RowSpan = MenuSettings.DEFAULT_ROWSPAN_NORMAL
                };                                                                                                                                                                                                                                                                   // OnlineVideos

                positions[new Guid("93442DF7-186D-42e5-A0F5-CF1493E68F49")] = new GridPosition {
                    Column = 2 * MenuSettings.DEFAULT_COLSPAN_NORMAL, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_LARGE, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_LARGE
                };                                                                                                                                                                                                                                   // Browse Media
                positions[new Guid("17D2390E-5B05-4fbd-89F6-24D60CEB427F")] = new GridPosition {
                    Column = 2 * MenuSettings.DEFAULT_COLSPAN_NORMAL, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_LARGE, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_LARGE
                };                                                                                                                                                                                                                                   // Browse Local (exclusive)
                menuSettings.MenuItems[MenuSettings.MENU_NAME_MEDIAHUB] = positions;

                positions = new SerializableDictionary <Guid, GridPosition>();
                positions[new Guid("55556593-9FE9-436c-A3B6-A971E10C9D44")] = new GridPosition {
                    Column = 2 * MenuSettings.DEFAULT_COLSPAN_NORMAL, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_LARGE, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_LARGE
                };                                                                                                                                                                                                                                   // Images
                menuSettings.MenuItems[MenuSettings.MENU_NAME_IMAGE] = positions;

                positions = new SerializableDictionary <Guid, GridPosition>();
                positions[new Guid("30715D73-4205-417f-80AA-E82F0834171F")] = new GridPosition {
                    Column = 0, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_NORMAL, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_NORMAL
                };                                                                                                                                                                                               // Audio
                positions[new Guid("E00B8442-8230-4D7B-B871-6AC77755A0D5")] = new GridPosition {
                    Column = MenuSettings.DEFAULT_COLSPAN_NORMAL, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_LARGE, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_LARGE
                };                                                                                                                                                                                                                               // PartyMusicPlayer
                positions[new Guid("2DED75C0-5EAE-4E69-9913-6B50A9AB2956")] = new GridPosition {
                    Column = MenuSettings.DEFAULT_COLSPAN_NORMAL + MenuSettings.DEFAULT_COLSPAN_LARGE, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_NORMAL, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_NORMAL
                };                                                                                                                                                                                                                                                                      // WebRadio
                menuSettings.MenuItems[MenuSettings.MENU_NAME_AUDIO] = positions;

                positions = new SerializableDictionary <Guid, GridPosition>();
                positions[new Guid("B4A9199F-6DD4-4bda-A077-DE9C081F7703")] = new GridPosition {
                    Column = 0, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_LARGE, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_LARGE
                };                                                                                                                                                                                             // TV Home
                positions[new Guid("A298DFBE-9DA8-4C16-A3EA-A9B354F3910C")] = new GridPosition {
                    Column = MenuSettings.DEFAULT_COLSPAN_LARGE, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_NORMAL, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_NORMAL
                };                                                                                                                                                                                                                                // Apollo EPG Link
                positions[new Guid("7F52D0A1-B7F8-46A1-A56B-1110BBFB7D51")] = new GridPosition {
                    Column = MenuSettings.DEFAULT_COLSPAN_LARGE + MenuSettings.DEFAULT_COLSPAN_NORMAL, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_NORMAL, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_NORMAL
                };                                                                                                                                                                                                                                                                      // Apollo Recordings Link
                positions[new Guid("87355E05-A15B-452A-85B8-98D4FC80034E")] = new GridPosition {
                    Column = MenuSettings.DEFAULT_COLSPAN_LARGE, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_NORMAL, Row = MenuSettings.DEFAULT_ROWSPAN_NORMAL, RowSpan = MenuSettings.DEFAULT_ROWSPAN_NORMAL
                };                                                                                                                                                                                                                                                                  // Apollo Schedules Link
                menuSettings.MenuItems[MenuSettings.MENU_NAME_TV] = positions;

                positions = new SerializableDictionary <Guid, GridPosition>();
                positions[new Guid("BB49A591-7705-408F-8177-45D633FDFAD0")] = new GridPosition {
                    Column = 0, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_LARGE, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_NORMAL
                };                                                                                                                                                                                              // News
                positions[new Guid("BD93C5B3-402C-40A2-B323-DA891ED5F50E")] = new GridPosition {
                    Column = 0, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_LARGE, Row = MenuSettings.DEFAULT_ROWSPAN_NORMAL, RowSpan = MenuSettings.DEFAULT_ROWSPAN_NORMAL
                };                                                                                                                                                                                                                                // Kino
                positions[new Guid("E34FDB62-1F3E-4aa9-8A61-D143E0AF77B5")] = new GridPosition {
                    Column = 2 * MenuSettings.DEFAULT_COLSPAN_NORMAL, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_LARGE, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_LARGE
                };                                                                                                                                                                                                                                   // Weather
                menuSettings.MenuItems[MenuSettings.MENU_NAME_NEWS] = positions;

                positions = new SerializableDictionary <Guid, GridPosition>();
                positions[new Guid("F6255762-C52A-4231-9E67-14C28735216E")] = new GridPosition {
                    Column = 2 * MenuSettings.DEFAULT_COLSPAN_NORMAL, ColumnSpan = MenuSettings.DEFAULT_COLSPAN_LARGE, Row = 0, RowSpan = MenuSettings.DEFAULT_ROWSPAN_LARGE
                };                                                                                                                                                                                                                                   // Configuration
                menuSettings.MenuItems[MenuSettings.MENU_NAME_SETTINGS] = positions;

                ServiceRegistration.Get <ISettingsManager>().Save(menuSettings);
            }
            _menuSettings = menuSettings;
            if (!_menuSettings.MainMenuGroupNames.Contains(MenuSettings.MENU_NAME_OTHERS))
            {
                _menuSettings.MainMenuGroupNames.Add(MenuSettings.MENU_NAME_OTHERS);
                ServiceRegistration.Get <ISettingsManager>().Save(menuSettings);
            }
        }
Ejemplo n.º 35
0
 public static byte GetTileIdFromColRow(GridPosition pos)
 {
     return((byte)(pos.Row * Consts.GRID_SIZE + pos.Col));
 }
Ejemplo n.º 36
0
 public INode GetNode(GridPosition position) => this.Nodes[position.X, position.Y];
	/**
	 * Return the object at the given position or null if no object
	 * at the given position.
	 */ 
	virtual public IGridObject GetObjectAtPosition(GridPosition position){
		if (position.x < gridSize && position.y < gridSize && position.x  >= 0 &&position.y  >= 0) {
			return grid[position.x, position.y];
		}
		return null;
	}
Ejemplo n.º 38
0
 private bool IsInsideGrid(GridPosition position) => position.X >= 0 && position.X < this.Columns && position.Y >= 0 && position.Y < this.Rows;
	virtual public void RemoveObjectAtPosition(GridPosition position){
		IGridObject g = GetObjectAtPosition(position);
		if (g != null) RemoveObject(g);
	}
Ejemplo n.º 40
0
        public View(GridSize size, GridPosition internalPosition = new GridPosition(), GridPosition externalPosition = new GridPosition())
        {
            SetSize(size);
            SetInternalPosition(internalPosition);
            SetExternalPosition(externalPosition);
            MakeStatic(false);
            StayInBounds(true);
            SetBounds(size);

            Change();
        }
	abstract public Vector3 GridPositionToWorldPosition(GridPosition position);
 public GetTileTypeCommandObject(TileMapInfo tileMapInfo, GridPosition gridPosition)
 {
     this.tileMapInfo  = tileMapInfo;
     this.gridPosition = gridPosition;
 }
Ejemplo n.º 43
0
        private void Flee(List <Ingame.MyDetectedEntityInfo> RadarData = null)
        {
            try
            {
                if (!IsFleeing)
                {
                    return;
                }

                try
                {
                    if (!FleeTimersTriggered)
                    {
                        TriggerFleeTimers();
                    }

                    try
                    {
                        if (RadarData == null)
                        {
                            RadarData = LookForEnemies(FreighterSetup.FleeTriggerDistance);
                        }
                        if (RadarData.Count == 0)
                        {
                            return;
                        }

                        try
                        {
                            Ingame.MyDetectedEntityInfo ClosestEnemy = RadarData.OrderBy(x => GridPosition.DistanceTo(x.Position)).FirstOrDefault();

                            if (ClosestEnemy.IsEmpty())
                            {
                                Grid.DebugWrite("Flee", "Cannot find closest hostile");
                                return;
                            }

                            try
                            {
                                IMyEntity EnemyEntity = MyAPIGateway.Entities.GetEntityById(ClosestEnemy.EntityId);
                                if (EnemyEntity == null)
                                {
                                    Grid.DebugWrite("Flee", "Cannot find enemy entity from closest hostile ID");
                                    return;
                                }

                                try
                                {
                                    //Grid.DebugWrite("Flee", $"Fleeing from '{EnemyEntity.DisplayName}'. Distance: {Math.Round(GridPosition.DistanceTo(ClosestEnemy.Position))}m; FleeTriggerDistance: {FreighterSetup.FleeTriggerDistance}");

                                    Vector3D FleePoint = GridPosition.InverseVectorTo(ClosestEnemy.Position, 100 * 1000);
                                    RC.AddWaypoint(FleePoint, "Flee Point");
                                    (RC as MyRemoteControl).ChangeFlightMode(MyRemoteControl.FlightMode.OneWay);
                                    (RC as MyRemoteControl).SetAutoPilotSpeedLimit(DetermineFleeSpeed());
                                    RC.SetAutoPilotEnabled(true);
                                }
                                catch (Exception Scrap)
                                {
                                    Grid.LogError("Flee.AddWaypoint", Scrap);
                                }
                            }
                            catch (Exception Scrap)
                            {
                                Grid.LogError("Flee.LookForEnemies.GetEntity", Scrap);
                            }
                        }
                        catch (Exception Scrap)
                        {
                            Grid.LogError("Flee.LookForEnemies.Closest", Scrap);
                        }
                    }
                    catch (Exception Scrap)
                    {
                        Grid.LogError("Flee.LookForEnemies", Scrap);
                    }
                }
                catch (Exception Scrap)
                {
                    Grid.LogError("Flee.TriggerTimers", Scrap);
                }
            }
            catch (Exception Scrap)
            {
                Grid.LogError("Flee", Scrap);
            }
        }
Ejemplo n.º 44
0
 public override bool GetHitBox(RaycastHit hit, out GridPosition position, out Vector3 size)
 {
     position = GridPosition.Zero;
     size     = Vector3.Scale(new Vector3(SizeX, SizeY, SizeZ), BlockScale);
     return(true);
 }
Ejemplo n.º 45
0
Archivo: Move.cs Proyecto: SlowShip/AI
 public Move(GridPosition pos, GridValue value)
 {
     Position = pos;
     Value = value;
 }
Ejemplo n.º 46
0
	/**
	 * Don't allow color change for paths.
	 */ 
	override protected void SetColor(GridPosition pos) {

	}
 //Get the cell at a particular grid position
 public GridCell GetCell(GridPosition gridPosition)
 {
     return cells[gridPosition.x, gridPosition.y];
 }
	/**
	 * Update objects position
	 */ 
	virtual public void SetPosition(GridPosition pos) {
		Vector3 position = grid.GridPositionToWorldPosition(pos);
		target.localPosition = position;
		myPosition = target.localPosition;
	}
 //Convert a grid position into a world position on the navmesh
 public Vector3 GetWorldPosition(GridPosition gridPosition)
 {
     var worldPosition = new Vector3(gridPosition.x * cellSize, GetCell(gridPosition).height, gridPosition.y * cellSize);
     return worldPosition + new Vector3(topLeftCorner.x, 0, topLeftCorner.z);
 }
	/**
	 * Get the building at the given position. If the space is empty or the object
	 * at the position is not a building return null.
	 */ 
	public Building GetBuildingAtPosition(GridPosition position) {
		IGridObject result;
		result = GetObjectAtPosition(position);
		if (result is Building) return (Building) result;
		return null;
	}
 //Manhattan distance to another cell
 public int Distance(GridPosition other)
 {
     return Mathf.Abs(other.x - x) + Mathf.Abs(other.y - y);
 }
Ejemplo n.º 52
0
 public void MakePath()
 {
     if (Input.mousePresent)
     {
         Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
         RaycastHit hit;
         if (Physics.Raycast(ray, out hit, 300f))  //Physics.Raycast(ray, out hit, 300f, LayerMask.NameToLayer("Chess Grid")) 按理说可以过滤其他层,可是这时只有离摄像头近的有效,很奇怪
         {
             Debug.DrawLine(ray.origin, hit.point);
             GridPosition newPosition = new GridPosition(hit.point);
             Pair         UV          = new Pair(newPosition);
             if (!UV.Equals(turnPair) && grids[UV].activeSelf /*hit.collider.CompareTag("Grid") 效果不好*/)  //Pair的其他值可能不一样要用自定义的Equals
             {
                 if (!mousePosition.Equals(newPosition))
                 {
                     mousePosition = newPosition;
                     ExtinguishPath();
                     if (!grids[UV].GetComponent <GridAttribute>().isUnit)
                     {
                         LightPath(new Pair(mousePosition));
                     }
                     if (neighbourGrid != GridPosition.NeighbourGrid.M)
                     {
                         neighbourGrid = GridPosition.NeighbourGrid.M;
                     }
                 }
                 else if (grids[UV].GetComponent <GridAttribute>().isUnit) //处理敌方单位
                 {
                     if (attackFlag)                                       //近战攻击
                     {
                         if (Input.GetMouseButton(0))                      //进行攻击
                         {
                             turnControler.MoveUnit(gridQueue.ToArray());
                             attackUV = new Pair(mousePosition);
                             turnControler.AttackUnit(attackUV);
                             ExtinguishPath();
                             SleepGrid();
                             flag = true;
                         }
                         else                            //攻击前选择方向
                         {
                             Vector3 gridVector = mousePosition.GetPosition();
                             if (hit.point.x < gridVector.x - 0.16f && hit.point.z < gridVector.z - 0.16f)
                             {
                                 LightPathByNeighbour(GridPosition.NeighbourGrid.SW);
                             }
                             else if (hit.point.x + hit.point.z <= 1f && hit.point.x <= gridVector.x + 0.16f && hit.point.z <= gridVector.z + 0.16f)
                             {
                                 if (hit.point.x >= hit.point.z)
                                 {
                                     LightPathByNeighbour(GridPosition.NeighbourGrid.S);
                                 }
                                 else
                                 {
                                     LightPathByNeighbour(GridPosition.NeighbourGrid.W);
                                 }
                             }
                             else if (hit.point.x < gridVector.x - 0.16f && hit.point.z > gridVector.z + 0.16f)
                             {
                                 LightPathByNeighbour(GridPosition.NeighbourGrid.NW);
                             }
                             else if (hit.point.x > gridVector.x + 0.16f && hit.point.z < gridVector.z - 0.16f)
                             {
                                 LightPathByNeighbour(GridPosition.NeighbourGrid.SE);
                             }
                             else if (hit.point.x > gridVector.x + 0.16f && hit.point.z > gridVector.z + 0.16f)
                             {
                                 LightPathByNeighbour(GridPosition.NeighbourGrid.NE);
                             }
                             else
                             {
                                 if (hit.point.x >= hit.point.z)
                                 {
                                     LightPathByNeighbour(GridPosition.NeighbourGrid.E);
                                 }
                                 else
                                 {
                                     LightPathByNeighbour(GridPosition.NeighbourGrid.N);
                                 }
                             }
                         }
                     }
                     else                                              //远程攻击
                     {
                         turnControler.exceptMelee();
                     }
                 }
                 else if (Input.GetMouseButton(0))
                 {
                     turnControler.MoveUnit(gridQueue.ToArray());
                     ExtinguishPath();
                     SleepGrid();
                     flag = true;
                 }
             }
             else
             {
                 ExtinguishPath();
             }
         }
     }
 }
Ejemplo n.º 53
0
        private bool PlaceWordInGrid(GridPosition pos, string word, char[,] grid)
        {
            int x = pos.Row;
            int y = pos.Col;

            // elements represent placements options, 0 == left->right, 1 = right->left, etc. (in order presented below)
            int[] placementOptions = new int[8] {
                9, 9, 9, 9, 9, 9, 9, 9
            };
            int  placementOption = 9;
            bool haveOptions     = false;

            for (int counter = 0; counter < word.Length; counter++)
            {
                // If point empty or point contains same letter word's current character
                if (grid[x, y] == '\0' | grid[x, y] == word[0])
                {
                    if (SpaceRight(word, pos, grid))
                    {
                        placementOptions[0] = 1;
                        haveOptions         = true;
                    }
                    if (SpaceLeft(word, pos, grid))
                    {
                        placementOptions[1] = 2;
                        haveOptions         = true;
                    }
                    if (SpaceDown(word, pos, grid))
                    {
                        placementOptions[2] = 3;
                        haveOptions         = true;
                    }
                    if (SpaceUp(word, pos, grid))
                    {
                        placementOptions[3] = 4;
                        haveOptions         = true;
                    }
                    if (SpaceUpRight(word, pos, grid))
                    {
                        placementOptions[4] = 5;
                        haveOptions         = true;
                    }
                    if (SpaceDownRight(word, pos, grid))
                    {
                        placementOptions[5] = 6;
                        haveOptions         = true;
                    }
                    if (SpaceUpLeft(word, pos, grid))
                    {
                        placementOptions[6] = 7;
                        haveOptions         = true;
                    }
                    if (SpaceDownLeft(word, pos, grid))
                    {
                        placementOptions[7] = 8;
                        haveOptions         = true;
                    }

                    if (haveOptions)
                    {
                        while (placementOption == 9)
                        {
                            placementOption = placementOptions[Helper.Random(0, placementOptions.Length - 1)];
                        }

                        switch (placementOption)
                        {
                        case 1:
                            PlaceWordRight(word, pos, grid);
                            break;

                        case 2:
                            PlaceWordLeft(word, pos, grid);
                            break;

                        case 3:
                            PlaceWordDown(word, pos, grid);
                            break;

                        case 4:
                            PlaceWordUp(word, pos, grid);
                            break;

                        case 5:
                            PlaceWordUpRight(word, pos, grid);
                            break;

                        case 6:
                            PlaceWordDownRight(word, pos, grid);
                            break;

                        case 7:
                            PlaceWordUpLeft(word, pos, grid);
                            break;

                        case 8:
                            PlaceWordDownLeft(word, pos, grid);
                            break;
                        }
                        return(true);
                    }
                }
            }
            return(false);
        }
Ejemplo n.º 54
0
 public void SetGridBoundary(GridPosition upperBound)
 {
     this.GridBoundary = upperBound;
 }
Ejemplo n.º 55
0
    public override void Generate(BoardGenerator boardGenerator)
    {
        char charToWrite;

        if (!useDefaultEmptyChar)
        {
            charToWrite = alternateCharToUse;
        }
        else
        {
            charToWrite = boardGenerator.boardGenerationProfile.boardLibrary.GetDefaultEmptyChar();
        }

        Vector2      startLocation   = startLocations[Random.Range(0, startLocations.Length)];
        GridPosition startPosition   = boardGenerator.Vector2ToGridPosition(startLocation);
        GridPosition targetPosition  = boardGenerator.GetRandomGridPosition();
        GridPosition currentPosition = startPosition;

        for (int i = 0; i < tunnelLength; i++)
        {
            if (RollPercentage(turnPercentChance))
            {
                GridPosition turnPosition = boardGenerator.GetRandomGridPosition();
                while (turnPosition.x == targetPosition.x || turnPosition.y == targetPosition.y)
                {
                    turnPosition = boardGenerator.GetRandomGridPosition();
                }

                targetPosition = turnPosition;
            }

            if (spawnRandomRoomsOnTunnel)
            {
                if (RollPercentage(roomSpawnChance))
                {
                    RoomTemplate randTemplate = roomTemplates[Random.Range(0, roomTemplates.Length)];
                    boardGenerator.DrawTemplate(currentPosition.x, currentPosition.y, randTemplate, overwriteFilledSpaces, generatesEmptySpace);
                }
            }

            List <GeneratorWanderTunnel> branchTunnelerList = new List <GeneratorWanderTunnel>();

            if (RollPercentage(branchPercentChance))
            {
                GeneratorWanderTunnel wanderTunneler = ScriptableObject.CreateInstance <GeneratorWanderTunnel>();

                wanderTunneler.tunnelMaxLength        = branchTunnel.tunnelMaxLength;
                wanderTunneler.overwriteFilledSpaces  = branchTunnel.overwriteFilledSpaces;
                wanderTunneler.useDefaultEmptyChar    = branchTunnel.useDefaultEmptyChar;
                wanderTunneler.alternateCharToUse     = branchTunnel.alternateCharToUse;
                wanderTunneler.startLocations         = new Vector2[1];
                wanderTunneler.startLocations[0]      = new Vector2(currentPosition.x, currentPosition.y);
                wanderTunneler.roomTemplates          = branchTunnel.roomTemplates;
                wanderTunneler.spawnRoomsOnTunnelTurn = branchTunnel.spawnRoomsOnTunnelTurn;
                wanderTunneler.spawnRoomOnTunnelEnd   = branchTunnel.spawnRoomOnTunnelEnd;
                wanderTunneler.turnNoiseValue         = branchTunnel.turnNoiseValue;
                branchTunnelerList.Add(wanderTunneler);
            }

            for (int j = 0; j < branchTunnelerList.Count; j++)
            {
                branchTunnelerList[j].Generate(boardGenerator);
            }


            Dig(boardGenerator, currentPosition, targetPosition, charToWrite);
        }

        if (spawnRandomRoomsOnTunnel)
        {
            RoomTemplate randTemplate = roomTemplates[Random.Range(0, roomTemplates.Length)];
            boardGenerator.DrawTemplate(currentPosition.x, currentPosition.y, randTemplate, overwriteFilledSpaces, generatesEmptySpace);
        }
    }
Ejemplo n.º 56
0
 int GetIndex(GridPosition p)
 {
     return(p.y * gridSize.x + p.x);
 }
Ejemplo n.º 57
0
	/**
	 * After object dragged set color
	 */ 
	override protected void PostDrag (GridPosition pos) {

	}
Ejemplo n.º 58
0
 public static void DistanceSquared(ref GridPosition value1, ref GridPosition value2, out double result)
 {
     result = (value1.x - value2.x) * (value1.x - value2.x) +
              (value1.y - value2.y) * (value1.y - value2.y) +
              (value1.z - value2.z) * (value1.z - value2.z);
 }
	/**
	 * Called after each drag.
	 */ 
	virtual protected void PostDrag(GridPosition pos) {

	}
Ejemplo n.º 60
0
    /// <summary>
    /// Compares whether current instance is equal to specified <see cref="GridPosition"/>.
    /// </summary>
    /// <param name="other">The <see cref="GridPosition"/> to compare.</param>
    /// <returns><c>true</c> if the instances are equal; <c>false</c> otherwise.</returns>
    public bool Equals(GridPosition other)
    {
        bool ret = x == other.x && y == other.y && z == other.z;

        return(ret);
    }