You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
155 lines
3.7 KiB
155 lines
3.7 KiB
import {Character} from "./CharacterStatus";
|
|
|
|
interface CharacterPrivacySettings {
|
|
readonly showCharacter: boolean
|
|
readonly showHp: boolean
|
|
readonly showHealth: boolean
|
|
readonly showMp: boolean
|
|
readonly showIp: boolean
|
|
readonly showSp: boolean
|
|
readonly showName: boolean
|
|
readonly showPortrait: boolean
|
|
readonly showTurns: boolean
|
|
readonly showStatuses: boolean
|
|
readonly showLevel: boolean
|
|
}
|
|
|
|
enum CharacterPrivacy {
|
|
Friend = "friend",
|
|
ScannedEnemy = "scanned enemy",
|
|
LightlyScannedEnemy = "lightly scanned enemy",
|
|
UnscannedEnemy = "unscanned enemy",
|
|
SecretiveEnemy = "secretive",
|
|
Hidden = "hidden",
|
|
}
|
|
|
|
const CharacterPrivacySettings: Record<CharacterPrivacy, CharacterPrivacySettings> = {
|
|
[CharacterPrivacy.Friend]: {
|
|
showCharacter: true,
|
|
showHp: true,
|
|
showHealth: true,
|
|
showMp: true,
|
|
showIp: true,
|
|
showSp: true,
|
|
showName: true,
|
|
showPortrait: true,
|
|
showTurns: true,
|
|
showStatuses: true,
|
|
showLevel: true,
|
|
},
|
|
[CharacterPrivacy.ScannedEnemy]: {
|
|
showCharacter: true,
|
|
showHp: true,
|
|
showHealth: true,
|
|
showMp: true,
|
|
showIp: false,
|
|
showSp: true,
|
|
showName: true,
|
|
showPortrait: true,
|
|
showTurns: true,
|
|
showStatuses: true,
|
|
showLevel: true,
|
|
},
|
|
[CharacterPrivacy.LightlyScannedEnemy]: {
|
|
showCharacter: true,
|
|
showHp: true,
|
|
showHealth: true,
|
|
showMp: false,
|
|
showIp: false,
|
|
showSp: true,
|
|
showName: true,
|
|
showPortrait: true,
|
|
showTurns: true,
|
|
showStatuses: true,
|
|
showLevel: true,
|
|
},
|
|
[CharacterPrivacy.UnscannedEnemy]: {
|
|
showCharacter: true,
|
|
showHp: false,
|
|
showHealth: true,
|
|
showMp: false,
|
|
showIp: false,
|
|
showSp: true,
|
|
showName: true,
|
|
showPortrait: true,
|
|
showTurns: true,
|
|
showStatuses: true,
|
|
showLevel: false,
|
|
},
|
|
[CharacterPrivacy.SecretiveEnemy]: {
|
|
showCharacter: true,
|
|
showHp: false,
|
|
showHealth: true,
|
|
showMp: false,
|
|
showIp: false,
|
|
showSp: false,
|
|
showName: false,
|
|
showPortrait: true,
|
|
showTurns: true,
|
|
showStatuses: true,
|
|
showLevel: false,
|
|
},
|
|
[CharacterPrivacy.Hidden]: {
|
|
showCharacter: false,
|
|
showHp: false,
|
|
showHealth: false,
|
|
showMp: false,
|
|
showIp: false,
|
|
showSp: false,
|
|
showName: false,
|
|
showPortrait: false,
|
|
showTurns: false,
|
|
showStatuses: false,
|
|
showLevel: false,
|
|
}
|
|
}
|
|
|
|
function applyPrivacy(c: EditableCharacter): Character|null {
|
|
const p = CharacterPrivacySettings[c.privacy ?? CharacterPrivacy.Hidden]
|
|
if (!p.showCharacter) {
|
|
return null
|
|
}
|
|
const out: {-readonly [Field in keyof EditableCharacter]?: EditableCharacter[Field]} = Object.assign({}, c)
|
|
delete out.privacy
|
|
if (!p.showHp) {
|
|
delete out.hp
|
|
delete out.maxHp
|
|
if (!p.showHealth) {
|
|
delete out.health
|
|
}
|
|
}
|
|
if (!p.showMp) {
|
|
delete out.mp
|
|
delete out.maxMp
|
|
}
|
|
if (!p.showIp) {
|
|
delete out.ip
|
|
delete out.maxIp
|
|
}
|
|
if (!p.showSp) {
|
|
delete out.sp
|
|
delete out.spType
|
|
}
|
|
if (!p.showName) {
|
|
delete out.name
|
|
}
|
|
if (!p.showPortrait) {
|
|
delete out.portraitUrl
|
|
}
|
|
if (!p.showTurns) {
|
|
delete out.turnsLeft
|
|
delete out.turnsTotal
|
|
delete out.canAct
|
|
}
|
|
if (!p.showStatuses) {
|
|
delete out.statuses
|
|
}
|
|
if (!p.showLevel) {
|
|
delete out.level
|
|
}
|
|
return out
|
|
}
|
|
|
|
interface EditableCharacter extends Character {
|
|
privacy: CharacterPrivacy
|
|
} |