瀏覽代碼

Worked on actions.

tags/v0.1.0
Fen Dweller 6 年之前
父節點
當前提交
d5bd4b50aa
沒有發現已知的金鑰在資料庫的簽署中 GPG 金鑰 ID: E80B35A6F11C3656
共有 2 個檔案被更改,包括 113 行新增29 行删除
  1. +5
    -1
      satiate.js
  2. +108
    -28
      world.js

+ 5
- 1
satiate.js 查看文件

@@ -6,8 +6,11 @@ let state = {
player: {
items: {
keys: [
"Locked Room"
]
},
rooms: {

}
}
}
@@ -26,6 +29,7 @@ function print(lines) {
// setup the game

function init() {
initWorld(state);
initAudio();

moveToRoom("Home", state);


+ 108
- 28
world.js 查看文件

@@ -11,6 +11,17 @@ dirs = {
"descend": "Down"
}

function initWorld(state) {
initRoomState(state);
}

function initRoomState(state) {
state.player.rooms = {};
Object.entries(world).forEach(([key, val]) => {
state.player.rooms[key] = {};
});
}

function moveToRoom(dest, state) {
updateRoom(dest, state);
}
@@ -18,15 +29,19 @@ function moveToRoom(dest, state) {
function updateRoom(dest, state) {
const room = world[dest];

if (!state.player.rooms[dest.id]) {
state.player.rooms[dest.id] = {};
}

const areaName = document.querySelector("#area-name");
const areaDesc = document.querySelector("#area-desc");

areaName.textContent = room.name;
areaDesc.textContent = room.desc;

const holder = document.querySelector("#move-holder");
const moveHolder = document.querySelector("#move-holder");

holder.innerHTML = "";
moveHolder.innerHTML = "";

Object.entries(dirs).forEach(([dir, name]) => {
const button = document.createElement("button");
@@ -35,64 +50,129 @@ function updateRoom(dest, state) {
button.classList.add("disabled");
button.setAttribute("disabled", "true");
button.textContent = dirs[dir];
holder.appendChild(button);
moveHolder.appendChild(button);
});

Object.entries(room.exits).forEach(([dir, exit]) => {
const button = document.querySelector("#move-" + dir);
const dest = world[exit.target];
if (room.exits) {
Object.entries(room.exits).forEach(([dir, exit]) => {
const button = document.querySelector("#move-" + dir);
const dest = world[exit.target];

// don't even show an exit if this fails!
// don't even show an exit if this fails!

if (exit.show) {
if (!exit.show.every(cond => cond(state))) {
return;
if (exit.show) {
if (!exit.show.every(cond => cond(room, state))) {
return;
}
}
}

button.textContent = dest.name;
button.textContent = dest.name;

// if any condition fails, don't enable/add a listener
if (exit.conditions) {
if (!exit.conditions.every(cond => cond(state))) {
return;
// if any condition fails, don't enable/add a listener
if (exit.conditions) {
if (!exit.conditions.every(cond => cond(room,state))) {
return;
}
}
}

button.classList.remove("disabled");
button.removeAttribute("disabled");
button.classList.remove("disabled");
button.removeAttribute("disabled");

button.addEventListener("click", () => {
// todo: log
moveToRoom(exit.target, state);
})
});
}

const actionHolder = document.querySelector("#actions");
actionHolder.innerHTML = "";

if (room.actions) {
room.actions.forEach(action => {
const button = document.createElement("button");
button.classList.add("action-button");

if (action.show) {
if (!action.show.every(cond => cond(room, state))) {
return;
}
}

button.textContent = action.name;

actionHolder.appendChild(button);

if (action.conditions) {
if (!action.conditions.every(cond => cond(room, state))) {
button.classList.add("disabled");
button.setAttribute("disabled", "true");
return;
}
}

button.addEventListener("click", () => {
action.execute(room, state);
updateRoom(room.id, state);
});


});
}



button.addEventListener("click", () => {
// todo: log
moveToRoom(exit.target, state);
})
});
}

world = {
"Home": {
"id": "Home",
"name": "Home",
"desc": "Where the wifi autoconnects",
"actions": [
{
"name": "Squint",
"desc": "Squint in a very aggressive manner",
"execute": (self, state) => {
state.player.rooms[self.id].squinted = true;
print(["You stare at the wall and notice a secret door. But where is the key?"]);
}
},
{
"name": "Find Keys",
"desc": "Find your keys",
"execute": (self, state) => {
state.player.items.keys.push("Locked Room");
print(["You found your keys under the couch cushions"]);
},
"show": [
(self, state) => {
return state.player.rooms[self.id].squinted;
}
]
}
],
"exits": {
"up": {
"target": "Locked Room",
"desc": "It's locked!",
"move": "You enter the secret locked room",
"conditions": [
state => {
(self, state) => {
return state.player.items.keys.includes("Locked Room");
}
],

"show": [
state => {
return state.player.items.keys.includes("Locked Room");
(self, state) => {
console.log(self);
return state.player.rooms[self.id].squinted;
}
]
}
}
},
"Locked Room": {
"id": "Locked Room",
"name": "Locked Room",
"desc": "Super seecret",
"exits": {


Loading…
取消
儲存