first draft is working

This commit is contained in:
2025-11-22 19:41:46 +01:00
parent e4289ee1ac
commit b3c4395fac
12 changed files with 1767 additions and 119 deletions

View File

@@ -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>