예제 #1
0
        static TileBHandler LoadTypeSpecific(ushort t)
        {
            if (TypeSpecificHandlers.ContainsKey(t))
            {
                return(TypeSpecificHandlers[t]);
            }

            TileBHandler h = null; // will be set to <non-null> only if a behaviour handler will be attached

            if (Handler.TileDef.DefsByType.ContainsKey(t))
            {
                var d = Handler.TileDef.DefsByType[t];

                if (d.CreateBehaviour != null)
                {
                    var b = d.CreateBehaviour();

                    if (b != null)
                    {
                        h = new TileBHandler();

                        b.Mod = d.Mod == PrismApi.VanillaInfo ? null : ModData.mods[d.Mod];

                        h.behaviours.Add(b);
                    }
                }
            }

            var bs = ModData.mods.Values
                     .Select(m => new KeyValuePair <ModDef, TileBehaviour>(m, m.ContentHandler.CreateGlobalTileBInternally()))
                     .Where(kvp => kvp.Value != null)
                     .Select(kvp =>
            {
                kvp.Value.Mod = kvp.Key;
                return(kvp.Value);
            });

            if (!bs.IsEmpty() && h == null)
            {
                h = new TileBHandler();
            }

            if (h != null)
            {
                h.behaviours.AddRange(bs);

                h.Create();
                TypeSpecificHandlers.Add(t, h);

                // HasTile is false atm

                h.OnInit();
            }

            return(h);
        }
예제 #2
0
        internal static Tuple <TileBHandler, TileBHandler> CreateBHandler(Point16 p)
        {
            TileBHandler h = null;
            var          t = Main.tile[p.X, p.Y].type;

            var tsh = LoadTypeSpecific(t);

            if (Handler.TileDef.DefsByType.ContainsKey(t))
            {
                var d = Handler.TileDef.DefsByType[t];

                if (d.CreateInstanceBehaviour != null)
                {
                    var b = d.CreateInstanceBehaviour();

                    if (b != null)
                    {
                        h = new TileBHandler();

                        b.Mod = d.Mod == PrismApi.VanillaInfo ? null : ModData.mods[d.Mod];

                        h.behaviours.Add(b);
                    }
                }
            }

            if (h != null)
            {
                h.Create();
                TileSpecificHandlers.Add(p, h);

                foreach (var b in h.Behaviours)
                {
                    b.HasTile  = true;
                    b.Position = p;
                }

                h.OnInit();
            }

            return(Tuple.Create(h, tsh));
        }