Blame view

src/adv/AdvRoom.lua 2.41 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
21
22
  end
  
  function Room:loadBlocks(csvData, info)
  	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   中继层
23
24
25
26
  		if self.map.adv.isRelay then  -- 中继层全部开放
  			self.blocks[blockId].isOpen = true
  			self.blocks[blockId]:randomEvent()
  		end
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
27
28
29
30
31
32
  		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   中继层
33
  			if self.blocks[blockId]:getEventType() == AdvEventType.In or self.blocks[blockId]:getEventType() == AdvEventType.InOut then -- 开放
43babcff   zhouhaihai   优化冒险结构 增加夹层功能
34
35
36
37
38
39
40
41
42
43
44
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
  				self.isShow = true
  				self.blocks[blockId].isOpen = true
  				--入口房间只会在这里首次展示开放 --触发固有技
  				self.map.adv:triggerPassive(Passive.ROOM_SHOW, {roomId = self.roomId})
  			end
  		end
  	end
  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
  
  	self.map.adv:scoreChange(AdvScoreType.Block)
  
  	if not self.isShow then
  		self.isShow = true
  		--首次展示房间
  		self.map.adv:triggerPassive(Passive.ROOM_SHOW, {roomId = self.roomId})
  	end 
  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