Commit abd8ecb2 by Shawn Wang

Merge branch 'develop' of cd.i.strikingly.com:shawn.wang/crazyflirt into develop

parents 83945f29 66a90b69
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
{ {
type: 'game_ready', type: 'game_ready',
cid: 'abcdefg', cid: 'abcdefg',
room_id: 'asdfadfaf', room_id: 'default_room',
payload: { payload: {
nick_name: 'asdfasdfa', nick_name: 'asdfasdfa',
avatar_url: 'https://xxx.com', avatar_url: 'https://xxx.com',
...@@ -26,7 +26,16 @@ ...@@ -26,7 +26,16 @@
{ {
type: 'game_end', type: 'game_end',
room_id: 'asdfadfaf', room_id: 'default_room',
payload:{
}
}
{
type: 'item_refresh',
room_id: 'default_room',
payload:{ payload:{
x:1,
y:2
} }
} }
\ No newline at end of file
...@@ -21,8 +21,16 @@ module CrazyFlirt ...@@ -21,8 +21,16 @@ module CrazyFlirt
end end
class RandomPicker class RandomPicker
def self.item_generate
rd = Random.new
x = @rd.rand(0..@x_max)
y = @rd.rand(0..@y_max)
[x, y]
end
def initialize(clients) def initialize(clients)
@client = clients @client = clients
@x_max = 14 @x_max = 14
...@@ -45,12 +53,13 @@ module CrazyFlirt ...@@ -45,12 +53,13 @@ module CrazyFlirt
class Client class Client
attr_reader :key attr_reader :key
attr_accessor :role, :room attr_accessor :role, :room, :user_info
def initialize(ws) def initialize(ws)
@ws = ws @ws = ws
@key = generate_key @key = generate_key
@role = nil @role = nil
@room = nil
end end
def msg(msg) def msg(msg)
...@@ -111,11 +120,15 @@ module CrazyFlirt ...@@ -111,11 +120,15 @@ module CrazyFlirt
ws.on :message do |event| ws.on :message do |event|
message = JSON.parse(event.data) message = JSON.parse(event.data)
seq = message['type'] seq = message['type']
puts 'seq is nil' if seq.nil?
next if seq.nil?
command(seq, message, client) command(seq, message, client)
end end
ws.on :close do |event| ws.on :close do |event|
puts "leave key #{client.key}"
@socket_pool.delete(client.key) @socket_pool.delete(client.key)
p client.room
client.room.leave_client(client.key) client.room.leave_client(client.key)
client = nil client = nil
puts 'closed' puts 'closed'
...@@ -135,28 +148,73 @@ module CrazyFlirt ...@@ -135,28 +148,73 @@ module CrazyFlirt
picker = RandomPicker.new(room.clients) picker = RandomPicker.new(room.clients)
idx = picker.pick_ghost_index idx = picker.pick_ghost_index
ghost = room.clients[idx] ghost = room.clients[idx]
game_ready_notice(room, ghost, picker)
timer(room)
end
room.clients.each do |client|
msg = { def timer(room)
type: 'game_ready', @thread = Thread.new do
cid: client.id, puts 'start'
sleep(30)
puts 'notice'
notice_all(room, {
type: 'game_end',
room_id: room.name, room_id: room.name,
payload: { payload:{
open_id: client.open_id,
picture: client.picture,
} }
})
end
@item_thread = Thread.new do
5.times do
x,y = RandomPicker.item_generate
notice_all(room,{
type: 'item_refresh',
room_id: 'default_room',
payload:{
x:x,
y:y
} }
})
sleep(5)
end
end
end
def game_ready_notice(room, ghost, picker)
room.clients.each do |client|
msg = ready_message(room, client)
if ghost.key == client.key if ghost.key == client.key
msg[:payload][:role] = 'ghost' msg[:payload][:role] = 'ghost'
client.msg(msg)
else else
x,y = picker.pick_born_point x, y = picker.pick_born_point
msg[:payload][:x] = x msg[:payload][:x] = x
msg[:payload][:y] = y msg[:payload][:y] = y
msg[:payload][:role] = 'runner' msg[:payload][:role] = 'runner'
end
notice_all(room, msg)
end
end
def notice_all(room, msg)
room.clients.each do |client|
client.msg(msg) client.msg(msg)
end end
end end
def ready_message(room, client)
{
type: 'game_ready',
cid: client.id,
room_id: room.name,
payload: {
open_id: client.open_id,
picture: client.picture,
}
}
end end
def clicking(msg,cl) def clicking(msg,cl)
...@@ -177,22 +235,24 @@ module CrazyFlirt ...@@ -177,22 +235,24 @@ module CrazyFlirt
room = @room_pool[msg['rid']] room = @room_pool[msg['rid']]
seat_index = room.set_client(client) seat_index = room.set_client(client)
client.room = room client.room = room
client.user_info = {nick_name: msg['payload']['nick_name'], avatar_url: msg['payload']['avatar_url']}
msg['cid'] = client.key msg['cid'] = client.key
msg['payload']['seat'] = seat_index msg['payload']['seat'] = seat_index
msg['payload']['members'] = room.clients.map do |cl| cl.user_info end
room.clients.each do |client| room.clients.each do |client|
client.msg(msg) client.msg(msg)
end end
end end
def create_room(msg) # def create_room(msg)
client_id = msg['cid'] # client_id = msg['cid']
key = "room_#{::CrazyFlirt::RandomKeyGenerator.key}" # key = "room_#{::CrazyFlirt::RandomKeyGenerator.key}"
room = GameRoom.new(key) # room = GameRoom.new(key)
@room_pool[key] = room # @room_pool[key] = room
client = @socket_pool[client_id] # client = @socket_pool[client_id]
room.set_client(client) # room.set_client(client)
client.msg(room_id: key) # client.msg(room_id: key)
end # end
end end
end end
......
...@@ -4,6 +4,7 @@ const gridsInX = 14 ...@@ -4,6 +4,7 @@ const gridsInX = 14
const gridsInY = 10 const gridsInY = 10
class Map extends egret.Sprite { class Map extends egret.Sprite {
private grids:any = [] private grids:any = []
private touchArea: egret.Bitmap
public constructor() { public constructor() {
super(); super();
this.init() this.init()
...@@ -11,7 +12,6 @@ class Map extends egret.Sprite { ...@@ -11,7 +12,6 @@ class Map extends egret.Sprite {
// 初始化(给开始按钮绑定点击事件) // 初始化(给开始按钮绑定点击事件)
private init() { private init() {
console.log('Map.init')
for (let i = 0; i < gridsInY; i++) { for (let i = 0; i < gridsInY; i++) {
this.grids.push([]) this.grids.push([])
for (let j = 0; j < gridsInX; j++) { for (let j = 0; j < gridsInX; j++) {
...@@ -22,21 +22,44 @@ class Map extends egret.Sprite { ...@@ -22,21 +22,44 @@ class Map extends egret.Sprite {
this.addChild(grid) this.addChild(grid)
} }
} }
if (Store.isCatcher()) {
const mask = new egret.Shape() this.touchArea = new egret.Bitmap()
mask.x = 100 this.touchArea.texture = RES.getRes('mask_jpg')
mask.y = 100 this.touchArea.alpha = 0
mask.graphics.lineStyle( 10, 0x00ff00 ); this.addChild(this.touchArea)
mask.graphics.beginFill( 0xff0000, 1); }
mask.graphics.drawCircle( 0, 0, 50 );
mask.graphics.endFill(); public getSurroundedGrids(x, y) {
mask.touchEnabled = false const left = Math.max(x / gridWidth - 2)
this.mask = mask const top = Math.max(y / gridHeight - 2)
const grids = []
for (let i = left; i < 5 + left; i++) {
for (let j = top; j < 5 + top; j++) {
if (i >= 0 && j >= 0 && i < gridsInX && j < gridsInY) {
grids.push(this.grids[j][i])
}
} }
// put display object to this scene }
return grids
}
public showSurroundedGrids(x, y) {
const surroundedGrids = this.getSurroundedGrids(x, y)
surroundedGrids.forEach(grid => {
grid.alpha = 1
})
this.touchArea.alpha = 1
this.touchArea.x = x - 2 * gridWidth
this.touchArea.y = y - 2 * gridHeight
setTimeout(() => {
surroundedGrids.forEach(grid => {
grid.alpha = 0
})
this.touchArea.alpha = 0
}, 1000);
} }
public release() { public release() {
// 移除事件
} }
} }
\ No newline at end of file
...@@ -6,25 +6,22 @@ class MapGrid extends egret.Sprite { ...@@ -6,25 +6,22 @@ class MapGrid extends egret.Sprite {
this.init() this.init()
} }
// 初始化(给开始按钮绑定点击事件)
private init() { private init() {
console.log('Map.init')
this.bg.texture = RES.getRes('grid_jpg') this.bg.texture = RES.getRes('grid_jpg')
this.addChild(this.bg) this.addChild(this.bg)
this.bg.touchEnabled = true this.touchEnabled = true
this.bg.addEventListener(egret.TouchEvent.TOUCH_BEGIN, this.onTouchTap, this) if (Store.isCatcher()) {
this.alpha = 0
this.addEventListener(egret.TouchEvent.TOUCH_BEGIN, this.onTouchTap, this)
}
} }
private onTouchTap() { private onTouchTap() {
console.log(this, this.parent)
if (Store.isCatcher()) { if (Store.isCatcher()) {
console.log(this, this.parent) this.parent.showSurroundedGrids(this.x, this.y)
// const map = SceneManager.getInstance().gameScene.map
} }
} }
public release() { public release() {
// 移除事件
} }
} }
\ No newline at end of file
...@@ -15,7 +15,7 @@ class SceneManager extends egret.DisplayObjectContainer { ...@@ -15,7 +15,7 @@ class SceneManager extends egret.DisplayObjectContainer {
this.roomScene = new RoomScene(); this.roomScene = new RoomScene();
this.gameScene = new GameScene(); this.gameScene = new GameScene();
// 默认添加开始场景 // 默认添加开始场景
this.addChild(this.roomScene); this.addChild(this.gameScene);
} }
// 实例化单例获取方法 // 实例化单例获取方法
public static getInstance(): SceneManager { public static getInstance(): SceneManager {
......
...@@ -31,6 +31,6 @@ class Store { ...@@ -31,6 +31,6 @@ class Store {
static isCatcher() { static isCatcher() {
return true return true
return _state.role === 'ghost' // return _state.role === 'ghost'
} }
} }
\ No newline at end of file
...@@ -28,7 +28,7 @@ class GameScene extends egret.Sprite { ...@@ -28,7 +28,7 @@ class GameScene extends egret.Sprite {
this.me.y = 15 this.me.y = 15
this.me.x = 10 this.me.x = 10
this.addChild(this.map) this.addChild(this.map)
this.addChild(this.me) this.map.addChild(this.me)
} }
private onPositionChange(delta){ private onPositionChange(delta){
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment