コード例 #1
0
ファイル: PositionMonitor.cs プロジェクト: Pierre-St/ONI-Mods
        public int CountEntries(Extents area, PositionMonitorLayer layer)
        {
            int xIndexFrom = Math.Max(area.x, 0);
            int xIndexTo   = Math.Min(area.x + area.width, Grid.WidthInCells);
            int yIndexFrom = Math.Max(area.y, 0);
            int yIndexTo   = Math.Min(area.y + area.height, Grid.HeightInCells);

            int countEntries = 0;

            for (int iX = xIndexFrom; iX < xIndexTo; ++iX)
            {
                for (int iY = yIndexFrom; iY < yIndexTo; ++iY)
                {
                    int nbrEntries = m_nodes[layer.m_layer, iX, iY].m_entries.Count;
                    for (int index = 0; index < nbrEntries; ++index)
                    {
                        PositionMonitorEntry entry = m_nodes[layer.m_layer, iX, iY].m_entries[index];
                        if (entry != null)
                        {
                            if (entry.m_object == null)
                            {
                                m_nodes[layer.m_layer, iX, iY].m_entries[index] = (PositionMonitorEntry)null;
                                m_nodes[layer.m_layer, iX, iY].isDirty          = true;
                            }
                            else
                            {
                                countEntries++;
                            }
                        }
                    }
                }
            }
            return(countEntries);
        }
コード例 #2
0
ファイル: PositionMonitor.cs プロジェクト: Pierre-St/ONI-Mods
 public PositionMonitorEntry(int x, int y, PositionMonitorLayer layer, GameObject obj, PositionMonitor monitor)
 {
     m_x       = x;
     m_y       = y;
     m_layer   = layer;
     m_object  = obj;
     m_monitor = monitor;
     Singleton <CellChangeMonitor> .Instance.RegisterCellChangedHandler(m_object.transform, new System.Action(this.UpdatePosition), "AggroCritter.SetMaster");
 }
コード例 #3
0
ファイル: PositionMonitor.cs プロジェクト: Pierre-St/ONI-Mods
        public PositionMonitorEntry Add(GameObject obj, int x, int y, PositionMonitorLayer layer)
        {
            PositionMonitorEntry entry = new PositionMonitorEntry(x, y, layer, obj, this);

            if (!m_nodes[layer.m_layer, x, y].isDirty)
            {
                m_nodes[layer.m_layer, x, y].isDirty = true;
                m_dirtyNodes.Add(new DirtyNode()
                {
                    m_layer = layer.m_layer,
                    m_x     = x,
                    m_y     = y
                });
            }
            m_nodes[layer.m_layer, x, y].m_entries.Add(entry);
            return(entry);
        }
コード例 #4
0
ファイル: PositionMonitor.cs プロジェクト: Pierre-St/ONI-Mods
        public PositionMonitorLayer AddLayer(HashedString layerName)
        {
            if (m_layers.Count >= 64)
            {
                PUtil.LogDebug("Maximum number of layers reached. Returning the default layer");
                return(m_layers[0]);
            }

            foreach (PositionMonitorLayer l in m_layers)
            {
                if (l.m_name == layerName)
                {
                    return(l);
                }
            }

            PositionMonitorLayer layer = new PositionMonitorLayer(layerName, m_layers.Count);

            m_layers.Add(layer);
            return(layer);
        }