예제 #1
0
 /// <summary>
 /// Changes the size of the space visible on the real device.
 /// </summary>
 public void ResizeVisible(int w, int h)
 {
     VisibleWidth  = w;
     VisibleHeight = h;
     _visible      = GridStatus.CreateArray(w, h);
     ForceRepaint();
 }
예제 #2
0
        public GridStatus Validate(ModConfig config)
        {
            if (config.SkipNPCGrids && IsNPCGrid())
            {
                gridStatus = GridStatus.NPC;
                return(gridStatus);
            }

            if (config.CheckHasOwner && !HasOwner())
            {
                gridStatus = GridStatus.NoOwner;
                return(gridStatus);
            }

            if (config.CheckHasPower && !HasPower())
            {
                gridStatus = GridStatus.NoPower;
                return(gridStatus);
            }

            if (config.MinBlockCount != 0 && !HasMinBlocks(config.MinBlockCount))
            {
                gridStatus = GridStatus.NotEnoughBlocks;
                return(gridStatus);
            }

            if (!string.IsNullOrEmpty(config.CheckDefaultName) && !HasCustomName(config.CheckDefaultName))
            {
                gridStatus = GridStatus.DefaultName;
                return(gridStatus);
            }

            return(gridStatus);
        }
    public static GridStatus[,] LoadMap(string wall_path)
    {
        GridStatus[,] list = new GridStatus[15, 20];
        try {
            using (StreamReader sr = new StreamReader(wall_path)) {
                for (int i = 0; i < 20; i++)
                {
                    string s = sr.ReadLine();
                    for (int j = 0; j < 15; j++)
                    {
                        if ((s[j]) == '0')
                        {
                            list[j, 19 - i] = GridStatus.EMPTY;
                        }
                        else if ((s[j]) == '1')
                        {
                            list[j, 19 - i] = GridStatus.WALL;
                        }
                        else if ((s[j]) == '2')
                        {
                            list[j, 19 - i] = GridStatus.VIRTUAL_WALL;
                        }
                    }
                }
            }
        } catch { Debug.LogError("File read fail! "); }

        return(list);
    }
    public static void CreateBoard(bool hasSetMap)
    {
        if (!hasSetMap)
        {
            gridStatuses = new GridStatus[15, 20];
        }
        gridCubes = new GameObject[15, 20];

        for (int j = 0; j < 20; j++)
        {
            for (int i = 0; i < 15; i++)
            {
                Vector3    pos = ConvertPosToWorld(i, j);
                GameObject go  = GameObject.Instantiate(gridPrefab, pos, Quaternion.identity);
                gridCubes[i, j]     = go;
                grids[i, j]         = go.GetComponent <Grid>();
                go.transform.parent = gridCubesContainer;
                grids[i, j].InitPos(i, j);
                if (hasSetMap)
                {
                    grids[i, j].UpdateStatus(gridStatuses[i, j]);
                }
            }
        }

        // Borders
        for (int i = 0; i < 17; i++)
        {
            for (int m = 0; m < 2; m++)
            {
                for (int k = 0; k < 3; k++)
                {
                    Vector3    pos = new Vector3(referencePos.x + 1 - m * 21, k, referencePos.y - 1 + i);
                    GameObject go  = GameObject.Instantiate(gridPrefab, pos, Quaternion.identity);
                    go.transform.parent = gridCubeWallsContainer;
                }
            }
        }
        for (int j = 0; j < 22; j++)
        {
            for (int m = 0; m < 2; m++)
            {
                for (int k = 0; k < 3; k++)
                {
                    Vector3    pos = new Vector3(referencePos.x + 1 - j, k, referencePos.y - 1 + m * 16);
                    GameObject go  = GameObject.Instantiate(gridPrefab, pos, Quaternion.identity);
                    go.transform.parent = gridCubeWallsContainer;
                }
            }
        }

        if (hasSetMap)
        {
            hasCompleteMap = true;
        }
        else     // Robot
        {
            InitRobot();
        }
    }
예제 #5
0
 /// <summary>
 /// Removes the monster.
 /// </summary>
 public void RemoveMonster()
 {
     if (this.status == GridStatus.MONSTER)
     {
         this.status = GridStatus.NOTHING;
     }
 }
