Skip to content

Commit deaef6a

Browse files
committed
fix simulation button
1 parent 1e58a12 commit deaef6a

2 files changed

Lines changed: 107 additions & 65 deletions

File tree

script.js

Lines changed: 48 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
let participants = [];
12
import { events } from './events.js';
23
console.log("Checking if .master elements exist...");
34
console.log(document.querySelectorAll(".master"));
@@ -30,13 +31,13 @@ console.log(document.querySelectorAll(".master-img"));
3031
});
3132
});
3233
}); //this was the code for updating the master pictures
33-
window.onload = function() {
34-
console.log("Page fully loaded! Fetching Servant data...");
35-
fetchServantData();
36-
37-
console.log("Starting Day 1 events...");
38-
runDayEvents();
39-
};
34+
document.addEventListener("DOMContentLoaded", () => {
35+
if (typeof runDayEvents === "function") {
36+
runDayEvents();
37+
} else {
38+
console.error("runDayEvents() is not defined yet.");
39+
}
40+
});
4041
// now the code for the servant data:
4142
async function fetchServantData() {
4243
const url = 'https://api.atlasacademy.io/export/NA/basic_servant.json';
@@ -78,11 +79,9 @@ function populateServantDropdown(servantDataArray) {
7879
// Add each Servant to the dropdown
7980
servantDataArray.forEach(servant => {
8081
const option = document.createElement("option");
81-
// Extract a shortname; if you have a better key, replace servant.name here
82-
//const shortName = servant.name.split(" ")[0]; // crude fallback: take first word like "Artoria"
83-
//option.value = shortName; // store shortname for simulator matching
84-
option.textContent = servant.name; // full display name for user
85-
option.dataset.id = servant.id; // store numeric ID if needed later
82+
option.textContent = servant.name; // full display name for user
83+
option.dataset.id = servant.id; // store numeric ID if needed later
84+
option.dataset.image = servant.image; // get the servantimage
8685
dropdown.appendChild(option); // <-- fix here
8786
});
8887
});
@@ -106,7 +105,7 @@ document.addEventListener("DOMContentLoaded", function () {
106105
servantList = servants.map(servant => ({
107106
id: servant.id,
108107
name: servant.name,
109-
image: servant.face
108+
image: servant.image
110109
}));
111110
} catch (error) {
112111
console.error("Failed to fetch Servants:", error);
@@ -141,10 +140,7 @@ function randomizeServant(index) {
141140
}
142141
}
143142

144-
const servantImage = document.querySelectorAll(".servant-img")[index];
145-
if (servantImage) {
146-
servantImage.src = randomServant.image; // Update the image source
147-
}
143+
148144
}
149145

150146

