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); }
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)); }