Blame view

src/adv/AdvRoom.lua 2.59 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])
0e3ab88d   zhouhaihai   中继层
24
25
26
27
  		if self.map.adv.isRelay then  -- 中继层全部开放
  			self.blocks[blockId].isOpen = true
  			self.blocks[blockId]:randomEvent()
  		end
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
28
29
30
31
32
33
  		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   中继层
34
  			if self.blocks[blockId]:getEventType() == AdvEventType.In or self.blocks[blockId]:getEventType() == AdvEventType.InOut then -- 开放
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
35
36
  				self.isShow = true
  				self.blocks[blockId].isOpen = true
c8210d56   zhouhaihai   boss 房有入口
37
  				isFirstOpen = true
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
38
39
40
41
42
  				--入口房间只会在这里首次展示开放 --触发固有技
  				self.map.adv:triggerPassive(Passive.ROOM_SHOW, {roomId = self.roomId})
  			end
  		end
  	end
c8210d56   zhouhaihai   boss 房有入口
43
44
45
46
47
48
  	-- boss 房间 开启一下所有的地块
  	if self.isBossRoom and self.isShow  and isFirstOpen then
  		for _, block in pairs(self.blocks) do
  			self:openBlock(block)
  		end
  	end
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
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
75
76
77
78
  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   优化冒险结构 增加夹层功能
79
80
81
82
83
  	if not self.isShow then
  		self.isShow = true
  		--首次展示房间
  		self.map.adv:triggerPassive(Passive.ROOM_SHOW, {roomId = self.roomId})
  	end 
c8210d56   zhouhaihai   boss 房有入口
84
  	return true
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
  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