コード例 #1
0
 //获取dst在src的旁边哪一个方向
 //return:返回方向,若不相邻则返回NONE
 static public byte Adjacent(GPosition dst, GPosition src)
 {
     if (dst.line == src.line)
     {
         if (dst.column == src.column + 1)
         {
             return(MoveRoute.RIGHT);
         }
         else if (dst.column == src.column - 1)
         {
             return(MoveRoute.LEFT);
         }
     }
     else if (dst.column == src.column)
     {
         if (dst.line == src.line + 1)
         {
             return(MoveRoute.DOWN);
         }
         else if (dst.line == src.line - 1)
         {
             return(MoveRoute.UP);
         }
     }
     return(MoveRoute.NONE);
 }
コード例 #2
0
ファイル: UIFunction.cs プロジェクト: oliewalcp/TowerDefense
    /* 获取指定地图位置的实际像素位置
     * param[gp]:地图位置
     * return:像素位置
     */
    public static Vector2 GetPixelPosition(GPosition gp)
    {
        Vector2 newPosition = new Vector2();

        newPosition.x = LocalMessage.grid.width / 2 + (float)(gp.column) * LocalMessage.grid.width + GameRunning.x_offset;
        newPosition.y = -(LocalMessage.grid.height / 2 + (float)(gp.line) * LocalMessage.grid.height) - GameRunning.y_offset;
        return(newPosition);
    }
コード例 #3
0
ファイル: UIFunction.cs プロジェクト: oliewalcp/TowerDefense
    /* 设置物体在地图上的像素位置
     * param[go]:需要改变的物体
     * param[gp]:地图的位置
     */
    public static void SetMapPosition(GameObject go, GPosition gp)
    {
        Vector3 newPosition = new Vector3();

        newPosition.z = -8.5f;
        newPosition.x = LocalMessage.grid.width / 2 + gp.column * LocalMessage.grid.width + GameRunning.x_offset;
        newPosition.y = -(LocalMessage.grid.height / 2 + gp.line * LocalMessage.grid.height) - GameRunning.y_offset;
        go.transform.localPosition = newPosition;
    }
コード例 #4
0
ファイル: UIFunction.cs プロジェクト: oliewalcp/TowerDefense
    /* 获取物体在地图上的位置
     * param[go]:需要获取位置的物体
     * param[delta]:偏差值
     */
    public static GPosition GetMapPosition(GameObject go, float line_delta = 0, float column_delta = 0)
    {
        Vector3   pos     = go.transform.localPosition;
        GPosition gp      = new GPosition();
        float     tempCol = (pos.x - LocalMessage.grid.width / 2) / LocalMessage.grid.width;
        float     tempLin = (pos.y + LocalMessage.grid.height / 2) / (-LocalMessage.grid.height);

        gp.column = (byte)(tempCol + line_delta);
        gp.line   = (byte)(tempLin + column_delta);
        return(gp);
    }
コード例 #5
0
    /* 获取下一格的方向
     * param[currentPosition]:当前位置
     * param[currentDirection]:当前方向
     * return:下一格在当前格的方向
     */
    public static byte GetNextGridDirection(GPosition currentPosition, byte currentDirection)
    {
        byte result = MoveRoute.NONE;

        if (currentDirection != MoveRoute.DOWN && currentPosition.line >= 1 && Map[currentPosition.line - 1][currentPosition.column] == 0)
        {
            result = MoveRoute.UP;
        }
        else if (currentDirection != MoveRoute.LEFT && currentPosition.column + 1 < Map[0].Length && Map[currentPosition.line][currentPosition.column + 1] == 0)
        {
            result = MoveRoute.RIGHT;
        }
        else if (currentDirection != MoveRoute.UP && currentPosition.line + 1 < Map.Length && Map[currentPosition.line + 1][currentPosition.column] == 0)
        {
            result = MoveRoute.DOWN;
        }
        else if (currentDirection != MoveRoute.RIGHT && currentPosition.column >= 1 && Map[currentPosition.line][currentPosition.column - 1] == 0)
        {
            result = MoveRoute.LEFT;
        }
        return(result);
    }
コード例 #6
0
    //设置怪物的路线

    /* 将拐点添加到容器中
     */
    private static void SetMonsterRoute()
    {
        byte      currentDirection = GetNextGridDirection(StartGrid, MoveRoute.NONE), lastDirection = MoveRoute.NONE;
        GPosition currentPosition = new GPosition(), lastPosition = new GPosition();
        uint      i = 0, max = (uint)(Map.Length * Map[0].Length);
        uint      index = 0;

        for (currentPosition.CopyFrom(StartGrid), lastPosition.CopyFrom(StartGrid); i < max; i++)
        {
            //遇到拐点,则保存到容器中
            if (currentDirection != lastDirection)
            {
                lastDirection = currentDirection;
                MonsterRoute.Add(index++, new Position(lastPosition, UIFunction.GetPixelPosition(lastPosition), currentDirection));
            }
            //如果达到终点,则结束
            if (currentPosition.Equals(EndGrid))
            {
                MonsterRoute.Add(index++, new Position(currentPosition, UIFunction.GetPixelPosition(currentPosition), currentDirection));
                break;
            }
            lastPosition.CopyFrom(currentPosition);            //将当前位置保存到上一个位置
            //获取下一个位置的方向,并避免180度回头的情况
            currentDirection = GetNextGridDirection(currentPosition, currentDirection);
            switch (currentDirection)
            {
            case MoveRoute.UP: currentPosition.line -= 1; break;

            case MoveRoute.DOWN: currentPosition.line += 1; break;

            case MoveRoute.LEFT: currentPosition.column -= 1; break;

            case MoveRoute.RIGHT: currentPosition.column += 1; break;
            }
        }
    }
コード例 #7
0
 public Position(GPosition gpos, Vector2 ppos, byte dirc)
 {
     SetGridPosition(gpos);
     SetPixelPosition(ppos);
     direction = dirc;
 }
コード例 #8
0
 public byte Adjacent(GPosition arg)
 {
     return(Adjacent(this, arg));
 }
コード例 #9
0
 public void CopyFrom(GPosition src)
 {
     line   = src.line;
     column = src.column;
 }
コード例 #10
0
 public byte column;  //列号
 public bool Equals(GPosition arg)
 {
     return(line == arg.line && column == arg.column);
 }
コード例 #11
0
 public void SetGridPosition(GPosition arg)
 {
     grid_pos.CopyFrom(arg);
 }