Beispiel #1
0
        private void HandleReceiveBodyPart(int key)
        {
            if (PerformerCache == null ||
                !PerformerCache.TryGetComponent(out IActorComponent? actor))
            {
                return;
            }

            CloseSurgeryUI(actor.playerSession);

            if (BodyCache == null)
            {
                return;
            }

            // TODO: sanity checks to see whether user is in range, user is still able-bodied, target is still the same, etc etc
            if (!OptionsCache.TryGetValue(key, out var targetObject))
            {
                BodyCache.Owner.PopupMessage(PerformerCache,
                                             Loc.GetString("You see no useful way to use the {0} anymore.", Owner.Name));
                return;
            }

            var target  = (IBodyPart)targetObject;
            var message = target.TryAddMechanism(this)
                ? Loc.GetString("You jam {0:theName} inside {1:them}.", Owner, PerformerCache)
                : Loc.GetString("You can't fit it in!");

            BodyCache.Owner.PopupMessage(PerformerCache, message);

            // TODO: {1:theName}
        }
Beispiel #2
0
        void IAfterInteract.AfterInteract(AfterInteractEventArgs eventArgs)
        {
            if (eventArgs.Target == null)
            {
                return;
            }

            CloseAllSurgeryUIs();
            OptionsCache.Clear();
            PerformerCache = null;
            BodyCache      = null;

            if (eventArgs.Target.TryGetComponent(out IBody? body))
            {
                SendBodyPartListToUser(eventArgs, body);
            }
            else if (eventArgs.Target.TryGetComponent <IBodyPart>(out var part))
            {
                DebugTools.AssertNotNull(part);

                if (!part.TryAddMechanism(this))
                {
                    eventArgs.Target.PopupMessage(eventArgs.User, Loc.GetString("You can't fit it in!"));
                }
            }
        }
