Blame view

src/adv/AdvRoom.lua 2.5 KB
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  -- 房间
  
  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
  
  	self.blocks = {}
  	self:loadBlocks(csvData, info)
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
18
19
20
  end
  
  function Room:loadBlocks(csvData, info)
c8210d56   zhouhaihai   boss 房有入口
21
  	local isFirstOpen = false
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
22
23
  	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   优化冒险结构 增加夹层功能
24
25
26
27
28
29
  		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   中继层
30
  			if self.blocks[blockId]:getEventType() == AdvEventType.In or self.blocks[blockId]:getEventType() == AdvEventType.InOut then -- 开放
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
31
32
  				self.isShow = true
  				self.blocks[blockId].isOpen = true
c8210d56   zhouhaihai   boss 房有入口
33
  				isFirstOpen = true
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
34
35
36
37
38
  				--入口房间只会在这里首次展示开放 --触发固有技
  				self.map.adv:triggerPassive(Passive.ROOM_SHOW, {roomId = self.roomId})
  			end
  		end
  	end
d677158e   zhouhaihai   调整打开地块位置
39
40
  	--中继层全部开放   boss 房间 开启所有的地块
  	if  self.map.adv.isRelay or (self.isBossRoom and self.isShow and isFirstOpen) then
c8210d56   zhouhaihai   boss 房有入口
41
42
43
44
  		for _, block in pairs(self.blocks) do
  			self:openBlock(block)
  		end
  	end
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
  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   优化冒险结构 增加夹层功能
75
76
77
78
79
  	if not self.isShow then
  		self.isShow = true
  		--首次展示房间
  		self.map.adv:triggerPassive(Passive.ROOM_SHOW, {roomId = self.roomId})
  	end 
c8210d56   zhouhaihai   boss 房有入口
80
  	return true
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
  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