예제 #1
0
        private void TileLayersPropertyChanged(TileLayerCollection oldTileLayers, TileLayerCollection newTileLayers)
        {
            tileContainer.ClearTileLayers();

            if (oldTileLayers != null)
            {
                oldTileLayers.CollectionChanged -= TileLayerCollectionChanged;
            }

            if (newTileLayers != null)
            {
                newTileLayers.CollectionChanged += TileLayerCollectionChanged;
                tileContainer.AddTileLayers(0, newTileLayers);

                var firstTileLayer = TileLayers.FirstOrDefault();

                if (TileLayer != firstTileLayer)
                {
                    TileLayer = firstTileLayer;
                }
            }
            else
            {
                TileLayer = null;
            }
        }
예제 #2
0
 public ILayer <GameActor> GetLayer(LayerType layerType)
 {
     if (layerType == LayerType.Object ||
         layerType == LayerType.ForegroundObject)
     {
         return(ObjectLayers.FirstOrDefault(x => x.LayerType == layerType));
     }
     return(TileLayers.FirstOrDefault(x => x.LayerType == layerType));
 }
예제 #3
0
 /// <summary>
 /// Returns the tile layer with the given name.
 /// </summary>
 /// <param name="name">The name of the tile layer to find.</param>
 /// <returns>The tile layer with the given name.</returns>
 public TileLayer GetTileLayer(string name)
 {
     try
     {
         return(TileLayers.Find(item => item.Name == name));
     }
     catch
     {
         throw new Exception("\nCould not find the given TileLayer.");
     }
 }
예제 #4
0
        private void UpdateTileLayer()
        {
            TileLayer tileLayer = null;

            if (TileLayers != null)
            {
                tileLayer = TileLayers.FirstOrDefault();
            }

            if (TileLayer != tileLayer)
            {
                TileLayer = tileLayer;
            }
        }
예제 #5
0
        private void TileLayerPropertyChanged(TileLayer tileLayer)
        {
            if (tileLayer != null)
            {
                if (TileLayers == null)
                {
                    TileLayers = new TileLayerCollection();
                }

                if (TileLayers.Count == 0)
                {
                    TileLayers.Add(tileLayer);
                }
                else if (TileLayers[0] != tileLayer)
                {
                    TileLayers[0] = tileLayer;
                }
            }

            if (tileLayer != null && tileLayer.Background != null)
            {
                if (storedBackground == null)
                {
                    storedBackground = Background;
                }

                Background = tileLayer.Background;
            }
            else if (storedBackground != null)
            {
                Background       = storedBackground;
                storedBackground = null;
            }

            if (tileLayer != null && tileLayer.Foreground != null)
            {
                if (storedForeground == null)
                {
                    storedForeground = Foreground;
                }

                Foreground = tileLayer.Foreground;
            }
            else if (storedForeground != null)
            {
                Foreground       = storedForeground;
                storedForeground = null;
            }
        }
예제 #6
0
 private void TileLayerPropertyChanged(TileLayer tileLayer)
 {
     if (tileLayer != null)
     {
         if (TileLayers == null)
         {
             TileLayers = new ObservableCollection <TileLayer>(new TileLayer[] { tileLayer });
         }
         else if (TileLayers.Count == 0)
         {
             TileLayers.Add(tileLayer);
         }
         else if (TileLayers[0] != tileLayer)
         {
             TileLayers[0] = tileLayer;
         }
     }
 }
예제 #7
0
        private void TileLayerCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            switch (e.Action)
            {
            case NotifyCollectionChangedAction.Add:
                AddTileLayers(e.NewStartingIndex, e.NewItems.Cast <TileLayer>());
                break;

            case NotifyCollectionChangedAction.Remove:
                RemoveTileLayers(e.OldStartingIndex, e.OldItems.Count);
                break;

#if !SILVERLIGHT
            case NotifyCollectionChangedAction.Move:
#endif
            case NotifyCollectionChangedAction.Replace:
                RemoveTileLayers(e.NewStartingIndex, e.OldItems.Count);
                AddTileLayers(e.NewStartingIndex, e.NewItems.Cast <TileLayer>());
                break;

            case NotifyCollectionChangedAction.Reset:
                ClearTileLayers();
                if (e.NewItems != null)
                {
                    AddTileLayers(0, e.NewItems.Cast <TileLayer>());
                }
                break;

            default:
                break;
            }

            var tileLayer = TileLayers.FirstOrDefault();

            if (TileLayer != tileLayer)
            {
                TileLayer = tileLayer;
            }
        }