예제 #6
0
        private static Drawer CreateIconDrawer(GridModel grid, GridStatus status)
        {
            logger.Debug("Creating IconDrawer consisting of: SimpleIconDrawer, SimpleGridDrawer");

            ButtonBaseDrawer drawer = new SimpleIconDrawer();

            return(new SimpleGridDrawer(grid, status, drawer));
        }
 public void setPositionStatus(int x, int y, GridStatus status)
 {
     if ((x > this.gridSize - 1) || (y > this.gridSize - 1))
     {
         throw new Exception("Max Position should be less than " + this.gridSize);
     }
     this.gridArray[x, y].GridStatus = status;
 }
예제 #8
0
        private static Drawer CreateBorderDrawer(GridModel grid, GridStatus status)
        {
            logger.Debug("Creating BorderDrawer consisting of: AlignedDrawer, GridBorderDrawer");

            ButtonBaseDrawer drawer = new AlignedDrawer();

            return(new GridBorderDrawer(grid, status, drawer));
        }
예제 #9
0
        void InitialGridScan()
        {
            // Save before?

            MyVisualScriptLogicProvider.SendChatMessage("Scanning for offending grids..", "SERVER", 0, "Red");
            MyAPIGateway.Entities.GetEntities(entityList);

            foreach (var entity in entityList)
            {
                IMyCubeGrid grid = entity as IMyCubeGrid;

                if (grid == null)
                {
                    continue;
                }

                if (BroadcastManager.ContainsEntityId(grid.EntityId))
                {
                    continue;
                }

                GridValidator gridValidator = new GridValidator(grid.EntityId);
                GridStatus    gridStatus    = gridValidator.Validate(Config);

                if (gridStatus > GridStatus.Marked)
                {
                    MyVisualScriptLogicProvider.SendChatMessage("Tracking [" + grid.CustomName + "] - " + Enum.GetName(typeof(GridStatus), gridStatus), "SERVER", 0);

                    if (Config.AlertOwner)
                    {
                        BroadcastInfo broadcastInfo = gridValidator.GridToBroadcastInfo();
                        if (broadcastInfo.Location == Vector3D.Zero)
                        {
                            continue;
                        }

                        BroadcastError err = BroadcastManager.AddBroadcastInfo(broadcastInfo, false);

                        if (err == BroadcastError.Ok)
                        {
                            double timeInMinutes = (double)Config.GracePeriod / 60.0;

                            MyVisualScriptLogicProvider.SendChatMessage(
                                $"Warning [{grid.CustomName}] may be BROADCAST in {timeInMinutes} minutes." +
                                $" If this is not intentional please review the grid policy and correct immediately.",
                                "SERVER",
                                gridValidator.ownerId,
                                "Red");
                        }
                    }

                    trackedGrids.Add(grid.EntityId);
                }
            }
            MyVisualScriptLogicProvider.SendChatMessage($"Tracking {trackedGrids.Count} grids for possible broadcast", "SERVER", 0, "Red");
            entityList.Clear();
        }
예제 #10
0
 private static Drawer BuildDrawer(GridModel grid, GridStatus status)
 {
     try { return(DrawerFactory.CreateDrawer(grid, status)); }
     catch (Exception e)
     {
         string msg = String.Format("Building drawer for grid '{0}' failed!", grid.Id);
         throw new Exception(msg, e);
     }
 }
예제 #11
0
 public GridEntity(Rectangle rect, GridBoxType type, GridStatus status, bool isSelected, bool isMouseover)
 {
     this.Rect        = rect;
     this.IsMouseover = isMouseover;
     this.IsSelected  = isSelected;
     this.type        = type;
     this.status      = status;
     color            = new Color(0, 170, 0);
 }
