From 56066425a0f3063e68ac29b9a39aff175d3be4db Mon Sep 17 00:00:00 2001
From: Hannes Reichle <reichleh@hu-berlin.de>
Date: Fri, 19 Mar 2021 16:58:38 +0100
Subject: [PATCH] added Avatarclass changed avatar selector at start of game
 made play-buttons in same design as other game stuff

---
 client/SkribblAvatar.js | 85 +++++++++++++++++++++++++++++++++++++++++
 client/SkribblMenu.js   | 67 +++++++++++++++++++-------------
 2 files changed, 126 insertions(+), 26 deletions(-)
 create mode 100644 client/SkribblAvatar.js

diff --git a/client/SkribblAvatar.js b/client/SkribblAvatar.js
new file mode 100644
index 0000000..bfb898c
--- /dev/null
+++ b/client/SkribblAvatar.js
@@ -0,0 +1,85 @@
+import { SkribblCanvasOverlay } from "./SkribblCanvas.js";
+
+/**
+ * Custom element `<skribbl-avatar>` to remember how the player looks like and for configuration.
+ */
+ export default class SkribblAvatar extends HTMLElement {
+	constructor(){
+		super();
+		this.attachShadow({mode:"open"});
+        this.shadowRoot.innerHTML = `
+			<style>
+				:host {
+					display: block;
+					position: relative;
+					overflow: hidden;
+					background: #ffffff;
+					border-radius: 5px;
+				}
+				.container-character{
+					border: 2px solid #777;
+					border-radius: 10px;
+				}
+                .character-eyes{
+					height: 34px;
+					width: 34px;
+					background:url("/res/MouthsAndEyes.png");
+					background-position: 10px 0;
+				}
+				.character-mouth{
+					height: 34px;
+					width: 34x;
+					background:url("/res/MouthsAndEyes.png");
+					background-position: 0px -52px;
+				}
+			</style>
+
+			<div class="container-character">
+			<div id="eyes" class="character-eyes"  alt="CharacterLook"></div>
+			<div id="mouth" class="character-mouth"  alt="CharacterLook"></div>
+			</div>
+		`;
+		this.eyesDisplacement = 10;
+		this.mouthDisplacement = 0;
+	}
+
+	/** @param {boolean} toTheRight */
+	changeEye(toTheRight) {
+		let displacement = 80;
+
+		if (toTheRight){
+			this.eyesDisplacement += displacement;
+		}else{
+			this.eyesDisplacement -= displacement;
+		}
+		const eye = this.shadowRoot.getElementById("eyes");
+		eye.style.backgroundPositionX = this.eyesDisplacement+"px";
+	}
+
+	/** @param {boolean} toTheRight */
+	changeMouth(toTheRight) {
+		let displacement = 80;
+
+		if (toTheRight){
+			this.mouthDisplacement += displacement;
+		}else{
+			this.mouthDisplacement -= displacement;
+		}
+		const mouth = this.shadowRoot.getElementById("mouth");
+		mouth.style.backgroundPositionX = this.mouthDisplacement+"px";
+	}
+
+	/** @param {string} unique_title */
+	getStyleSheet(unique_title) {
+		for(var i=0; i<document.styleSheets.length; i++) {
+		  var sheet = document.styleSheets[i];
+		  if(sheet.title == unique_title) {
+			return sheet;
+		  }
+		}
+	  }
+
+}
+
+
+customElements.define("skribbl-avatar",SkribblAvatar);
diff --git a/client/SkribblMenu.js b/client/SkribblMenu.js
index 5a1bbd0..3dc1c39 100644
--- a/client/SkribblMenu.js
+++ b/client/SkribblMenu.js
@@ -1,3 +1,7 @@
+import SkribblAvatar from "./SkribblAvatar.js";
+import SkribblCanvas from "./SkribblCanvas.js";
+
+
 /**
  * Custom element `<skribbl-menu>` for the name selection menu that appears when first entering a game.
  */
@@ -56,20 +60,7 @@ export default class SkribblMenu extends HTMLElement {
 					font-size: 20px;
 				}
 
-				.character-eyes{
-					height: 34px;
-					width: 34px;
-					background:url("/res/MouthsAndEyes.png");
-					background-position: -70px 0;
-				}
-
-
-				.character-mouth{
-					height: 44px;
-					width: 44px;
-					background:url("/res/MouthsAndEyes.png");
-					background-position: -70px -52px;
-				}
+			
 
 				.container-left-arrows{
 					display:flex;
@@ -85,33 +76,30 @@ export default class SkribblMenu extends HTMLElement {
 					position: relative;
 				}
 
-				.container-character{
-					border: 2px solid #777;
-					border-radius: 10px;
-				}
+			
 
 			</style>
 			<div class="container-customize-avatar">
 
 			<div class="container" id="ColorButtons"> 
 			<div class="container-left-arrows">
-			<button class="arrow-button arrow-left"></button>
-			<button class="arrow-button arrow-left"></button>
+			<button  id="arrow-left-eyes" class="arrow-button arrow-left"></button>
+			<button  id="arrow-left-mouth" class="arrow-button arrow-left"></button>
 			</div>
 			</div>
 
-			<div class="container-character">
-			<div class="character-eyes"  alt="CharacterLook"></div>
-			<div class="character-mouth"  alt="CharacterLook"></div>
-			</div>
+			<div id="avatar-container"></div>
 
 			<div class="container" id="ColorButtons"> 
 			<div class="container-right-arrows">
-			<button class="arrow-button arrow-right"></button>
-			<button class="arrow-button arrow-right"></button>
+			<button id="arrow-right-eyes" class="arrow-button arrow-right"></button>
+			<button id="arrow-right-mouth" class="arrow-button arrow-right"></button>
 			</div>
 			</div>
 
+			
+
+
 			</div>
 			
 			<div class="middle-aligned">
@@ -119,7 +107,34 @@ export default class SkribblMenu extends HTMLElement {
 			<button id="play-button" class ="generic-button">Play</button>
 			</div>
 
+
 		`;
+		this._avatarContainer = this.shadowRoot.getElementById("avatar-container");
+		this._avatar = new SkribblAvatar();
+		this._avatarContainer.append(this._avatar);
+
+		this._selectEyesLeftButton = this.shadowRoot.querySelector("#arrow-left-eyes");
+		this._selectEyesLeftButton.addEventListener("click",e=>{
+			this._avatar.changeEye(false);
+
+		});
+
+		this._selectEyesRightButton = this.shadowRoot.querySelector("#arrow-right-eyes");
+		this._selectEyesRightButton.addEventListener("click",e=>{
+			this._avatar.changeEye(true);
+		});
+
+		this._selectMouthLeftButton = this.shadowRoot.querySelector("#arrow-left-mouth");
+		this._selectMouthLeftButton.addEventListener("click",e=>{
+			this._avatar.changeMouth(false);
+
+		});
+
+		this._selectMouthRightButton = this.shadowRoot.querySelector("#arrow-right-mouth");
+		this._selectMouthRightButton.addEventListener("click",e=>{
+			this._avatar.changeMouth(true);
+		});
+
 		this._nameInput = this.shadowRoot.querySelector("input");
 		this._playButton = this.shadowRoot.querySelector("#play-button");
 		/** @type {Promise<{name:string}>} */
-- 
GitLab