예제 #8
0
 public void LoadAlgorithmSettings()
 {
     FloorSettings.Clear();
     TileLayers.Clear();
     TileData.Clear();
     Items.Clear();
     Npcs.Clear();
     Rooms.Clear();
     if (Algorithm > -1)
     {
         FloorAlgorithm settingsGuide = GameData.FloorAlgorithmDex[Algorithm];
         for (int i = 0; i < settingsGuide.FloorSettings.Count; i++)
         {
             FloorSettings.Add(settingsGuide.FloorSettings[i].Item1, 0);
         }
         for (int i = 0; i < settingsGuide.LayerSettings.Count; i++)
         {
             TileLayers.Add(settingsGuide.LayerSettings[i], new List <Maps.TileAnim>());
         }
         for (int i = 0; i < settingsGuide.TileSettings.Count; i++)
         {
             TileData.Add(settingsGuide.TileSettings[i], new List <Maps.TileData>());
         }
         for (int i = 0; i < settingsGuide.ItemGroups.Count; i++)
         {
             Items.Add(settingsGuide.ItemGroups[i], new List <Tuple <ItemPreset, int> >());
         }
         for (int i = 0; i < settingsGuide.NpcGroups.Count; i++)
         {
             Npcs.Add(settingsGuide.NpcGroups[i], new List <Tuple <NpcPreset, int> >());
         }
         for (int i = 0; i < settingsGuide.RoomGroups.Count; i++)
         {
             Rooms.Add(settingsGuide.RoomGroups[i], new List <Tuple <int, int> >());
         }
     }
 }
예제 #9
0
파일: TmxMap.cs 프로젝트: Cryru/Emotion
        public TmxMap(XMLReader reader, string?filePath = null)
        {
            XMLReader?xMap = reader.Element("map");

            if (xMap == null)
            {
                return;
            }

            Version      = xMap.Attribute("version");
            TiledVersion = xMap.Attribute("tiledversion");

            Width           = xMap.AttributeInt("width");
            Height          = xMap.AttributeInt("height");
            TileWidth       = xMap.AttributeInt("tilewidth");
            TileHeight      = xMap.AttributeInt("tileheight");
            HexSideLength   = xMap.AttributeIntN("hexsidelength");
            Orientation     = xMap.AttributeEnum <Orientation>("orientation");
            StaggerAxis     = xMap.AttributeEnum <StaggerAxis>("staggeraxis");
            StaggerIndex    = xMap.AttributeEnum <StaggerIndex>("staggerindex");
            RenderOrder     = xMap.AttributeEnum <RenderOrder>("renderorder");
            NextObjectId    = xMap.AttributeIntN("nextobjectid");
            BackgroundColor = TmxHelpers.ParseTmxColor(xMap.Attribute("backgroundcolor"));

            Properties = TmxHelpers.GetPropertyDict(xMap.Element("properties"));

            foreach (XMLReader e in xMap.Elements("tileset"))
            {
                string?fileSource = e.Attribute("source");
                int    firstGid   = e.AttributeInt("firstgid");

                // Check if external file.
                if (!string.IsNullOrEmpty(fileSource))
                {
                    if (filePath != null)
                    {
                        string directory = AssetLoader.GetDirectoryName(filePath);
                        fileSource = AssetLoader.GetNonRelativePath(directory, fileSource);
                    }
                    var textAsset = Engine.AssetLoader.Get <TextAsset>(fileSource);
                    if (textAsset?.Content == null)
                    {
                        Engine.Log.Warning("Couldn't load external tileset.", MessageSource.TMX);
                        continue;
                    }

                    var       externalReader = new XMLReader(textAsset.Content);
                    XMLReader?tileSetElement = externalReader.Element("tileset");
                    if (tileSetElement == null)
                    {
                        continue;
                    }
                    Tilesets.Add(new TmxTileset(firstGid, tileSetElement));
                    continue;
                }

                Tilesets.Add(new TmxTileset(firstGid, e));
            }

            foreach (XMLReader e in xMap.Elements().Where(x => x.Name == "layer" || x.Name == "objectgroup" || x.Name == "imagelayer" || x.Name == "group"))
            {
                TmxLayer layer;
                switch (e.Name)
                {
                case "layer":
                    var tileLayer = new TmxLayer(e, Width, Height);
                    layer = tileLayer;
                    TileLayers.Add(tileLayer);
                    break;

                case "objectgroup":
                    var objectLayer = new TmxObjectLayer(e);
                    layer = objectLayer;
                    ObjectLayers.Add(objectLayer);
                    break;

                case "imagelayer":
                    var imageLayer = new TmxImageLayer(e);
                    layer = imageLayer;
                    ImageLayers.Add(imageLayer);
                    break;

                case "group":
                    var group = new TmxGroupedLayers(e, Width, Height);
                    layer = group;
                    Groups.Add(group);
                    break;

                default:
                    Engine.Log.Warning($"Unknown TMX layer type {e.Name}.", MessageSource.TMX);
                    continue;
                }

                Layers.Add(layer);
            }
        }
예제 #10
0
 public TileLayer GetLayerByName(string name)
 {
     return(TileLayers.Find(delegate(TileLayer t) { return t.Name.Equals(name); }));
 }