Blame view

src/adv/AdvRoom.lua 2.72 KB
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  -- 房间
  
  local AdvCommon = require "adv.AdvCommon"
  local Block = require "adv.AdvBlock"
  local Passive = require "adv.AdvPassive"
  
  local Room = class("AdvRoom")
  function Room:ctor(map, roomId, csvData, info, isPath)
  	self.map = map
  	self.roomId = roomId
  	self.col, self.row = AdvCommon.getCrById(self.roomId)
  	self.isPath = isPath
  	self.isBossRoom = false -- boss房间   --击败boss 以后重置为false
  	self.isShow = false
1313eac0   zhouhaihai   冒险的一些bug
15
  	self.battleAfterCall = {}
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
16
17
18
  
  	self.blocks = {}
  	self:loadBlocks(csvData, info)
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
19
20
21
  end
  
  function Room:loadBlocks(csvData, info)
c8210d56   zhouhaihai   boss 房有入口
22
  	local isFirstOpen = false
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
23
24
  	for blockId, _ in pairs(csvData["blocks"]) do
  		self.blocks[blockId] = Block.new(self, blockId, info.event[blockId], info.open == 1 or info.open[blockId], info.trap[blockId])
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
25
26
27
28
29
30
  		if not self.isPath and self.blocks[blockId]:isBoss() then
  			self.isBossRoom = true 
  		end
  		if self.blocks[blockId].isOpen then
  			self.isShow = true
  		else
0e3ab88d   zhouhaihai   中继层
31
  			if self.blocks[blockId]:getEventType() == AdvEventType.In or self.blocks[blockId]:getEventType() == AdvEventType.InOut then -- 开放
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
32
33
  				self.isShow = true
  				self.blocks[blockId].isOpen = true
c8210d56   zhouhaihai   boss 房有入口
34
  				isFirstOpen = true
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
35
36
37
38
39
  				--入口房间只会在这里首次展示开放 --触发固有技
  				self.map.adv:triggerPassive(Passive.ROOM_SHOW, {roomId = self.roomId})
  			end
  		end
  	end
d677158e   zhouhaihai   调整打开地块位置
40
41
  	--中继层全部开放   boss 房间 开启所有的地块
  	if  self.map.adv.isRelay or (self.isBossRoom and self.isShow and isFirstOpen) then
1313eac0   zhouhaihai   冒险的一些bug
42
43
44
45
46
47
48
49
50
51
52
  		table.insert(self.battleAfterCall, function()
  			for _, block in pairs(self.blocks) do
  				self:openBlock(block)
  			end
  		end)
  	end
  end
  
  function Room:initBattleAfter()	
  	for _, callback in ipairs(self.battleAfterCall) do
  		callback()
c8210d56   zhouhaihai   boss 房有入口
53
  	end
1313eac0   zhouhaihai   冒险的一些bug
54
  	self.battleAfterCall = {}
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
  end
  
  function Room:getDB()
  	local room = {event = {}, open = {}, trap = {}}
  	local allOpen = true
  	for blockId, block in pairs(self.blocks) do
  		room["event"][blockId] = block.event
  		room["open"][blockId] = block.isOpen and 1 or nil
  		if not block.isOpen then
  			allOpen = false
  		end
  		room["trap"][blockId] = block.trapId
  	end
  	if allOpen then
  		room["open"] = 1
  	end
  	return room
  end
  
  function Room:openBlock(block)
  	if self.blocks[block.blockId] ~= block then return end
  	if block.isOpen == true then return end
  	if self.isBossRoom then
  		for _, _block in pairs(self.blocks) do
  			_block:open()
  		end
  	else
  		block:open()
  	end
  
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
85
86
87
88
89
  	if not self.isShow then
  		self.isShow = true
  		--首次展示房间
  		self.map.adv:triggerPassive(Passive.ROOM_SHOW, {roomId = self.roomId})
  	end 
c8210d56   zhouhaihai   boss 房有入口
90
  	return true
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
  end
  
  
  function Room:tranGToL(c, r)
  	return c - self.col, r - self.row
  end
  
  function Room:tranLtoG(c, r)
  	return c + self.col, r + self.row
  end
  
  function Room:getBByGPos(c, r)
  	local c, r = self:tranGToL(c, r)
  	return self.blocks[AdvCommon.getIdByCr(c, r)]
  end
  
  
  
  return Room