예제 #12
0
    public override GridStatus Execute()
    {
        var status = new GridStatus();

        if (stack.Count == 0)
        {
            status.Finished = true;
            return(status);
        }

        NodePath path = null;

        while (stack.Count > 0 && (path == null || path.Node.Visited))
        {
            path = stack.Pop();
        }

        if (path == null)
        {
            status.Finished = true;
            return(status);
        }

        path.Node.Visited = true;

        var connections = GetConnectedNodes(path.Node);

        var target = connections.FirstOrDefault(c => c.Type == NodeType.TARGET);

        //TARGET FOUND
        if (target != null)
        {
            status.Finished   = true;
            status.SolvedPath = GeneratePath(new NodePath()
            {
                Node   = target,
                Parent = path
            });
            return(status);
        }
        else
        {
            foreach (var connectedNode in connections)
            {
                if (!connectedNode.Visited && connectedNode.Type == NodeType.EMPTY)
                {
                    stack.Push(new NodePath()
                    {
                        Node   = connectedNode,
                        Parent = path
                    });
                }
            }
        }
        return(status);
    }
예제 #13
0
        private static Drawer CreateAlignedDrawer(GridModel grid, GridStatus status)
        {
            logger.Debug("Creating AlignedDrawer consisting of: BackgroundColorDrawer, AlignedDrawer, SimpleGridDrawer");

            ButtonBaseDrawer drawer;

            drawer = new AlignedDrawer();
            drawer = new BorderDrawer(drawer);
            return(new SimpleGridDrawer(grid, status, drawer));
        }
예제 #14
0
        private static Drawer CreateDevDrawer(GridModel grid, GridStatus status)
        {
            logger.Debug("Creating DevelopmentDrawer...");

            ButtonBaseDrawer drawer = new AlignedDrawer();

            return(new GridBorderDrawer(grid, status, drawer));
            //return new GridBorderGapDrawer(grid, status, drawer);
            //return new GridBorderMarginDrawer(grid, status, drawer);
        }
예제 #15
0
        /// <summary>
        /// Changes the size of the virtual space.
        /// </summary>
        public void Resize(int w, int h)
        {
            var newGrid = GridStatus.CreateArray(w, h);

            GridStatus.CopyData(_grid, newGrid);

            // TODO: resizes could be dangerous.  may need threadsafing or don't allow resize

            // keep new settings
            Width  = w;
            Height = h;
            _grid  = newGrid;
        }
예제 #16
0
 public BroadcastInfo(int blockCount, long entityId, string gridname, bool isStatic, Vector3D location, long ownerId, string ownerName, GridStatus status)
 {
     BlockCount          = blockCount;
     EntityId            = entityId;
     GridName            = gridname;
     IsStatic            = isStatic;
     Location            = location;
     MyGps               = new HashSet <IMyGps>();
     OwnerId             = ownerId;
     OwnerName           = ownerName;
     TimeSinceLastPlayer = 0;
     Status              = status;
 }
예제 #17
0
    public void UpdateStatus(GridStatus gs)
    {
        this.gs = gs;
        switch (gs)
        {
        case GridStatus.UNEXPLORED: confidence = 0; break;

        case GridStatus.EMPTY: confidence = -9000; break;

        case GridStatus.WALL: confidence = 9000; break;
            //case GridStatus.IMAGE: obstacle.SetActive(true); break;
        }
    }
 public static bool Contains2D(Grid[,] arr2d, GridStatus value)
 {
     for (int i = 0; i < arr2d.GetLength(0); i++)
     {
         for (int j = 0; j < arr2d.GetLength(1); j++)
         {
             if (arr2d[i, j].gs.Equals(value))
             {
                 return(true);
             }
         }
     }
     return(false);
 }
예제 #19
0
            /// <summary>
            /// Creates a 2D array of a given size with every cell
            /// initialized to an object.
            /// </summary>
            public static GridStatus[,] CreateArray(int w, int h)
            {
                var ret  = new GridStatus[w, h];
                var maxX = ret.GetUpperBound(0);
                var maxY = ret.GetUpperBound(1);

                for (int x = 0; x <= maxX; x++)
                {
                    for (int y = 0; y <= maxY; y++)
                    {
                        ret[x, y] = new GridStatus();
                    }
                }
                return(ret);
            }
예제 #20
0
 public void UpdateStatus(int delta)
 {
     confidence += delta;
     if (confidence >= 5)
     {
         gs = GridStatus.WALL;
     }
     else if (confidence < 0)
     {
         gs = GridStatus.EMPTY;
     }
     else
     {
         //gs = GridStatus.UNEXPLORED;
     }
 }