@@ -161,7 +157,7 @@ function randomizeServant(index) {
161157
//simulation button function:
162158
function saveParticipantsAndStartSimulation() {
163159
let teamContainers = document.querySelectorAll(".form-container");
164-
let participants = [];
160+
participants = [];
165161

166162
teamContainers.forEach((teamContainer, index) => {
167163
let masterContainer = teamContainer.querySelector(".master");
@@ -174,12 +170,14 @@ function saveParticipantsAndStartSimulation() {
174170
let name = nameInput ? nameInput.value.trim() || `Master ${index + 1}` : `Master ${index + 1}`;
175171
let gender = genderSelect ? genderSelect.value : "nonbinary"; // fallback to nonbinary if missing
176172
let pronouns = getPronouns(gender);
173+
let servantHasIndependentAction = false; // default unless set elsewhere
177174
let pictureUrl = pictureEl ? pictureEl.src : "";
178175

179176
let servantDropdown = servantContainer ? servantContainer.querySelector(".servant-select") : null;
180177

181178
let servantId = "Unknown";
182179
let servantName = "Unknown";
180+
let servantImage;
183181

184182
if (servantDropdown) {
185183
const selectedIndex = servantDropdown.selectedIndex;
@@ -217,7 +215,7 @@ function saveParticipantsAndStartSimulation() {
217215
status: "alive",
218216
masterId: masterData.id,
219217
hasIndependentAction: servantHasIndependentAction,
220-
image: servantImage
218+
image: servantImage //don't gd touch this if servant images work
221219
};
222220

223221
participants.push(masterData);
@@ -250,4 +248,35 @@ document.addEventListener("DOMContentLoaded", function () {
250248
console.error("Start Simulation button not found!");
251249
}
252250
});
251+
// ----------------------------
252+
// Run Daily Events
253+
// ----------------------------
254+
function runDayEvents() {
255+
console.log("===== DAY 1 =====");
256+
if (!participants || participants.length === 0) {
257+
participants = JSON.parse(localStorage.getItem("participants")) || [];
258+
}
259+
260+
const aliveMasters = participants.filter(p => p.type === "master" && p.status === "alive");
261+
262+
if (aliveMasters.length === 0) {
263+
console.log("No masters remain alive. Simulation ends.");
264+
return;
265+
}
266+
267+
// Example Day 1 event
268+
const randomEvent = events[Math.floor(Math.random() * events.length)];
269+
const targetMaster = aliveMasters[Math.floor(Math.random() * aliveMasters.length)];
270+
271+
if (randomEvent && targetMaster) {
272+
const description = randomEvent.description.replace("{master}", targetMaster.name);
273+
274+
console.log(description);
275+
276+
// Apply event effect if defined
277+
if (typeof randomEvent.effects === "function") {
278+
randomEvent.effects(participants, targetMaster);
279+
}
280+
}
281+
}
253282

simulation.html

Lines changed: 59 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ <h2 id="day-counter">Day 1</h2>
1919
<!-- Events will be inserted here by JavaScript -->
2020
</div>
2121

22-
<button class="button" id="next-day">Proceed to Next Day</button>
22+
<button class="button" id="next-day">Proceed</button>
2323
</main>
2424
<script type="module" src="events.js"></script>
2525
<!-- The script to collect participants follows -->
@@ -56,11 +56,26 @@ <h2 id="day-counter">Day 1</h2>
5656
const masters = participants.filter(p => p.type === "master");
5757

5858
masters.forEach(master => {
59-
if (master.servantName && master.servantName !== "Unknown") {
60-
events += `<p><img src="${master.picture}" width="50"> <strong>${master.name}</strong> summons <strong>${master.servantName}</strong>.</p>`;
61-
} else {
62-
events += `<p><img src="${master.picture}" width="50"> <strong>${master.name}</strong> summons an unknown servant.</p>`;
63-
}
59+
const servant = participants.find(
60+
p => p.type === "servant" && p.masterId === master.id
61+
);
62+
63+
if (servant && servant.name !== "Unknown") {
64+
events += `
65+
<p>
66+
<img src="${master.picture}" width="50">
67+
<strong>${master.name}</strong> summons
68+
<img src="${servant.image}" width="50">
69+
<strong>${servant.name}</strong>.
70+
</p>`;
71+
} else {
72+
events += `
73+
<p>
74+
<img src="${master.picture}" width="50">
75+
<strong>${master.name}</strong> summons an unknown servant.
76+
</p>`;
77+
}
78+
6479
});
6580

6681
eventLog.innerHTML = events;
@@ -126,65 +141,63 @@ <h2 id="day-counter">Day 1</h2>
126141
let pastEvents = []; // store event IDs
127142
let participants = JSON.parse(localStorage.getItem("participants")) || [];
128143

129-
function appendEventLog(message) {
144+
function displayDayEvents(dayNumber, events) {
130145
const logDiv = document.getElementById("event-log");
131-
if (logDiv) {
132-
logDiv.innerHTML += `<p>${message}</p>`;
133-
} else {
134-
console.error("Event log div not found.");
135-
}
136-
}
146+
const title = document.getElementById("day-title");
147+
148+
// Clear previous events
149+
logDiv.innerHTML = "";
150+
151+
// Update title
152+
title.textContent = `Day ${dayNumber}`;
137153

154+
// Add each event as a paragraph
155+
events.forEach(text => {
156+
const p = document.createElement("p");
157+
p.textContent = text;
158+
logDiv.appendChild(p);
159+
});
160+
}
138161

139162
function runDayEvents() {
163+
const participants = JSON.parse(localStorage.getItem("participants")) || [];
164+
const aliveMasters = participants.filter(p => p.type === "master" && p.status === "alive");
165+
const aliveServants = participants.filter(p => p.type === "servant" && p.status === "alive");
166+
140167
console.log(`===== DAY ${currentDay} =====`);
168+
const dayEvents = [];
141169

142-
// Loop over each event
143-
events.forEach(event => {
144-
const validPools = event.valid(participants);
170+
aliveMasters.forEach(master => {
171+
const servant = aliveServants.find(s => s.id === master.servantId);
145172

146-
if (validPools.length === 0) {
147-
console.log(`No valid targets for event ${event.id}`);
173+
const validEvents = events.filter(event => {
174+
const validPool = event.valid(participants);
175+
return validPool.includes(master);
176+
});
177+
178+
if (validEvents.length === 0) {
179+
console.log(`No valid events for ${master.name}`);
148180
return;
149181
}
150182

151-
// Pick one random target or pair
152-
const chosen = validPools[Math.floor(Math.random() * validPools.length)];
153-
154-
if (Array.isArray(chosen)) {
155-
// Multi-target event (like servant vs servant or servant-master betrayal)
156-
event.effects(...chosen, participants);
183+
const selectedEvent = validEvents[Math.floor(Math.random() * validEvents.length)];
157184

158-
// Generate event text using provided names
159-
const eventText = processEventTemplate(event.description, {
160-
servant1: chosen[0],
161-
servant2: chosen[1],
162-
master: chosen[1], // if second is master, works for betrayal template
163-
});
185+
selectedEvent.effects(participants, master, servant);
164186

165-
console.log(eventText);
166-
appendEventLog(`Day ${currentDay}: ${eventText}`);
167-
} else {
168-
// Single-target event (just a master)
169-
const master = chosen;
170-
const servant = participants.find(p => p.type === "servant" && p.masterId === master.id);
187+
const eventText = processEventTemplate(selectedEvent.description, {
188+
master,
189+
servant
190+
});
171191

172-
event.effects(master, servant, participants);
173-
174-
const eventText = processEventTemplate(event.description, {
175-
master,
176-
servant,
177-
});
178-
179-
console.log(eventText);
180-
appendEventLog(`Day ${currentDay}: ${eventText}`);
181-
}
192+
dayEvents.push(`Day ${currentDay}: ${eventText}`);
182193
});
183194

195+
displayDayEvents(currentDay, dayEvents);
184196
currentDay++;
185197
}
186198

187199

200+
188201
// Button for next days
189202
document.getElementById("next-day").addEventListener("click", () => {
190203
runDayEvents(); // runs once for each alive master

0 commit comments

Comments
 (0)