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(); }
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(); }
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(); }