public UserInteractionHandler( PluginTrace pluginTrace, PluginInfo pluginInfo, Configuration config, WorldMetadata worldMetadata, PluginCooperationHandler pluginCooperationHandler, Action reloadConfigurationCallback ) : base(pluginTrace) { if (pluginTrace == null) { throw new ArgumentNullException(); } if (config == null) { throw new ArgumentNullException(); } if (worldMetadata == null) { throw new ArgumentNullException(); } if (pluginCooperationHandler == null) { throw new ArgumentNullException(); } if (reloadConfigurationCallback == null) { throw new ArgumentNullException(); } this.PluginInfo = pluginInfo; this.Config = config; this.WorldMetadata = worldMetadata; this.PluginCooperationHandler = pluginCooperationHandler; this.ReloadConfigurationCallback = reloadConfigurationCallback; this.RegisterCommand(new[] { "advancedcircuits", "ac" }, this.RootCommand_Exec); }
public CircuitHandler(PluginTrace pluginTrace, Configuration config, WorldMetadata worldMetadata, PluginCooperationHandler pluginCooperationHandler) { Contract.Requires <ArgumentNullException>(pluginTrace != null); Contract.Requires <ArgumentNullException>(config != null); Contract.Requires <ArgumentNullException>(worldMetadata != null); Contract.Requires <ArgumentNullException>(pluginCooperationHandler != null); this.PluginTrace = pluginTrace; this.Config = config; this.WorldMetadata = worldMetadata; this.PluginCooperationHandler = pluginCooperationHandler; this.isDayTime = Main.dayTime; this.isDaylight = (Main.dayTime && Main.time >= 7200 && Main.time <= 46800); // Timers are always inactive when a map is loaded, so switch them into their active state. foreach (DPoint activeTimerLocation in this.WorldMetadata.ActiveTimers.Keys) { ObjectMeasureData timerMeasureData = TerrariaUtils.Tiles.MeasureObject(activeTimerLocation); if (!TerrariaUtils.Tiles.ObjectHasActiveState(timerMeasureData)) { TerrariaUtils.Tiles.SetObjectState(timerMeasureData, true); } } }
protected override IMetadataFile InitMetadata() { WorldMetadata metadata = new WorldMetadata(); this.PluginTrace.WriteLineInfo("Starting one time metadata initialization..."); for (int x = 0; x < Main.maxTilesX - 1; x++) { for (int y = 0; y < Main.maxTilesY - 1; y++) { if (!TerrariaUtils.Tiles[x, y].active()) { continue; } DPoint tileLocation = new DPoint(x, y); switch (TerrariaUtils.Tiles[x, y].type) { case TileID.Timers: { // Is active timer? if (TerrariaUtils.Tiles[x, y].frameY > 0) { if (!metadata.ActiveTimers.ContainsKey(tileLocation)) { metadata.ActiveTimers.Add(tileLocation, new ActiveTimerMetadata()); } } break; } case TileID.GrandfatherClocks: { ObjectMeasureData measureData = TerrariaUtils.Tiles.MeasureObject(tileLocation); if (!metadata.Clocks.ContainsKey(measureData.OriginTileLocation)) { metadata.Clocks.Add(measureData.OriginTileLocation, new GrandfatherClockMetadata(null)); } break; } case AdvancedCircuits.BlockType_WirelessTransmitter: { foreach (DPoint portLocation in AdvancedCircuits.EnumerateComponentPortLocations(tileLocation, new DPoint(1, 1))) { if (TerrariaUtils.Tiles[portLocation].HasWire() && !metadata.WirelessTransmitters.ContainsKey(tileLocation)) { metadata.WirelessTransmitters.Add(tileLocation, "{Server}"); } } break; } } } } this.PluginTrace.WriteLineInfo("Metadata initialization complete."); return(metadata); }
public UserInteractionHandler( PluginTrace pluginTrace, PluginInfo pluginInfo, Configuration config, WorldMetadata worldMetadata, PluginCooperationHandler pluginCooperationHandler, Action reloadConfigurationCallback ): base(pluginTrace) { Contract.Requires<ArgumentNullException>(pluginTrace != null); Contract.Requires<ArgumentNullException>(config != null); Contract.Requires<ArgumentNullException>(worldMetadata != null); Contract.Requires<ArgumentNullException>(pluginCooperationHandler != null); Contract.Requires<ArgumentNullException>(reloadConfigurationCallback != null); this.PluginInfo = pluginInfo; this.Config = config; this.WorldMetadata = worldMetadata; this.PluginCooperationHandler = pluginCooperationHandler; this.ReloadConfigurationCallback = reloadConfigurationCallback; this.RegisterCommand(new[] { "advancedcircuits", "ac" }, this.RootCommand_Exec); }
public UserInteractionHandler( PluginTrace pluginTrace, PluginInfo pluginInfo, Configuration config, WorldMetadata worldMetadata, PluginCooperationHandler pluginCooperationHandler, Action reloadConfigurationCallback ) : base(pluginTrace) { Contract.Requires <ArgumentNullException>(pluginTrace != null); Contract.Requires <ArgumentNullException>(config != null); Contract.Requires <ArgumentNullException>(worldMetadata != null); Contract.Requires <ArgumentNullException>(pluginCooperationHandler != null); Contract.Requires <ArgumentNullException>(reloadConfigurationCallback != null); this.PluginInfo = pluginInfo; this.Config = config; this.WorldMetadata = worldMetadata; this.PluginCooperationHandler = pluginCooperationHandler; this.ReloadConfigurationCallback = reloadConfigurationCallback; this.RegisterCommand(new[] { "advancedcircuits", "ac" }, this.RootCommand_Exec); }
protected override IMetadataFile InitMetadata() { WorldMetadata metadata = new WorldMetadata(); this.PluginTrace.WriteLineInfo("Starting one time metadata initialization..."); for (int x = 0; x < Main.maxTilesX - 1; x++) { for (int y = 0; y < Main.maxTilesY - 1; y++) { if (!TerrariaUtils.Tiles[x, y].active()) continue; DPoint tileLocation = new DPoint(x, y); switch ((BlockType)TerrariaUtils.Tiles[x, y].type) { case BlockType.XSecondTimer: { // Is active timer? if (TerrariaUtils.Tiles[x, y].frameY > 0) if (!metadata.ActiveTimers.ContainsKey(tileLocation)) metadata.ActiveTimers.Add(tileLocation, new ActiveTimerMetadata()); break; } case BlockType.GrandfatherClock: { ObjectMeasureData measureData = TerrariaUtils.Tiles.MeasureObject(tileLocation); if (!metadata.Clocks.ContainsKey(measureData.OriginTileLocation)) metadata.Clocks.Add(measureData.OriginTileLocation, new GrandfatherClockMetadata(null)); break; } case AdvancedCircuits.BlockType_WirelessTransmitter: { foreach (DPoint portLocation in AdvancedCircuits.EnumerateComponentPortLocations(tileLocation, new DPoint(1, 1))) if (TerrariaUtils.Tiles[portLocation].HasWire() && !metadata.WirelessTransmitters.ContainsKey(tileLocation)) metadata.WirelessTransmitters.Add(tileLocation, "{Server}"); break; } } } } this.PluginTrace.WriteLineInfo("Metadata initialization complete."); return metadata; }
public CircuitHandler(PluginTrace pluginTrace,Configuration config, WorldMetadata worldMetadata, PluginCooperationHandler pluginCooperationHandler) { Contract.Requires<ArgumentNullException>(pluginTrace != null); Contract.Requires<ArgumentNullException>(config != null); Contract.Requires<ArgumentNullException>(worldMetadata != null); Contract.Requires<ArgumentNullException>(pluginCooperationHandler != null); this.PluginTrace = pluginTrace; this.Config = config; this.WorldMetadata = worldMetadata; this.PluginCooperationHandler = pluginCooperationHandler; this.isDayTime = Main.dayTime; this.isDaylight = (Main.dayTime && Main.time >= 7200 && Main.time <= 46800); // Timers are always inactive when a map is loaded, so switch them into their active state. foreach (DPoint activeTimerLocation in this.WorldMetadata.ActiveTimers.Keys) { ObjectMeasureData timerMeasureData = TerrariaUtils.Tiles.MeasureObject(activeTimerLocation); if(!TerrariaUtils.Tiles.ObjectHasActiveState(timerMeasureData)) TerrariaUtils.Tiles.SetObjectState(timerMeasureData, true); } }
protected override IMetadataFile ReadMetadataFromFile(string filePath) { WorldMetadata metadata = WorldMetadata.Read(filePath); // Invalidate Gates List <DPoint> gateLocations = new List <DPoint>(metadata.GateStates.Keys); foreach (DPoint gateLocation in gateLocations) { ITile tile = TerrariaUtils.Tiles[gateLocation]; if ( !tile.active() || ( tile.type != (int)AdvancedCircuits.BlockType_ANDGate && tile.type != (int)AdvancedCircuits.BlockType_ORGate && tile.type != (int)AdvancedCircuits.BlockType_XORGate) ) { metadata.GateStates.Remove(gateLocation); } } // Invalidate Active Timers List <DPoint> activeTimerLocations = new List <DPoint>(metadata.ActiveTimers.Keys); foreach (DPoint activeTimerLocation in activeTimerLocations) { ITile tile = TerrariaUtils.Tiles[activeTimerLocation]; if (!tile.active() || tile.type != TileID.Timers) { metadata.ActiveTimers.Remove(activeTimerLocation); } } // Invalidate Grandfather Clocks List <DPoint> clockLocations = new List <DPoint>(metadata.Clocks.Keys); for (int i = 0; i < clockLocations.Count; i++) { ITile tile = TerrariaUtils.Tiles[clockLocations[i]]; if (!tile.active() || tile.type != TileID.GrandfatherClocks) { clockLocations.RemoveAt(i--); } } // Invalidate Swappers List <DPoint> swapperLocations = new List <DPoint>(metadata.Swappers.Keys); foreach (DPoint swapperLocation in swapperLocations) { ITile tile = TerrariaUtils.Tiles[swapperLocation]; if (!tile.active() || tile.type != (int)AdvancedCircuits.BlockType_Swapper) { metadata.Swappers.Remove(swapperLocation); } } // Invalidate Wireless Transmitters List <DPoint> wirelessTransmitterLocations = new List <DPoint>(metadata.WirelessTransmitters.Keys); foreach (DPoint transmitterLocation in wirelessTransmitterLocations) { ITile tile = TerrariaUtils.Tiles[transmitterLocation]; if (!tile.active() || tile.type != (int)AdvancedCircuits.BlockType_WirelessTransmitter) { metadata.WirelessTransmitters.Remove(transmitterLocation); } } return(metadata); }