diff --git a/birb.js b/birb.js
index b09c98d..0e35ebd 100644
--- a/birb.js
+++ b/birb.js
@@ -48,6 +48,115 @@ const styles = `
z-index: 999999999;
cursor: pointer;
}
+
+ .birb-window {
+ font-family: "Monocraft";
+ z-index: 1000;
+ position: fixed;
+ background-color: #ffecda;
+ box-shadow:
+ var(--border-size) 0 var(--border-color),
+ var(--neg-border-size) 0 var(--border-color),
+ 0 var(--neg-border-size) var(--border-color),
+ 0 var(--border-size) var(--border-color),
+ var(--double-border-size) 0 var(--border-color),
+ var(--neg-double-border-size) 0 var(--border-color),
+ 0 var(--neg-double-border-size) var(--border-color),
+ 0 var(--double-border-size) var(--border-color),
+ 0 0 0 var(--border-size) var(--border-color),
+ 0 0 0 var(--double-border-size) white,
+ var(--double-border-size) 0 0 var(--border-size) white,
+ var(--neg-double-border-size) 0 0 var(--border-size) white,
+ 0 var(--neg-double-border-size) 0 var(--border-size) white,
+ 0 var(--double-border-size) 0 var(--border-size) white;
+ box-sizing: border-box;
+ display: flex;
+ flex-direction: column;
+ }
+
+ .birb-window-header {
+ box-sizing: border-box;
+ width: 100%;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 7px;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ padding-left: 10px;
+ padding-right: 10px;
+ background-color: #ffa3cb;
+ box-shadow:
+ var(--border-size) 0 #ffa3cb,
+ var(--neg-border-size) 0 #ffa3cb,
+ 0 var(--neg-border-size) #ffa3cb,
+ var(--neg-border-size) var(--border-size) var(--border-color),
+ var(--border-size) var(--border-size) var(--border-color);
+ color: var(--border-color);
+ font-size: 16px;
+ }
+
+ .birb-window-title {
+ text-align: center;
+ flex-grow: 1;
+ user-select: none;
+ color: #ffecda;
+ }
+
+ .birb-window-close {
+ position: absolute;
+ top: 2px;
+ right: 5px;
+ opacity: 0.35;
+ user-select: none;
+ cursor: pointer;
+ }
+
+ .birb-window-close:hover {
+ opacity: 1;
+ }
+
+ .birb-window-content {
+ box-sizing: border-box;
+ background-color: #ffecda;
+ margin-top: var(--border-size);
+ width: 100%;
+ flex-grow: 1;
+ box-shadow:
+ var(--border-size) 0 #ffecda,
+ var(--neg-border-size) 0 #ffecda,
+ 0 var(--border-size) #ffecda,
+ 0 var(--neg-border-size) var(--border-color),
+ 0 var(--border-size) var(--border-color);
+ display: flex;
+ flex-direction: column;
+ padding-left: 15px;
+ padding-right: 15px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+ }
+
+ .birb-window-list-item {
+ font-size: 14px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ opacity: 0.6;
+ user-select: none;
+ }
+
+ .birb-window-list-item:hover {
+ opacity: 1;
+ cursor: pointer;
+ }
+
+ .birb-window-separator {
+ width: 100%;
+ height: 1px;
+ background-color: #000000;
+ box-sizing: border-box;
+ margin-top: 6px;
+ margin-bottom: 6px;
+ }
`;
class Layer {
@@ -461,15 +570,63 @@ if (window === window.top) {
canvas.width = sharedFrames.base.pixels[0].length * CANVAS_PIXEL_SIZE;
canvas.height = MAX_HEIGHT * CANVAS_PIXEL_SIZE;
document.body.appendChild(canvas);
+}
- // Make window elements draggable
- // Get every .window-header element
- // Get its parent element
- const windowHeaders = document.querySelectorAll(".window-header");
- // Make each window draggable
- windowHeaders.forEach((window) => {
- makeDraggable(window);
- });
+function insertStartMenu() {
+ if (document.querySelector(".birb-window")) {
+ return;
+ }
+ let html = `
+
+
+
+
Pet Birb
+
Field Guide
+
Decorations
+
Programs
+
+
Settings
+
+
+ `;
+ // Insert the start menu into the body
+ document.body.insertAdjacentHTML("beforeend", html);
+ // Make the start menu draggable
+ makeDraggable(document.querySelector(".birb-window-header"));
+
+ // Position the start menu
+ const startMenu = document.querySelector(".birb-window");
+ if (!(startMenu instanceof HTMLElement)) {
+ return;
+ }
+ let x = birdX;
+ let y = window.innerHeight - birdY;
+ const offset = 30;
+ if (x < window.innerWidth / 2) {
+ // Left side
+ x += offset;
+ } else {
+ // Right side
+ x -= startMenu.offsetWidth + offset;
+ }
+ if (y > window.innerHeight / 2) {
+ // Top side
+ y -= startMenu.offsetHeight + offset;
+ } else {
+ // Bottom side
+ y += offset;
+ }
+ startMenu.style.left = `${x}px`;
+ startMenu.style.top = `${y}px`;
+}
+
+function removeStartMenu() {
+ const startMenu = document.querySelector(".birb-window");
+ if (startMenu) {
+ startMenu.remove();
+ }
}
function makeDraggable(windowHeader) {
@@ -559,6 +716,9 @@ window.addEventListener("scroll", () => {
document.addEventListener("click", (e) => {
timeOfLastAction = Date.now();
+ if (e.target instanceof Node && !canvas.contains(e.target) && !document.querySelector(".birb-window")?.contains(e.target)) {
+ removeStartMenu();
+ }
// const x = e.clientX;
// const y = window.innerHeight - e.clientY;
// flyTo(x, y);
@@ -566,10 +726,11 @@ document.addEventListener("click", (e) => {
});
canvas.addEventListener("click", () => {
- focusOnElement();
- if (focusedElement === null && currentState === States.IDLE) {
- setAnimation(Animations.HEART)
- }
+ insertStartMenu();
+ // focusOnElement();
+ // if (focusedElement === null && currentState === States.IDLE) {
+ // setAnimation(Animations.HEART)
+ // }
});
canvas.addEventListener("mouseover", () => {
@@ -808,7 +969,7 @@ function roundToPixel(value) {
* @param {number} x
*/
function setX(x) {
- x = x - getCanvasWidth() - WINDOW_PIXEL_SIZE / 2;
+ x = x - getCanvasWidth() / 2 - WINDOW_PIXEL_SIZE / 2;
canvas.style.left = `${x}px`;
}
diff --git a/index.html b/index.html
index cff2e2e..087096a 100644
--- a/index.html
+++ b/index.html
@@ -22,124 +22,6 @@
--neg-double-border-size: calc(var(--neg-border-size) * 2);
--border-color: #000000;
}
-
- .window {
- font-family: "Monocraft";
- z-index: 1000;
- position: fixed;
- top: 50%;
- left: 50%;
- transform: translate(-50%, -50%);
- /* transform: scale(0.8); */
- /* width: 200px; */
- /* height: 200px; */
- background-color: #ffecda;
- box-shadow:
- var(--border-size) 0 var(--border-color),
- var(--neg-border-size) 0 var(--border-color),
- 0 var(--neg-border-size) var(--border-color),
- 0 var(--border-size) var(--border-color),
- var(--double-border-size) 0 var(--border-color),
- var(--neg-double-border-size) 0 var(--border-color),
- 0 var(--neg-double-border-size) var(--border-color),
- 0 var(--double-border-size) var(--border-color),
- 0 0 0 var(--border-size) var(--border-color),
- 0 0 0 var(--double-border-size) white,
- var(--double-border-size) 0 0 var(--border-size) white,
- var(--neg-double-border-size) 0 0 var(--border-size) white,
- 0 var(--neg-double-border-size) 0 var(--border-size) white,
- 0 var(--double-border-size) 0 var(--border-size) white;
- box-sizing: border-box;
- display: flex;
- flex-direction: column;
- }
-
- .window-header {
- box-sizing: border-box;
- width: 100%;
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 7px;
- padding-top: 4px;
- padding-bottom: 4px;
- padding-left: 10px;
- padding-right: 10px;
- background-color: #ffa3cb;
- box-shadow:
- var(--border-size) 0 #ffa3cb,
- var(--neg-border-size) 0 #ffa3cb,
- 0 var(--neg-border-size) #ffa3cb,
- var(--neg-border-size) var(--border-size) var(--border-color),
- var(--border-size) var(--border-size) var(--border-color);
- color: var(--border-color);
- }
-
- .window-title {
- text-align: center;
- flex-grow: 1;
- user-select: none;
- color: #ffecda;
- font-size: 16px;
- }
-
- .window-close {
- position: absolute;
- top: 0;
- right: var(--double-border-size);
- opacity: 0.35;
- user-select: none;
- }
-
- .window-close:hover {
- opacity: 1;
- }
-
- .window-content {
- box-sizing: border-box;
- background-color: #ffecda;
- margin-top: var(--border-size);
- width: 100%;
- flex-grow: 1;
- box-shadow:
- var(--border-size) 0 #ffecda,
- var(--neg-border-size) 0 #ffecda,
- 0 var(--border-size) #ffecda,
- 0 var(--neg-border-size) var(--border-color),
- 0 var(--border-size) var(--border-color);
- display: flex;
- flex-direction: column;
- padding-left: 15px;
- padding-right: 15px;
- padding-top: 8px;
- padding-bottom: 8px;
- }
-
- .window-close {
- cursor: pointer;
- padding: none;
- }
-
- .window-list-item {
- font-size: 14px;
- padding-top: 5px;
- padding-bottom: 5px;
- opacity: 0.6;
- }
-
- .window-list-item:hover {
- opacity: 1;
- cursor: pointer;
- }
-
- .window-separator {
- width: 100%;
- height: 1px;
- background-color: #000000;
- box-sizing: border-box;
- margin-top: 6px;
- margin-bottom: 6px;
- }
@@ -150,28 +32,6 @@
-
-
-
-
-
Field Guide
-
Decorations
-
Programs
-
-
-
Settings
-
-