예제 #21
0
        public GridValidator(long gridEntityId)
        {
            entityId   = gridEntityId;
            entityName = MyVisualScriptLogicProvider.GetEntityName(entityId);

            entity = MyVisualScriptLogicProvider.GetEntityByName(entityName);

            if (string.IsNullOrEmpty(entityName) == true)
            {
                entityName = entityId.ToString();
                MyVisualScriptLogicProvider.SetName(entityId, entityName);
            }

            gridStatus = GridStatus.Ok;
            ownerId    = MyVisualScriptLogicProvider.GetOwner(entityName);
        }
 public static void ClearBoard()
 {
     // remove all prefabs from arena
     try {
         for (int i = 0; i < gridCubes.GetLength(0); i++)
         {
             for (int j = 0; j < gridCubes.GetLength(1); j++)
             {
                 GameObject.Destroy(gridCubes[i, j].GetComponent <Grid>().gameObject);
             }
         }
         gridStatuses = new GridStatus[15, 20];
         grids        = new Grid[15, 20];
     } catch { }
     hasCompleteMap = false;
 }
예제 #23
0
        /// <summary>
        /// Toggles the mirror.
        /// </summary>
        private void ToggleMirror()
        {
            if (this.status == GridStatus.NOTHING && StageManager.StatusPanel.CanRequestMirror)
            {
                if (this.mirror == null)
                {
                    this.mirror = this.SpawnMirror();
                }
                else
                {
                    this.mirror.transform.Rotate(new Vector3(0, 0, -90));
                    this.mirror.SetActive(true);
                }

                StageManager.StatusPanel.RequestMirror();
                this.status = GridStatus.MIRROR_LEFT_UP;
                SoundManager.PlaySEToggleMirror(1);
            }
            else if (this.status == GridStatus.MIRROR_LEFT_UP)
            {
                this.mirror.transform.Rotate(new Vector3(0, 0, -90));
                this.status = GridStatus.MIRROR_RIGHT_UP;
                SoundManager.PlaySEToggleMirror(2);
            }
            else if (this.status == GridStatus.MIRROR_RIGHT_UP)
            {
                this.mirror.transform.Rotate(new Vector3(0, 0, -90));
                this.status = GridStatus.MIRROR_RIGHT_DOWN;
                SoundManager.PlaySEToggleMirror(3);
            }
            else if (this.status == GridStatus.MIRROR_RIGHT_DOWN)
            {
                this.mirror.transform.Rotate(new Vector3(0, 0, -90));
                this.status = GridStatus.MIRROR_LEFT_DOWN;
                SoundManager.PlaySEToggleMirror(4);
            }
            else if (this.status == GridStatus.MIRROR_LEFT_DOWN)
            {
                this.mirror.SetActive(false);
                this.status = GridStatus.NOTHING;

                StageManager.StatusPanel.RevokeMirror();
                this.AddLight(true);
                SoundManager.PlaySEToggleMirror(0);
            }
        }
예제 #24
0
    void Awake()
    {

        status = GridStatus.Null;

        _checkpointArray = transform.GetComponentsInChildren<Checkpoint>();

        for( int i = 0 ;i < _checkpointArray.Length; i++ )
        {
            //Debug.Log( "New checkpoint:" + _checkpointArray[ i ].name );
            
            _checkpointArray[ i ].type = Checkpoint.Type.Failure;
            _checkpointArray[ i ].manager = this;
        }

        SetupCheckpoints();
            
    }
예제 #25
0
        public async Task GridStatusCall(string payload, GridStatus expected)
        {
            var mockHttp = new MockHttpMessageHandler();

            mockHttp
            .When("http://localhost/api/system_status/grid_status")
            .Respond("application/json", payload);

            var mockClient = mockHttp.ToHttpClient();

            mockClient.BaseAddress = new Uri("http://localhost");

            var gatewayClient = new GatewayClient(mockClient);
            var gridStatus    = await gatewayClient.GetGridStatus();

            Assert.AreEqual(expected.GridServicesActive, gridStatus.GridServicesActive);
            Assert.AreEqual(expected.GridStatusGridStatus, gridStatus.GridStatusGridStatus);
        }
