コード例 #1
0
        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);
        }
コード例 #2
0
        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);
                }
            }
        }
コード例 #3
0
        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);
        }
コード例 #4
0
    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);
    }
コード例 #5
0
        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);
        }
コード例 #6
0
    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;
    }
コード例 #7
0
    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);
      }
    }
コード例 #8
0
        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);
        }