Blame view

src/adv/AdvRoom.lua 3.1 KB
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
1
2
3
4
5
6
7
  -- 房间
  
  local AdvCommon = require "adv.AdvCommon"
  local Block = require "adv.AdvBlock"
  local Passive = require "adv.AdvPassive"
  
  local Room = class("AdvRoom")
8c7272a5   zhouhaihai   冒险 地图刷新需求
8
  function Room:ctor(map, roomId, csvData, info, isPath, isNewRelay, mapType)
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
9
10
11
12
13
14
  	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 = {}
2d87caee   zhouhaihai   地块替换优化 新的效果类型
16
  	self.csvData = csvData
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
17
18
  
  	self.blocks = {}
2d87caee   zhouhaihai   地块替换优化 新的效果类型
19
  	self:loadBlocks(info, isNewRelay, mapType)
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
20
21
  end
  
2d87caee   zhouhaihai   地块替换优化 新的效果类型
22
  function Room:loadBlocks(info, isNewRelay, mapType)
c8210d56   zhouhaihai   boss 房有入口
23
  	local isFirstOpen = false
2d87caee   zhouhaihai   地块替换优化 新的效果类型
24
  	for blockId, _ in pairs(self.csvData["blocks"]) do
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
25
  		self.blocks[blockId] = Block.new(self, blockId, info.event[blockId], info.open == 1 or info.open[blockId], info.trap[blockId])
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
26
27
28
29
30
31
  		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   中继层
32
  			if self.blocks[blockId]:getEventType() == AdvEventType.In or self.blocks[blockId]:getEventType() == AdvEventType.InOut then -- 开放
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
33
34
  				self.isShow = true
  				self.blocks[blockId].isOpen = true
c8210d56   zhouhaihai   boss 房有入口
35
  				isFirstOpen = true
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
36
37
38
  			end
  		end
  	end
d677158e   zhouhaihai   调整打开地块位置
39
  	--中继层全部开放   boss 房间 开启所有的地块
23d9f086   zhouhaihai   展示房间
40
  	if  (self.map.adv.isRelay and not isNewRelay) or (self.isBossRoom and self.isShow and isFirstOpen) or (isFirstOpen and mapType == 1) then
1313eac0   zhouhaihai   冒险的一些bug
41
42
43
44
45
46
  		table.insert(self.battleAfterCall, function()
  			for _, block in pairs(self.blocks) do
  				self:openBlock(block)
  			end
  		end)
  	end
819d7978   zhouhaihai   被动触发时机调整
47
48
49
50
51
52
  	if isFirstOpen then
  		table.insert(self.battleAfterCall, function()
  			--入口房间只会在这里首次展示开放 --触发固有技
  			self.map.adv:triggerPassive(Passive.ROOM_SHOW, {roomId = self.roomId})
  		end)
  	end
1313eac0   zhouhaihai   冒险的一些bug
53
54
  end
  
2d87caee   zhouhaihai   地块替换优化 新的效果类型
55
56
57
58
59
60
  function Room:getStageType(blockId)
  	if not self.blocks[blockId] then return end
  	if not self.csvData["blocks"][blockId] then return end
  	return self.csvData["blocks"][blockId]
  end
  
1313eac0   zhouhaihai   冒险的一些bug
61
62
63
  function Room:initBattleAfter()	
  	for _, callback in ipairs(self.battleAfterCall) do
  		callback()
c8210d56   zhouhaihai   boss 房有入口
64
  	end
1313eac0   zhouhaihai   冒险的一些bug
65
  	self.battleAfterCall = {}
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
  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   优化冒险结构 增加夹层功能
96
97
98
99
100
  	if not self.isShow then
  		self.isShow = true
  		--首次展示房间
  		self.map.adv:triggerPassive(Passive.ROOM_SHOW, {roomId = self.roomId})
  	end 
c8210d56   zhouhaihai   boss 房有入口
101
  	return true
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
  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