Make morale clickable
This commit is contained in:
parent
aa00eaace1
commit
b8225f1bf8
@ -17,7 +17,7 @@ document.addEventListener("DOMContentLoaded", () => {
|
|||||||
resourcesArea.appendChild(r.htmlElement())
|
resourcesArea.appendChild(r.htmlElement())
|
||||||
|
|
||||||
const moraleArea = document.querySelector("#moraleArea")
|
const moraleArea = document.querySelector("#moraleArea")
|
||||||
const m = new Morale("oh no", "red", 600)
|
const m = new Morale("oh no", "red", "pink", 600)
|
||||||
moraleArea.appendChild(m.htmlElement())
|
moraleArea.appendChild(m.htmlElement())
|
||||||
function draw(_ts) {
|
function draw(_ts) {
|
||||||
clocks.forEach(clock => clock.draw.call(clock))
|
clocks.forEach(clock => clock.draw.call(clock))
|
||||||
|
|||||||
@ -1,7 +1,8 @@
|
|||||||
class Morale {
|
class Morale {
|
||||||
constructor(name, color, width) {
|
constructor(name, color, hoverColor, width) {
|
||||||
this.name = name
|
this.name = name
|
||||||
this.color = color
|
this.color = color
|
||||||
|
this.hoverColor = hoverColor
|
||||||
this.value = 0.3
|
this.value = 0.3
|
||||||
this.width = width
|
this.width = width
|
||||||
this.height = 40
|
this.height = 40
|
||||||
@ -11,7 +12,22 @@ class Morale {
|
|||||||
this.canvas.width = this.width + this.margin
|
this.canvas.width = this.width + this.margin
|
||||||
this.canvas.height = this.height
|
this.canvas.height = this.height
|
||||||
this.ctx = this.canvas.getContext("2d")
|
this.ctx = this.canvas.getContext("2d")
|
||||||
if (this.width == 0) throw "asdf"
|
|
||||||
|
this.canvas.addEventListener("mouseenter", event => {
|
||||||
|
this.mouseValue = event.offsetX / this.canvas.width
|
||||||
|
})
|
||||||
|
|
||||||
|
this.canvas.addEventListener("mousemove", event => {
|
||||||
|
this.mouseValue = event.offsetX / this.canvas.width
|
||||||
|
})
|
||||||
|
|
||||||
|
this.canvas.addEventListener("mouseup", event => {
|
||||||
|
this.value = event.offsetX / this.canvas.width
|
||||||
|
})
|
||||||
|
|
||||||
|
this.canvas.addEventListener("mouseleave", event => {
|
||||||
|
this.mouseValue = null
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
htmlElement() {
|
htmlElement() {
|
||||||
@ -30,13 +46,42 @@ class Morale {
|
|||||||
ctx.fillRect(0, 0, this.canvas.width, this.canvas.height)
|
ctx.fillRect(0, 0, this.canvas.width, this.canvas.height)
|
||||||
ctx.lineWidth = 5
|
ctx.lineWidth = 5
|
||||||
ctx.strokeStyle = "black"
|
ctx.strokeStyle = "black"
|
||||||
ctx.fillStyle = this.color
|
|
||||||
|
|
||||||
|
if (this.mouseValue == null) {
|
||||||
|
ctx.fillStyle = this.color
|
||||||
ctx.beginPath()
|
ctx.beginPath()
|
||||||
const width = this.width * this.value
|
const width = this.width * this.value
|
||||||
ctx.roundRect(0, 0, width, this.height, 10)
|
ctx.roundRect(0, 0, width, this.height, 10)
|
||||||
ctx.fill()
|
ctx.fill()
|
||||||
|
} else {
|
||||||
|
if (this.value > this.mouseValue) {
|
||||||
|
ctx.fillStyle = this.hoverColor
|
||||||
|
ctx.beginPath()
|
||||||
|
let width = this.width * this.value
|
||||||
|
ctx.roundRect(0, 0, width, this.height, 10)
|
||||||
|
ctx.fill()
|
||||||
|
|
||||||
|
ctx.fillStyle = this.color
|
||||||
|
ctx.beginPath()
|
||||||
|
width = this.width * this.mouseValue
|
||||||
|
ctx.roundRect(0, 0, width, this.height, 10)
|
||||||
|
ctx.fill()
|
||||||
|
} else {
|
||||||
|
ctx.fillStyle = this.hoverColor
|
||||||
|
ctx.beginPath()
|
||||||
|
let width = this.width * this.mouseValue
|
||||||
|
ctx.roundRect(0, 0, width, this.height, 10)
|
||||||
|
ctx.fill()
|
||||||
|
|
||||||
|
ctx.fillStyle = this.color
|
||||||
|
ctx.beginPath()
|
||||||
|
width = this.width * this.value
|
||||||
|
ctx.roundRect(0, 0, width, this.height, 10)
|
||||||
|
ctx.fill()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// border
|
||||||
ctx.beginPath()
|
ctx.beginPath()
|
||||||
ctx.roundRect(0, 0, this.width, this.height, 10)
|
ctx.roundRect(0, 0, this.width, this.height, 10)
|
||||||
ctx.stroke()
|
ctx.stroke()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user