rorshi commited on
Commit
3b5daf4
·
1 Parent(s): f1c565e

phase 3 구현 중

Browse files
npc_social_network/npc/npc_base.py CHANGED
@@ -83,6 +83,7 @@ class NPC:
83
  # 감정 상태 등 감정 관리자 초기화
84
  self.personality = PersonalityManager(personality)
85
  self.relationships = RelationshipManager(self)
 
86
  self.emotion = EmotionManager(EMOTION_DECAY_RATE, self.personality)
87
  # 행동 관리자
88
  self.behavior = BehaviorManager()
@@ -457,3 +458,11 @@ class NPC:
457
  memory_type="Symbolic",
458
  )
459
  print(f"[{self.name}]의 새로운 깨달음: {symbolic_thought}")
 
 
 
 
 
 
 
 
 
83
  # 감정 상태 등 감정 관리자 초기화
84
  self.personality = PersonalityManager(personality)
85
  self.relationships = RelationshipManager(self)
86
+ self.relation = {} # 다른 NPC에 대한 평판 저장
87
  self.emotion = EmotionManager(EMOTION_DECAY_RATE, self.personality)
88
  # 행동 관리자
89
  self.behavior = BehaviorManager()
 
458
  memory_type="Symbolic",
459
  )
460
  print(f"[{self.name}]의 새로운 깨달음: {symbolic_thought}")
461
+
462
+ def update_reputation(self, target_name: str, score_change: int):
463
+ """특정 대상에 대한 평판 점수를 변경"""
464
+ if self.name == target_name: return # 자기 자신에 대한 평판x (자기 자신의 평판에 대한 내용도 성격 형성에 중요할 수 있지 않나?)
465
+
466
+ current_score = self.reputation.get(target_name, 0)
467
+ self.reputation[target_name] = current_score + score_change
468
+ print(f"[{self.name}]의 {target_name}에 대한 평판: {self.reputation[target_name]} ({score_change:+.0f})")
npc_social_network/simulation_core.py CHANGED
@@ -1,8 +1,9 @@
1
- # npc_social_network/simulation_core.py
2
  # 시뮬레이션의 '상태 저장소' & '엔진'
3
 
4
  import threading
5
  import time
 
6
  from .npc.npc_manager import NPCManager
7
  from .scenarios.scenario_setup import setup_initial_scenario
8
  from .manager.simulation_manager import save_simulation, load_simulation
@@ -68,3 +69,39 @@ def initialize_simulation():
68
  # 백그라운드 스레드에서 시뮬레이션 루프 시작
69
  simulation_thread = threading.Thread(target=simulation_loop, daemon=True)
70
  simulation_thread.start()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # portfolio/npc_social_network/simulation_core.py
2
  # 시뮬레이션의 '상태 저장소' & '엔진'
3
 
4
  import threading
5
  import time
6
+ import random
7
  from .npc.npc_manager import NPCManager
8
  from .scenarios.scenario_setup import setup_initial_scenario
9
  from .manager.simulation_manager import save_simulation, load_simulation
 
69
  # 백그라운드 스레드에서 시뮬레이션 루프 시작
70
  simulation_thread = threading.Thread(target=simulation_loop, daemon=True)
71
  simulation_thread.start()
72
+
73
+ def process_interaction_and_witness(npc1, npc2):
74
+ """두 NPC의 상호작용과 이를 목격하는 제3자를 처리합니다."""
75
+ global npc_manager, event_log
76
+
77
+ # 1. 두 NPC 간의 상호작용 (기존 로직)
78
+ # ... (예: npc1이 npc2에게 말을 거는 로직) ...
79
+ # dialogue = npc1.generate_dialogue(f"{npc2.name}에게 인사를 건다.", "오후", target_npc=npc2)
80
+ # interaction_content = f"{npc1.name} -> {npc2.name}: {dialogue}"
81
+ # interaction_emotion = npc1.emotion.get_dominant_emotion()
82
+
83
+ # --- [핵심 로직 시작] ---
84
+
85
+ # 2. 목격자 선정 (두 NPC를 제외한 나머지 중 랜덤 선택)
86
+ potential_witnesses = [npc for npc in npc_manager.all() if npc not in [npc1, npc2]]
87
+ if not potential_witnesses:
88
+ return
89
+
90
+ witness = random.choice(potential_witnesses)
91
+
92
+ # 3. 목격한 이벤트에 대한 '소문' 내용 생성
93
+ # (LLM을 사용해 더 자연스러운 소문을 생성할 수도 있습니다)
94
+ gossip_content = f"'{npc1.name}'와(과) '{npc2.name}'이(가) 서로 이야기하는 것을 봤다."
95
+ # 만약 상호작용에 강한 감정이 있었다면 소문에 포함
96
+ # if interaction_emotion in ["anger", "sadness", "joy"]:
97
+ # gossip_content += f" 분위기가 매우 {interaction_emotion}해 보였다."
98
+
99
+ # 4. 목격자가 '소문'을 기억하도록 함
100
+ # 중요도: 직접 겪은 일보다 낮게 설정
101
+ witness.remember(
102
+ content=gossip_content,
103
+ importance=4,
104
+ emotion="curiosity", # 소문을 들었을 때의 감정
105
+ memory_type="Gossip" # 이것이 소문임을 명시
106
+ )
107
+ add_log(f"[목격] {witness.name}이(가) {npc1.name}와(과) {npc2.name}의 상호작용을 목격했습니다.")