Tracker made in React for keeping track of HP and MP and so on.
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.
 
 
 
fabula-ultima-react/src/CharacterEditor.ts

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
}