public void MakeChargingAndScheduleShot(SelfRailgunChargingShotEvent evt, ReadyRailgunChargingWeaponControllerNode chargingWeaponController)
        {
            Entity entity = chargingWeaponController.Entity;

            entity.RemoveComponent <ReadyRailgunChargingWeaponComponent>();
            entity.AddComponent <RailgunChargingStateComponent>();
            EventBuilder builder = base.NewEvent <RailgunDelayedShotPrepareEvent>();

            builder.Attach(chargingWeaponController);
            builder.ScheduleDelayed(chargingWeaponController.railgunChargingWeapon.ChargingTime);
        }
        public void RegisterNewUser(ButtonClickEvent e, SingleNode <FinishRegistrationButtonComponent> node, [JoinByScreen] SingleNode <RegistrationScreenComponent> screen, [JoinAll] SecuredClientSessionNode clientSession, [JoinByUser] Optional <SingleNode <UserIncompleteRegistrationComponent> > user, [JoinAll] Optional <SingleNode <SteamMarkerComponent> > steam, [JoinAll] Optional <SubscribeCheckboxNode> subscribeCheckbox)
        {
            RegistrationScreenComponent component = screen.component;

            byte[] digest = PasswordSecurityUtils.GetDigest(component.Password);
            RequestRegisterUserEvent eventInstance = new RequestRegisterUserEvent {
                Uid = component.Uid,
                HardwareFingerprint     = HardwareFingerprintUtils.HardwareFingerprint,
                EncryptedPasswordDigest = PasswordSecurityUtils.RSAEncryptAsString(clientSession.sessionSecurityPublic.PublicKey, digest),
                Email      = component.Email,
                Steam      = steam.IsPresent(),
                Subscribed = !subscribeCheckbox.IsPresent() || subscribeCheckbox.Get().checkbox.IsChecked
            };
            EventBuilder builder = base.NewEvent(eventInstance).Attach(clientSession);

            if (user.IsPresent())
            {
                builder.Attach(user.Get());
            }
            builder.Schedule();
            clientSession.Entity.AddComponent(new AutoLoginTokenAwaitingComponent(digest));
            screen.component.LockScreen(true);
        }