예제 #26
0
        static void TrackedGridScan()
        {
            int count = 0;

            MyVisualScriptLogicProvider.SendChatMessage("Checking for grids to broadcast..", "SERVER", 0, "Red");
            List <long> gridsToTrash = new List <long>();

            foreach (long entityId in trackedGrids)
            {
                // Validating twice, it maybe better to instead listen for events on the grid
                GridValidator gridValidator = new GridValidator(entityId);
                GridStatus    gridStatus    = gridValidator.Validate(Config);

                if (gridStatus > GridStatus.Marked)
                {
                    BroadcastInfo  broadcastInfo = gridValidator.GridToBroadcastInfo();
                    BroadcastError err           = BroadcastManager.AddBroadcastInfo(broadcastInfo, true);

                    switch (err)
                    {
                    case BroadcastError.NotEnoughBlocks:
                    case BroadcastError.NotEnoughFatBlocks:
                    case BroadcastError.TooFarFromPlayers:
                        MyVisualScriptLogicProvider.SendChatMessage($"Trashing {broadcastInfo} {Enum.GetName(typeof(BroadcastError), err)}", "SERVER", 0, "Red");
                        gridsToTrash.Add(entityId);
                        break;

                    case BroadcastError.TooCloseToPlayers:
                        MyVisualScriptLogicProvider.SendChatMessage($"Ignoring {broadcastInfo} {Enum.GetName(typeof(BroadcastError), err)}", "SERVER", 0, "Red");
                        break;

                    default:
                        MyVisualScriptLogicProvider.SendChatMessage($"Broadcasting {broadcastInfo}", "SERVER", 0, "Red");
                        count++;
                        break;
                    }
                }
            }

            Util.TrashGrids(gridsToTrash);
            trackedGrids.Clear();
        }
예제 #27
0
        protected virtual void InitButtons(GridStatus status)
        {
            buttonDict = new Dictionary <string, DrawableButton>();
            foreach (var btn in model)
            {
                buttonDict[btn.Id] = new DrawableButton(btn, status[btn.Id]);
            }

            buttonGrid = new DrawableButton[Cols, Rows];
            for (int x = 0; x < Cols; x++)
            {
                for (int y = 0; y < Rows; y++)
                {
                    if (model[x, y] != null)
                    {
                        buttonGrid[x, y] = buttonDict[model[x, y].Id];  // don't create objects again
                    }
                }
            }
        }
예제 #28
0
        public static Drawer CreateDrawer(GridModel grid, GridStatus status)
        {
            //return CreateDevDrawer(grid, status); // TODO B4RELEASE: create the right drawer

            ButtonBaseDrawer buttonDrawer = new AlignedDrawer();

            string type = grid.Style.DrawerType;

            switch (type)
            {
            case "border":          return(new GridBorderDrawer(grid, status, buttonDrawer));

            case "border-gap":      return(new GridBorderGapDrawer(grid, status, buttonDrawer));

            case "border-margin":   return(new GridBorderMarginDrawer(grid, status, buttonDrawer));

            default:
                throw new Exception(String.Format("Drawer of type '{0}' is not implemented!", type));
            }
        }
예제 #29
0
    void Update()
    {
        InputHandler();

        if (started)
        {
            if (!TickUtil.Tick())
            {
                return;
            }

            if (!status.Finished)
            {
                status = controller.Execute();
                grid   = controller.grid;
            }
            else
            {
                SolutionUtil.Execute(status.SolvedPath, grid);
            }
        }

        RenderGrid();
    }
예제 #30
0
 public void OnFailureCheckpoint()
 {
     status = GridStatus.Failure;
     manager.OnFailureCheckpoint( this );
 }
예제 #31
0
 public void OnSuccesGrid()
 {
     stopFlag = true;
     status = GridStatus.Null;
     manager.HandleSuccesGrid( this );
 }
예제 #32
0
 public string LightInfo()
 {
     string s = "";
     for (int i=0; i<4; i++) {
         s+=AllLineStatus[i];
         s+=",";
     }
     return s;
 }
예제 #33
0
 public OneGrid()
 {
     this.gridStatus = GridStatus.Blank;
 }
예제 #34
0
 /// <summary>
 /// Adds the home.
 /// </summary>
 public void AddHome()
 {
     this.status = GridStatus.HOME;
 }