コード例 #1
0
        public ViewModelWorldObjectAccessModeEditor(IWorldObject worldObject, bool canSetAccessMode)
        {
            this.worldObject      = worldObject;
            this.CanSetAccessMode = canSetAccessMode;

            if (!(worldObject.ProtoGameObject is IProtoObjectWithAccessMode protoObjectWithAccessMode))
            {
                throw new Exception("This world object doesn't have an access mode");
            }

            var accessModes = Enum.GetValues(typeof(WorldObjectAccessMode))
                              .Cast <WorldObjectAccessMode>();

            if (!protoObjectWithAccessMode.IsClosedAccessModeAvailable)
            {
                accessModes = accessModes.ExceptOne(WorldObjectAccessMode.Closed);
            }

            this.AccessModes = accessModes
                               .Select(e => new ViewModelEnum <WorldObjectAccessMode>(e))
                               .OrderBy(vm => vm.Order)
                               .ToArray();

            this.privateState = worldObject.GetPrivateState <IObjectWithAccessModePrivateState>();

            this.privateState.ClientSubscribe(
                _ => _.AccessMode,
                _ => this.RefreshAccessMode(),
                this);

            this.RefreshAccessMode();
        }
コード例 #2
0
        public ViewModelWorldObjectFactionAccessEditorControl(IWorldObject worldObject)
        {
            this.worldObject = worldObject;
            this.accessRight = WorldObjectAccessModeSystem.SharedGetFactionAccessRightRequirementForObject(worldObject);

            if (worldObject.ProtoGameObject is not IProtoObjectWithAccessMode protoObjectWithAccessMode)
            {
                throw new Exception("This world object doesn't have an access mode");
            }

            this.isClosedModeAvailable   = protoObjectWithAccessMode.IsClosedAccessModeAvailable;
            this.isEveryoneModeAvailable = protoObjectWithAccessMode.IsEveryoneAccessModeAvailable;

            this.privateState = worldObject.GetPrivateState <IObjectWithAccessModePrivateState>();
            this.privateState.ClientSubscribe(_ => _.FactionAccessMode,
                                              _ => this.RefreshCheckboxes(),
                                              this);

            FactionSystem.ClientCurrentFactionAccessRightsChanged += this.CurrentFactionAccessRightsChanged;

            this.RecreateViewModelAccessModes();
        }
コード例 #3
0
        public ViewModelWorldObjectDirectAccessEditor(IStaticWorldObject worldObject, bool canSetAccessMode)
        {
            this.worldObject      = worldObject;
            this.CanSetAccessMode = canSetAccessMode;

            if (!(worldObject.ProtoGameObject is IProtoObjectWithAccessMode protoObjectWithAccessMode))
            {
                throw new Exception("This world object doesn't have an access mode");
            }

            IEnumerable <WorldObjectDirectAccessMode> accessModes
                = EnumExtensions.GetValues <WorldObjectDirectAccessMode>();

            if (!protoObjectWithAccessMode.IsClosedAccessModeAvailable)
            {
                accessModes = accessModes.ExceptOne(WorldObjectDirectAccessMode.Closed);
            }

            if (!protoObjectWithAccessMode.IsEveryoneAccessModeAvailable)
            {
                accessModes = accessModes.ExceptOne(WorldObjectDirectAccessMode.OpensToEveryone);
            }

            this.AccessModes = accessModes
                               .Select(e => new ViewModelAccessMode(e))
                               .OrderBy(vm => vm.Order)
                               .ToArray();

            this.privateState = worldObject.GetPrivateState <IObjectWithAccessModePrivateState>();

            this.privateState.ClientSubscribe(
                _ => _.DirectAccessMode,
                _ => this.RefreshAccessMode(),
                this);

            this.RefreshAccessMode();
        }