first draft is working
This commit is contained in:
@@ -1,21 +1,37 @@
|
||||
<script lang="ts">
|
||||
import { onMount } from 'svelte';
|
||||
import { API_BASE } from '$lib/config';
|
||||
|
||||
export let currentCharacter: any;
|
||||
export let currentCharacterData: any;
|
||||
|
||||
// Use character data if provided
|
||||
let characterInfo = currentCharacter?.characterInfo || {
|
||||
//{ name: "Name", value: "", type: ""},
|
||||
Metatype : "",
|
||||
Age : 30,
|
||||
Sex : "Man",
|
||||
Nuyen: 0,
|
||||
Lifestyle: "",
|
||||
"Total Karma": 0,
|
||||
"C. Karma": 0,
|
||||
"Street Cred": 0,
|
||||
Notoriety : 0,
|
||||
Fame : 0
|
||||
let characterData = currentCharacterData ?? {};
|
||||
|
||||
characterData.Info ??= {
|
||||
Metatype : "",
|
||||
Age : 30,
|
||||
Sex : "Man",
|
||||
Nuyen: 0,
|
||||
Lifestyle: "",
|
||||
"Total Karma": 0,
|
||||
"C. Karma": 0,
|
||||
"Street Cred": 0,
|
||||
Notoriety : 0,
|
||||
Fame : 0
|
||||
};
|
||||
|
||||
characterData.Attributes ??= {
|
||||
Agility: 1,
|
||||
Body: 1,
|
||||
Charisma: 1,
|
||||
Edge: 1,
|
||||
Essence: 1,
|
||||
Initiative: 1,
|
||||
Intuition: 1,
|
||||
Logic: 1,
|
||||
Reaction: 1,
|
||||
Strength: 1,
|
||||
Willpower: 1,
|
||||
};
|
||||
|
||||
const characterInfoTypes = {
|
||||
@@ -29,22 +45,7 @@
|
||||
"Street Cred": "number",
|
||||
Notoriety: "number",
|
||||
Fame: "number"
|
||||
};
|
||||
|
||||
// Use character data if provided
|
||||
let attributes = currentCharacter?.attributes || [
|
||||
{ name: 'Body', value: 1 },
|
||||
{ name: 'Agility', value: 1 },
|
||||
{ name: 'Reaction', value: 1 },
|
||||
{ name: 'Strength', value: 1 },
|
||||
{ name: 'Charisma', value: 1 },
|
||||
{ name: 'Intuition', value: 1 },
|
||||
{ name: 'Logic', value: 1 },
|
||||
{ name: 'Willpower', value: 1 },
|
||||
{ name: 'Edge', value: 1 },
|
||||
{ name: 'Essence', value: 0 },
|
||||
{ name: 'Initiative', value: 0}
|
||||
];
|
||||
};
|
||||
|
||||
let skills = currentCharacter?.skills || [
|
||||
{ name: 'Pistols', rating: 0, linked: 'Agility' },
|
||||
@@ -53,10 +54,10 @@
|
||||
];
|
||||
|
||||
async function saveCharacterData() {
|
||||
const res = await fetch(`${API_BASE}/api/shadowrun/characters_data`, {
|
||||
const res = await fetch(`${API_BASE}/api/shadowrun/characters_data/${currentCharacter.id}`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ characterInfo })
|
||||
body: JSON.stringify(characterData)
|
||||
});
|
||||
}
|
||||
|
||||
@@ -64,26 +65,33 @@
|
||||
let inventory = currentCharacter?.inventory || [];
|
||||
</script>
|
||||
|
||||
|
||||
<h1>Name: {currentCharacter.name}</h1>
|
||||
|
||||
<h2>Character Info</h2>
|
||||
{#each Object.entries(characterInfo) as [key, value], i}
|
||||
{#each Object.entries(characterData["Info"]) as [key, value], i}
|
||||
<div class="input-row">
|
||||
<label for={"field-" + i}>{key}</label>
|
||||
<input
|
||||
id={"field-" + i}
|
||||
type={characterInfoTypes[key]}
|
||||
bind:value={value}
|
||||
bind:value={characterData["Info"][key]}
|
||||
min={characterInfoTypes[key] === "number" ? 0 : null} />
|
||||
</div>
|
||||
{/each}
|
||||
|
||||
<h2>Attributes</h2>
|
||||
{#each attributes as field, i}
|
||||
<label>
|
||||
{field.name}:
|
||||
<input type="number" min="1" bind:value={field.value} />
|
||||
</label>
|
||||
{#each Object.entries(characterData["Attributes"]) as [key, value], i}
|
||||
<div class="input-row">
|
||||
<label for={"field-" + i}>{key}</label>
|
||||
<input
|
||||
id={"field-" + i}
|
||||
type="number"
|
||||
bind:value={characterData["Attributes"][key]}
|
||||
min=0 />
|
||||
</div>
|
||||
{/each}
|
||||
|
||||
<!--
|
||||
<h2>Skills</h2>
|
||||
{#each skills as skill, i}
|
||||
<div>
|
||||
@@ -96,4 +104,6 @@
|
||||
</select>
|
||||
<span>Dice Pool: {skill.rating + attributes[skill.linked]}</span>
|
||||
</div>
|
||||
{/each}
|
||||
{/each}
|
||||
-->
|
||||
<button on:click={saveCharacterData}>Save</button>
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
};
|
||||
|
||||
let characters: Character[] = [];
|
||||
let currentCharacter: any = null;
|
||||
let currentCharacterData : any = null
|
||||
let selectedCharId: number | null = null;
|
||||
let creatingNew = false;
|
||||
let newCharName = '';
|
||||
@@ -20,6 +22,12 @@
|
||||
characters = await res.json();
|
||||
}
|
||||
|
||||
async function loadCharacterData(characterId : number) {
|
||||
const res = await fetch(`${API_BASE}/api/shadowrun/characters_data/${characterId}`);
|
||||
if (res.ok)
|
||||
currentCharacterData = await res.json();
|
||||
}
|
||||
|
||||
onMount(loadCharacters);
|
||||
|
||||
async function loadCharacter() {
|
||||
@@ -28,6 +36,7 @@
|
||||
const res = await fetch(`${API_BASE}/api/shadowrun/characters/${selectedCharId}`);
|
||||
if (res.ok) {
|
||||
const data = await res.json();
|
||||
await loadCharacterData(data.id)
|
||||
currentCharacter = data;
|
||||
creatingNew = false;
|
||||
}
|
||||
@@ -49,7 +58,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
let currentCharacter: any = null;
|
||||
</script>
|
||||
|
||||
{#if !currentCharacter}
|
||||
@@ -76,5 +84,5 @@
|
||||
<button on:click={createCharacter}>Create</button>
|
||||
</div>
|
||||
{:else}
|
||||
<CharacterSheet {currentCharacter} />
|
||||
<CharacterSheet {currentCharacter} {currentCharacterData} />
|
||||
{/if}
|
||||
|
||||
Reference in New Issue
Block a user