コード例 #1
0
        public IEnumerator <bool> Init()
        {
            cannonSettings = new INISerializer("CannonSettings");
            cannonSettings.AddValue("referenceName", x => x, "RCReference");
            cannonSettings.AddValue("speedCap", x => double.Parse(x), 104.38);
            cannonSettings.AddValue("launchVelocity", x => double.Parse(x), 100.0);
            cannonSettings.AddValue("sourceRotorTName", x => x, "[OrbitalCannonBase]_[Azimuth]");
            cannonSettings.AddValue("elevationTag", x => x, "[Elevation]");
            cannonSettings.AddValue("timerName", x => x, "CannonTimer");


            if (Me.CustomData == "")
            {
                string temp = Me.CustomData;
                cannonSettings.FirstSerialization(ref temp);
                Me.CustomData = temp;
            }
            else
            {
                cannonSettings.DeSerialize(Me.CustomData);
            }
            yield return(true);

            ingameTime = new IngameTime();
            GTSUtils   = new GridTerminalSystemUtils(Me, GridTerminalSystem);

            yield return(true);

            IMyShipController reference   = GridTerminalSystem.GetBlockWithName((string)cannonSettings.GetValue("referenceName")) as IMyShipController;
            IMyMotorStator    sourceRotor = GridTerminalSystem.GetBlockWithName((string)cannonSettings.GetValue("sourceRotorTName")) as IMyMotorStator;
            IMyTimerBlock     timer       = GridTerminalSystem.GetBlockWithName((string)cannonSettings.GetValue("timerName")) as IMyTimerBlock;

            Echo($"Getting blocks status:...\nreference: {reference != null}\nsourceRotor: {sourceRotor != null}");

            if (reference == null || sourceRotor == null)
            {
                throw new Exception("cant get blocks!");
            }

            yield return(true);

            targeter = new Targeter
                       (
                (double)cannonSettings.GetValue("speedCap"),
                (double)cannonSettings.GetValue("launchVelocity"),
                reference
                       );
            targeter.directionFoundCallback += TargetCalculatedCallback;

            yield return(true);

            cannon       = Cannon.CreateCannon(sourceRotor, GTSUtils, ingameTime, reference, (string)cannonSettings.GetValue("sourceRotorTName"), (string)cannonSettings.GetValue("elevationTag"));
            cannon.Timer = timer;
            yield return(true);

            Echo("Initialized!");
            initialized = true;
        }