From 33eda1c94addce6ece1ae83cfdba800ff3ed1a98 Mon Sep 17 00:00:00 2001 From: Fen Dweller Date: Thu, 6 Feb 2020 17:01:11 -0500 Subject: [PATCH] Allow spawning of entities --- macrovision.js | 36 ++++++++++++++++++++++++++++++++++++ presets/characters.js | 8 ++++++++ 2 files changed, 44 insertions(+) diff --git a/macrovision.js b/macrovision.js index 7667699f..e6c8e14d 100644 --- a/macrovision.js +++ b/macrovision.js @@ -32,6 +32,10 @@ const config = { maxLineSize: 250 } +const availableEntities = { + +} + const entities = { } @@ -481,6 +485,8 @@ function testClick(event) { function removeEntity(element) { delete entities[element.dataset.key]; + const bottomName = document.querySelector("#bottom-name-" + element.dataset.key); + bottomName.parentElement.removeChild(bottomName); element.parentElement.removeChild(element); } function displayEntity(entity, view, x, y) { @@ -581,8 +587,38 @@ document.addEventListener("DOMContentLoaded", () => { }); clearViewList(); + + prepareEntities(); }); +function prepareEntities() { + availableEntities["buildings"] = makeBuildings(); + availableEntities["characters"] = makeCharacters(); + + const holder = document.querySelector("#menubar"); + Object.entries(availableEntities).forEach(([category, entityList]) => { + const select = document.createElement("select"); + select.id = "create-entity-" + category; + for (let i = 0; i < entityList.length; i++) { + const entity = entityList[i]; + const option = document.createElement("option"); + option.value = i; + option.innerText = entity.name; + select.appendChild(option); + }; + + const button = document.createElement("button"); + + button.innerText = "Create " + category; + button.addEventListener("click", e => { + displayEntity(entityList[select.value], entityList[select.value].defaultView, 0.5, 0.5); + }); + + holder.appendChild(select); + holder.appendChild(button); + }); +} + window.addEventListener("resize", () => { updateSizes(); }) diff --git a/presets/characters.js b/presets/characters.js index 7b157728..df2ac57a 100644 --- a/presets/characters.js +++ b/presets/characters.js @@ -56,6 +56,7 @@ function makeFen() { entity.views.body.height = math.unit(1, "km"); return entity; } + function makeMan() { const views = { body: { @@ -81,4 +82,11 @@ function makeMan() { }; return makeEntity("Man", "Fen", views); +} + +function makeCharacters() { + const results = []; + results.push(makeFen()); + results.push(makeMan()); + return results; } \ No newline at end of file