127 lines
3.7 KiB
JavaScript
127 lines
3.7 KiB
JavaScript
import { Instance } from 'cooljs'
|
|
import { blockAction, blockPainter } from './block'
|
|
import {
|
|
checkMoveDown,
|
|
getMoveDownValue,
|
|
drawYellowString,
|
|
getAngleBase
|
|
} from './utils'
|
|
import { addFlight } from './flight'
|
|
import * as constant from './constant'
|
|
|
|
export const endAnimate = (engine) => {
|
|
const gameStartNow = engine.getVariable(constant.gameStartNow)
|
|
if (!gameStartNow) return
|
|
const successCount = engine.getVariable(constant.successCount, 0)
|
|
const failedCount = engine.getVariable(constant.failedCount)
|
|
const gameScore = engine.getVariable(constant.gameScore, 0)
|
|
const threeFiguresOffset = Number(successCount) > 99 ? engine.width * 0.1 : 0
|
|
|
|
drawYellowString(engine, {
|
|
string: 'floor',
|
|
size: engine.width * 0.06,
|
|
x: (engine.width * 0.24) + threeFiguresOffset,
|
|
y: engine.width * 0.12,
|
|
textAlign: 'left',
|
|
fontName: 'Arial',
|
|
fontWeight: 'bold'
|
|
})
|
|
drawYellowString(engine, {
|
|
string: successCount,
|
|
size: engine.width * 0.17,
|
|
x: (engine.width * 0.22) + threeFiguresOffset,
|
|
y: engine.width * 0.2,
|
|
textAlign: 'right'
|
|
})
|
|
const score = engine.getImg('score')
|
|
const scoreWidth = score.width
|
|
const scoreHeight = score.height
|
|
const zoomedWidth = engine.width * 0.35
|
|
const zoomedHeight = (scoreHeight * zoomedWidth) / scoreWidth
|
|
engine.ctx.drawImage(
|
|
score,
|
|
engine.width * 0.61,
|
|
engine.width * 0.038,
|
|
zoomedWidth,
|
|
zoomedHeight
|
|
)
|
|
drawYellowString(engine, {
|
|
string: gameScore,
|
|
size: engine.width * 0.06,
|
|
x: engine.width * 0.9,
|
|
y: engine.width * 0.11,
|
|
textAlign: 'right'
|
|
})
|
|
const { ctx } = engine
|
|
const heart = engine.getImg('heart')
|
|
const heartWidth = heart.width
|
|
const heartHeight = heart.height
|
|
const zoomedHeartWidth = engine.width * 0.08
|
|
const zoomedHeartHeight = (heartHeight * zoomedHeartWidth) / heartWidth
|
|
for (let i = 1; i <= 3; i += 1) {
|
|
ctx.save()
|
|
if (i <= failedCount) {
|
|
ctx.globalAlpha = 0.2
|
|
}
|
|
ctx.drawImage(
|
|
heart,
|
|
(engine.width * 0.66) + ((i - 1) * zoomedHeartWidth),
|
|
engine.width * 0.16,
|
|
zoomedHeartWidth,
|
|
zoomedHeartHeight
|
|
)
|
|
ctx.restore()
|
|
}
|
|
}
|
|
|
|
export const startAnimate = (engine) => {
|
|
const gameStartNow = engine.getVariable(constant.gameStartNow)
|
|
if (!gameStartNow) return
|
|
const lastBlock = engine.getInstance(`block_${engine.getVariable(constant.blockCount)}`)
|
|
if (!lastBlock || [constant.land, constant.out].indexOf(lastBlock.status) > -1) {
|
|
if (checkMoveDown(engine) && getMoveDownValue(engine)) return
|
|
if (engine.checkTimeMovement(constant.hookUpMovement)) return
|
|
const angleBase = getAngleBase(engine)
|
|
const initialAngle = (Math.PI
|
|
* engine.utils.random(angleBase, angleBase + 5)
|
|
* engine.utils.randomPositiveNegative()
|
|
) / 180
|
|
engine.setVariable(constant.blockCount, engine.getVariable(constant.blockCount) + 1)
|
|
engine.setVariable(constant.initialAngle, initialAngle)
|
|
engine.setTimeMovement(constant.hookDownMovement, 500)
|
|
const block = new Instance({
|
|
name: `block_${engine.getVariable(constant.blockCount)}`,
|
|
action: blockAction,
|
|
painter: blockPainter
|
|
})
|
|
engine.addInstance(block)
|
|
}
|
|
const successCount = Number(engine.getVariable(constant.successCount, 0))
|
|
switch (successCount) {
|
|
case 2:
|
|
addFlight(engine, 1, 'leftToRight')
|
|
break
|
|
case 6:
|
|
addFlight(engine, 2, 'rightToLeft')
|
|
break
|
|
case 8:
|
|
addFlight(engine, 3, 'leftToRight')
|
|
break
|
|
case 14:
|
|
addFlight(engine, 4, 'bottomToTop')
|
|
break
|
|
case 18:
|
|
addFlight(engine, 5, 'bottomToTop')
|
|
break
|
|
case 22:
|
|
addFlight(engine, 6, 'bottomToTop')
|
|
break
|
|
case 25:
|
|
addFlight(engine, 7, 'rightTopToLeft')
|
|
break
|
|
default:
|
|
break
|
|
}
|
|
}
|
|
|