Beispiel #3
0
        private void SendBodyPartListToUser(AfterInteractEventArgs eventArgs, IBody body)
        {
            // Create dictionary to send to client (text to be shown : data sent back if selected)
            var toSend = new Dictionary <string, int>();

            foreach (var(key, value) in body.Parts)
            {
                // For each limb in the target, add it to our cache if it is a valid option.
                if (value.CanAddMechanism(this))
                {
                    OptionsCache.Add(IdHash, value);
                    toSend.Add(key + ": " + value.Name, IdHash++);
                }
            }

            if (OptionsCache.Count > 0 &&
                eventArgs.User.TryGetComponent(out IActorComponent? actor))
            {
                OpenSurgeryUI(actor.playerSession);
                UpdateSurgeryUIBodyPartRequest(actor.playerSession, toSend);
                PerformerCache = eventArgs.User;
                BodyCache      = body;
            }
            else // If surgery cannot be performed, show message saying so.
            {
                eventArgs.Target.PopupMessage(eventArgs.User,
                                              Loc.GetString("You see no way to install the {0}.", Owner.Name));
            }
        }
        /// <summary>
        ///     Called after the client chooses from a list of possible BodyParts that can be operated on.
        /// </summary>
        private void HandleReceiveBodyPart(int key)
        {
            if (PerformerCache == null ||
                !_entities.TryGetComponent(PerformerCache.Value, out ActorComponent? actor))
            {
                return;
            }

            CloseSurgeryUI(actor.PlayerSession);

            if (BodyCache == null)
            {
                return;
            }

            // TODO: sanity checks to see whether user is in range, user is still able-bodied, target is still the same, etc etc
            if (!OptionsCache.TryGetValue(key, out var targetObject))
            {
                BodyCache.Owner.PopupMessage(PerformerCache.Value,
                                             Loc.GetString("mechanism-component-no-useful-way-to-use-message", ("partName", Name: _entities.GetComponent <MetaDataComponent>(Owner).EntityName)));
                return;
            }

            var target  = (SharedBodyPartComponent)targetObject;
            var message = target.TryAddMechanism(this)
                ? Loc.GetString("mechanism-component-jam-inside-message", ("ownerName", Owner), ("them", PerformerCache))
                : Loc.GetString("mechanism-component-cannot-fit-message");

            BodyCache.Owner.PopupMessage(PerformerCache.Value, message);

            // TODO: {1:theName}
        }
        private void SendBodyPartListToUser(AfterInteractEventArgs eventArgs, SharedBodyComponent body)
        {
            // Create dictionary to send to client (text to be shown : data sent back if selected)
            var toSend = new Dictionary <string, int>();

            foreach (var(part, slot) in body.Parts)
            {
                // For each limb in the target, add it to our cache if it is a valid option.
                if (part.CanAddMechanism(this))
                {
                    OptionsCache.Add(IdHash, slot);
                    toSend.Add(part + ": " + part.Name, IdHash++);
                }
            }

            if (OptionsCache.Count > 0 &&
                _entities.TryGetComponent(eventArgs.User, out ActorComponent? actor))
            {
                OpenSurgeryUI(actor.PlayerSession);
                UpdateSurgeryUIBodyPartRequest(actor.PlayerSession, toSend);
                PerformerCache = eventArgs.User;
                BodyCache      = body;
            }
            else // If surgery cannot be performed, show message saying so.
            {
                eventArgs.Target?.PopupMessage(eventArgs.User,
                                               Loc.GetString("mechanism-component-no-way-to-install-message", ("partName", Name: _entities.GetComponent <MetaDataComponent>(Owner).EntityName)));
            }
        }
        async Task <bool> IAfterInteract.AfterInteract(AfterInteractEventArgs eventArgs)
        {
            if (eventArgs.Target == null)
            {
                return(false);
            }

            CloseAllSurgeryUIs();
            OptionsCache.Clear();
            PerformerCache = null;
            BodyCache      = null;

            if (_entities.TryGetComponent(eventArgs.Target.Value, out SharedBodyComponent? body))
            {
                SendBodyPartListToUser(eventArgs, body);
            }
            else if (_entities.TryGetComponent <SharedBodyPartComponent?>(eventArgs.Target.Value, out var part))
            {
                DebugTools.AssertNotNull(part);

                if (!part.TryAddMechanism(this))
                {
                    eventArgs.Target.Value.PopupMessage(eventArgs.User, Loc.GetString("mechanism-component-cannot-fit-message"));
                }
            }

            return(true);
        }
        /// <summary>
        /// 添加自定义的Repository服务,完成dbcontext的注入,Repository的注入
        /// </summary>
        /// <param name="services"></param>
        /// <param name="action"></param>
        public static void AddCache(this IServiceCollection services, Action <OptionsCache> action)
        {
            OptionsCache options = new OptionsCache();

            action.Invoke(options);
            ServiceCache srv = new ServiceCache(services, options);

            srv.LoadCache();
        }
        static async Task Main(string[] args)
        {
            var loggerFactory            = new LoggerFactory();
            var optionsFactory           = new OptionsFactory <ConsoleLoggerOptions>(new IConfigureOptions <ConsoleLoggerOptions> [0], new IPostConfigureOptions <ConsoleLoggerOptions> [0]);
            var optionsTokenChangeSource = new IOptionsChangeTokenSource <ConsoleLoggerOptions> [0];
            var optionsCache             = new OptionsCache <ConsoleLoggerOptions>();
            var optionsMonitor           = new OptionsMonitor <ConsoleLoggerOptions>(optionsFactory, optionsTokenChangeSource, optionsCache);
            var consoleLoggerProvider    = new ConsoleLoggerProvider(optionsMonitor);

            loggerFactory.AddProvider(consoleLoggerProvider);

            var logger = loggerFactory.CreateLogger <Program>();

            logger.LogTrace("Logging trace-level event");
            logger.LogDebug("Logging debug-level event");
            logger.LogInformation("Logging information-level event");
            logger.LogWarning("Logging warning-level event");
            logger.LogError("Logging error-level event");
            logger.LogCritical("Logging critical-level event");

            Console.ReadKey();
        }
Beispiel #9
0
        private static void InitializeLogger()
        {
            // Here a method had been used that was marked as obsolete in Microsoft.Extensions.Logging 2.2
            // and has been removed in version 3.0 -> this is the workaround for it.
            // Refactoring the whole thing to make use of dependencyInjection will become necessary at some
            // point in the future.
            var configureNamedOptions = new ConfigureNamedOptions <ConsoleLoggerOptions>("", null);
            var postConfigureOptions  = Enumerable.Empty <IPostConfigureOptions <ConsoleLoggerOptions> >();
            var setups                    = new [] { configureNamedOptions };
            var optionsFactory            = new OptionsFactory <ConsoleLoggerOptions>(setups, postConfigureOptions);
            var optionsChangeTokenSources = Enumerable.Empty <IOptionsChangeTokenSource <ConsoleLoggerOptions> >();
            var optionsMonitorCache       = new OptionsCache <ConsoleLoggerOptions>();
            var optionsMonitor            = new OptionsMonitor <ConsoleLoggerOptions>(optionsFactory, optionsChangeTokenSources, optionsMonitorCache);
            var loggerFilterOptions       = new LoggerFilterOptions {
                MinLevel = LogLevel.Debug
            };
            var consoleLoggerProvider = new ConsoleLoggerProvider(optionsMonitor);

            var loggerFactory = new LoggerFactory(new[] { consoleLoggerProvider }, loggerFilterOptions);

            ApplicationLogging.LoggerFactory = loggerFactory;
            Logger = ApplicationLogging.CreateLogger("Program");
        }
Beispiel #10
0
 public ServiceCache(IServiceCollection _services, OptionsCache _options)
 {
     options  = _options;
     services = _services;
 }