weiss_core/
visibility_policy.rs1use crate::config::{CurriculumConfig, ObservationVisibility};
2use crate::events::Zone;
3use crate::state::TargetZone;
4
5#[derive(Clone, Copy, Debug, PartialEq, Eq)]
6pub enum ZoneIdentityVisibility {
7 Public,
8 OwnerOnly,
9}
10
11pub fn zone_identity_visibility(
12 zone: Zone,
13 curriculum: &CurriculumConfig,
14) -> ZoneIdentityVisibility {
15 match zone {
16 Zone::Deck | Zone::Hand | Zone::Stock => ZoneIdentityVisibility::OwnerOnly,
17 Zone::Memory => {
18 if curriculum.memory_is_public {
19 ZoneIdentityVisibility::Public
20 } else {
21 ZoneIdentityVisibility::OwnerOnly
22 }
23 }
24 _ => ZoneIdentityVisibility::Public,
25 }
26}
27
28pub fn target_zone_identity_visibility(
29 zone: TargetZone,
30 curriculum: &CurriculumConfig,
31) -> ZoneIdentityVisibility {
32 match zone {
33 TargetZone::Hand | TargetZone::DeckTop | TargetZone::Stock => {
34 ZoneIdentityVisibility::OwnerOnly
35 }
36 TargetZone::Memory => {
37 if curriculum.memory_is_public {
38 ZoneIdentityVisibility::Public
39 } else {
40 ZoneIdentityVisibility::OwnerOnly
41 }
42 }
43 _ => ZoneIdentityVisibility::Public,
44 }
45}
46
47pub fn hide_zone_for_viewer(
48 visibility: ObservationVisibility,
49 viewer: Option<u8>,
50 owner: u8,
51 zone: Zone,
52 curriculum: &CurriculumConfig,
53) -> bool {
54 if visibility != ObservationVisibility::Public {
55 return false;
56 }
57 match zone_identity_visibility(zone, curriculum) {
58 ZoneIdentityVisibility::Public => false,
59 ZoneIdentityVisibility::OwnerOnly => viewer.map(|v| v != owner).unwrap_or(true),
60 }
61}
62
63pub fn hide_target_zone_for_viewer(
64 visibility: ObservationVisibility,
65 viewer: Option<u8>,
66 owner: u8,
67 zone: TargetZone,
68 curriculum: &CurriculumConfig,
69) -> bool {
70 if visibility != ObservationVisibility::Public {
71 return false;
72 }
73 match target_zone_identity_visibility(zone, curriculum) {
74 ZoneIdentityVisibility::Public => false,
75 ZoneIdentityVisibility::OwnerOnly => viewer.map(|v| v != owner).unwrap_or(true),
76 }
77}