add tower builing game
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
import { Instance } from 'cooljs'
|
||||
import * as constant from './constant'
|
||||
|
||||
const getActionConfig = (engine, type) => {
|
||||
const {
|
||||
width, height, utils
|
||||
} = engine
|
||||
const { random } = utils
|
||||
const size = engine.getVariable(constant.cloudSize)
|
||||
const actionTypes = {
|
||||
bottomToTop: {
|
||||
x: width * random(0.3, 0.7),
|
||||
y: height,
|
||||
vx: 0,
|
||||
vy: engine.pixelsPerFrame(height) * 0.7 * -1
|
||||
},
|
||||
leftToRight: {
|
||||
x: size * -1,
|
||||
y: height * random(0.3, 0.6),
|
||||
vx: engine.pixelsPerFrame(width) * 0.4,
|
||||
vy: engine.pixelsPerFrame(height) * 0.1 * -1
|
||||
},
|
||||
rightToLeft: {
|
||||
x: width,
|
||||
y: height * random(0.2, 0.5),
|
||||
vx: engine.pixelsPerFrame(width) * 0.4 * -1,
|
||||
vy: engine.pixelsPerFrame(height) * 0.1
|
||||
},
|
||||
rightTopToLeft: {
|
||||
x: width,
|
||||
y: 0,
|
||||
vx: engine.pixelsPerFrame(width) * 0.6 * -1,
|
||||
vy: engine.pixelsPerFrame(height) * 0.5
|
||||
}
|
||||
}
|
||||
return actionTypes[type]
|
||||
}
|
||||
|
||||
|
||||
export const flightAction = (instance, engine) => {
|
||||
const { visible, ready, type } = instance
|
||||
if (!visible) return
|
||||
const size = engine.getVariable(constant.cloudSize)
|
||||
if (!ready) {
|
||||
const action = getActionConfig(engine, type)
|
||||
instance.ready = true
|
||||
instance.width = size
|
||||
instance.height = size
|
||||
instance.x = action.x
|
||||
instance.y = action.y
|
||||
instance.vx = action.vx
|
||||
instance.vy = action.vy
|
||||
}
|
||||
instance.x += instance.vx
|
||||
instance.y += instance.vy
|
||||
if (instance.y + size < 0
|
||||
|| instance.y > engine.height
|
||||
|| instance.x + size < 0
|
||||
|| instance.x > engine.width) {
|
||||
instance.visible = false
|
||||
}
|
||||
}
|
||||
|
||||
export const flightPainter = (instance, engine) => {
|
||||
const { ctx } = engine
|
||||
const flight = engine.getImg(instance.imgName)
|
||||
ctx.drawImage(flight, instance.x, instance.y, instance.width, instance.height)
|
||||
}
|
||||
|
||||
export const addFlight = (engine, number, type) => {
|
||||
const flightCount = engine.getVariable(constant.flightCount)
|
||||
if (flightCount === number) return
|
||||
const flight = new Instance({
|
||||
name: `flight_${number}`,
|
||||
action: flightAction,
|
||||
painter: flightPainter
|
||||
})
|
||||
flight.imgName = `f${number}`
|
||||
flight.type = type
|
||||
engine.addInstance(flight, constant.flightLayer)
|
||||
engine.setVariable(constant.flightCount, number)
|
||||
}
|
||||
Reference in New Issue
Block a user