Exemplo n.º 1
0
        private static void HijackShoot()
        {
            TerminalControlHelper.EnsureTerminalControlCreated <MySmallMissileLauncher>();
            Func <object, bool> False = (o) => false;

            foreach (ITerminalControl control in MyTerminalControlFactory.GetControls(typeof(MyUserControllableGun)))
            {
                if (control.Id == "ShootOnce")
                {
                    MyTerminalControlButton <MyUserControllableGun> shootOnce = (MyTerminalControlButton <MyUserControllableGun>)control;
                    EventSync <GuidedMissileLauncher> termControl_shootOnce   = new EventSync <GuidedMissileLauncher>(shootOnce.Id, ShootOnceEvent, false);

                    Action <MyUserControllableGun> originalAction = shootOnce.Action;
                    shootOnce.Action = block => {
                        if (IsGuidedMissileLauncher(block))
                        {
                            termControl_shootOnce.RunEvent(block);
                        }
                        else
                        {
                            originalAction(block);
                        }
                    };

                    shootOnce.Actions[0].Action = shootOnce.Action;
                }
                else if (control.Id == "Shoot")
                {
                    MyTerminalControlOnOffSwitch <MyUserControllableGun> shoot = (MyTerminalControlOnOffSwitch <MyUserControllableGun>)control;
                    termControl_shoot = new ValueSync <bool, GuidedMissileLauncher>(shoot.Id, "value_termShoot");

                    var originalGetter = shoot.Getter;
                    var originalSetter = shoot.Setter;
                    shoot.Getter = (block) => {
                        if (IsGuidedMissileLauncher(block))
                        {
                            return(termControl_shoot.GetValue(block));
                        }
                        else
                        {
                            return(originalGetter(block));
                        }
                    };
                    shoot.Setter = (block, value) => {
                        if (IsGuidedMissileLauncher(block))
                        {
                            Logger.TraceLog("Set shoot: " + value);
                            termControl_shoot.SetValue(block, value);
                        }
                        else
                        {
                            originalSetter(block, value);
                        }
                    };

                    shoot.Actions[0].Action = block => shoot.SetValue(block, !shoot.GetValue(block));   // toggle
                    shoot.Actions[1].Action = block => shoot.SetValue(block, true);                     // on
                    shoot.Actions[2].Action = block => shoot.SetValue(block, false);                    // off
                    break;
                }
            }
        }
Exemplo n.º 2
0
 public GameClient(string host)
 {
     Client = new NetClient(host, protocol: new GameProtocol(), defaultEncoding: Encoding.ASCII, fireResponseEventAsync: false);
     Client.ResponseEvent += OnResponse;
     eventSyncDelegate = EventSyncDelegate;
 }