同步操作将从 jzt/UnityFun 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
require "scene.entity"require "scene.character"require "data.monster_data"require "data.main_role_data"require "data.player_data"require "data.npc_data"require("turn_based_combat.tb_combat_unit")Scene = Scene or class()function Scene:ctor(sceneId)assert(sceneId)self.sceneId = sceneIdself.mainRole = nilself.entities = {}self.csScaleFactor = 1endfunction Scene:dtor()if self.prefabGameObject thenGameObject.Destroy(self.prefabGameObject)--self.prefabAssetBundleLoader:Release()endfor k, entity in pairs(self.entities) doentity:delete()endendfunction Scene:getSceneId()return self.sceneIdendfunction Scene:setPathfindingMap(config)if config.pathfinding_type == Pathfinding_Type.AstarMatrix thenlocal mapInfo = self:readMapInfo(config.astar_matrix_map)PathfindingSystem.getInstance():setAstarMatrixMap(mapInfo)elseif config.pathfinding_type == Pathfinding_Type.PotentialField thenelsePathfindingSystem.getInstance().astarMatrixPathfinding = nilendendfunction Scene:setMapInfo(mapInfo)assert(mapInfo)assert(mapInfo.width)assert(mapInfo.height)assert(mapInfo.cs_scale)self.width = mapInfo.widthself.height = mapInfo.heightself.csScaleFactor = mapInfo.cs_scaleendfunction Scene:update()for k, entity in pairs(self.entities) doif entity.update thenentity:update()endendendfunction Scene:addEntity(entity)table.insert(self.entities, entity)entity:onEnterScene(self)endfunction Scene:removeEntity(entityId)local entity = nillocal removeIndex = nilfor k, v in ipairs(self.entities) doif v.entityId == entityId thenentity = vremoveIndex = kendendif removeIndex ~= nil thentable.remove(self.entities, removeIndex)entity:onLeaveScene(self)entity:delete()endendfunction Scene:getAllEntities()return self.entitiesendfunction Scene:getEntityById(entityId)for k, v in pairs(self.entities) doif v.entityId == entityId thenreturn vendendendfunction Scene:convertScreenPosToMapPos(x, y)--2D场景-- local ray = Camera.main:ScreenPointToRay(Input.mousePosition)-- local plane = Plane(-Vector3.forward, Vector3(0, 0, -10))-- local ok, distance = plane:Raycast(ray)-- if ok then-- return ray:GetPoint(distance)-- endlocal hitInfo = ScreenPointRaycast(Input.mousePosition, "SceneEntity")if hitInfo thenreturn self:convertUnityPosToMapPos(hitInfo.point)elseprint("Warning convertScreenPosToMapPos nil")endendfunction Scene:convertMapPosToUnityPos(x, y)return Vector3(x * self.csScaleFactor, 0, y * self.csScaleFactor)endfunction Scene:convertUnityPosToMapPos(pos)local x = math.floor(pos.x / self.csScaleFactor)local y = math.floor(pos.z / self.csScaleFactor)return x, yendfunction Scene:createMainRole(data, loadCallback)self.mainRole = Character.new(data.entity_id, MainRoleData.getInstance():init(data), EntityType.MainRole, loadCallback)self:addEntity(self.mainRole)endfunction Scene:createPlayers(data)for i, playerInfo in ipairs(data) dolocal player = Character.new(playerInfo.entity_id, PlayerData.new(playerInfo), EntityType.Player)self:addEntity(player)endendfunction Scene:createMonsters(data)for i, monsterInfo in ipairs(data) dolocal monster = Character.new(monsterInfo.entity_id, MonsterData.new(monsterInfo), EntityType.Monster)self:addEntity(monster)endendfunction Scene:createNPCs(data)for i, npcInfo in ipairs(data) dolocal npc = Character.new(npcInfo.entity_id, NpcData.new(npcInfo), EntityType.Npc)self:addEntity(npc)endendfunction Scene:createTbCombatUnits(data)for i, unitInfo in ipairs(data) dolocal unit = TBCombatUnit.new(10000+unitInfo.unit_id, unitInfo, EntityType.TBCombatUnit)self:addEntity(unit)endendfunction Scene:getTbCombatUnits()local tbCombatUnits = {}for k, entity in pairs(self.entities) doif entity.type == EntityType.TBCombatUnit thentable.insert(tbCombatUnits, entity)endendreturn tbCombatUnitsendfunction Scene:removeTbCombatUnits()for k, entity in pairs(self:getTbCombatUnits()) doself:removeEntity(entity.entityId)endendfunction Scene:setAllEntitiesActive(bool)for k, entity in pairs(self.entities) doif entity.gameObject thenentity.gameObject:SetActive(bool)entity:showHUDText(bool)endendendfunction Scene:showHUDText(bool)local bool = bool or truefor k, entity in ipairs(self.entities) doentity:updateUIPos(bool)entity:showHUDText(bool)endendfunction Scene:showCombatUnitBloodbar(bool)local bool = bool or truefor k, entity in ipairs(self.entities) doif entity.type == EntityType.TBCombatUnit thenentity:updateUIPos(bool)entity:showBloodbar(bool)endendend
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。