File size: 3,609 Bytes
a3830f2
 
 
 
 
427caef
a3830f2
427caef
 
 
 
 
 
 
6c5b86d
a3830f2
 
 
 
 
 
3eb99bc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
427caef
 
 
3eb99bc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a3830f2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
// portfolio/npc_social_network/static/js/npc_chat.js

async function sendMessage() {
    const userMessage = document.getElementById("message").value;
    const npc = document.getElementById("npc").value;
    const responseBox = document.getElementById("chatBox");

    if (userMessage.trim() == "") return;

    // UI에 μœ μ € λ©”μ‹œμ§€ μΆ”κ°€
    responseBox.innerHTML += `<div class = "chat-message"><span class="user">You:</span> ${userMessage}</div>`;
    document.getElementById("message").value = "";

    // μ„œλ²„μ— λ©”μ‹œμ§€ 전솑
    const response = await fetch('/npc_social_network/chat', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ message: userMessage, npc: npc })
    });

    const data = await response.json();

    // NPC 응닡 좜λ ₯
    responseBox.innerHTML += `<div class="chat-message"><span class="npc">${npc}:</span> ${data.npc_reply}</div>`;

    // 감정 summary ν‘œμ‹œ (μ±„νŒ…μ°½μ— 좜λ ₯)
    responseBox.innerHTML += `<div class="chat-message"><span class="npc">[감정 μƒνƒœ]:</span> ${data.memory_summary}</div>`;

    // 관계 μƒνƒœ μ—…λ°μ΄νŠΈ (상단 #relationStatus에 ν‘œμ‹œ)
    document.getElementById("relationStatus").innerText = `관계 점수: ${data.relationship_with_player}`;

    // Personality μƒνƒœ μ—…λ°μ΄νŠΈ
    const personalityStatusElem = document.getElementById("personalityStatus");
    personalityStatusElem.innerHTML = "";   // μ΄ˆκΈ°ν™”
    
    for (const [key, value] of Object.entries(data.personality)) {
        const li = document.createElement("li");
        li.textContent = `${key}: ${value.toFixed(2)}`;
        personalityStatusElem.appendChild(li);
    }

    // 슀크둀 ν•˜λ‹¨ κ³ μ •
    responseBox.scrollTop = responseBox.scrollHeight;
}

// NPC 정보 λ‘œλ“œ (NPC 선택 λ³€κ²½ μ‹œ 관계 점수 μ—…λ°μ΄νŠΈμš©)
async function loadNPCInfo() {
    const npc = document.getElementById("npc").value;
    const response = await fetch(`/npc_social_network/npc_info?npc=${encodeURIComponent(npc)}`);
    const data = await response.json();

    // 관계 μƒνƒœ μ—…λ°μ΄νŠΈ
    document.getElementById("relationStatus").innerText = `관계 점수: ${data.relationship_with_player}`;

    // Personality μƒνƒœ μ—…λ°μ΄νŠΈ
    const personalityStatusElem = document.getElementById("personalityStatus");
    personalityStatusElem.innerHTML = ""; // μ΄ˆκΈ°ν™”

    for (const [key, value] of Object.entries(data.personality)) {
        const li = document.createElement("li");
        li.textContent = `${key}: ${value.toFixed(2)}`;
        personalityStatusElem.appendChild(li);
    }
}

// λ²„νŠΌ 클릭 μ‹œ NPC μƒν˜Έμž‘μš© μˆ˜λ™ μ‹€ν–‰
async function triggerNPCInteractions() {
    const response = await fetch('/npc_social_network/trigger_npc_interactions', {
        method: 'POST'
    });
    const data = await response.json();
    console.log(data.status);  // μ½˜μ†” ν™•μΈμš©
}

// NPC κΈ°μ–΅ λ‘œλ“œ
async function loadNPCMemory() {
    const npc = document.getElementById("npc").value;
    const response = await fetch(`/npc_social_network/npc_memory?npc=${encodeURIComponent(npc)}`);
    const data = await response.json();

    const memoryListElem = document.getElementById("memoryList");
    memoryListElem.innerHTML = ""; // μ΄ˆκΈ°ν™”

    if (data.memory_list.length === 0) {
        memoryListElem.innerHTML = "<li>(κΈ°μ–΅μ—†μŒ)</li>";
        return;
    }

    data.memory_list.forEach(memory => {
        const li = document.createElement("li");
        li.textContent = memory;
        memoryListElem.appendChild(li); 
    });
}