1 Star 0 Fork 15

lbzcode/UnityFun

forked from jzt/UnityFun 
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
scene.lua 4.64 KB
一键复制 编辑 原始数据 按行查看 历史
陈勇星 提交于 2017-10-19 20:09 +08:00 . 完善3D视角行走
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 = sceneId
self.mainRole = nil
self.entities = {}
self.csScaleFactor = 1
end
function Scene:dtor()
if self.prefabGameObject then
GameObject.Destroy(self.prefabGameObject)
--self.prefabAssetBundleLoader:Release()
end
for k, entity in pairs(self.entities) do
entity:delete()
end
end
function Scene:getSceneId()
return self.sceneId
end
function Scene:setPathfindingMap(config)
if config.pathfinding_type == Pathfinding_Type.AstarMatrix then
local mapInfo = self:readMapInfo(config.astar_matrix_map)
PathfindingSystem.getInstance():setAstarMatrixMap(mapInfo)
elseif config.pathfinding_type == Pathfinding_Type.PotentialField then
else
PathfindingSystem.getInstance().astarMatrixPathfinding = nil
end
end
function Scene:setMapInfo(mapInfo)
assert(mapInfo)
assert(mapInfo.width)
assert(mapInfo.height)
assert(mapInfo.cs_scale)
self.width = mapInfo.width
self.height = mapInfo.height
self.csScaleFactor = mapInfo.cs_scale
end
function Scene:update()
for k, entity in pairs(self.entities) do
if entity.update then
entity:update()
end
end
end
function Scene:addEntity(entity)
table.insert(self.entities, entity)
entity:onEnterScene(self)
end
function Scene:removeEntity(entityId)
local entity = nil
local removeIndex = nil
for k, v in ipairs(self.entities) do
if v.entityId == entityId then
entity = v
removeIndex = k
end
end
if removeIndex ~= nil then
table.remove(self.entities, removeIndex)
entity:onLeaveScene(self)
entity:delete()
end
end
function Scene:getAllEntities()
return self.entities
end
function Scene:getEntityById(entityId)
for k, v in pairs(self.entities) do
if v.entityId == entityId then
return v
end
end
end
function 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)
-- end
local hitInfo = ScreenPointRaycast(Input.mousePosition, "SceneEntity")
if hitInfo then
return self:convertUnityPosToMapPos(hitInfo.point)
else
print("Warning convertScreenPosToMapPos nil")
end
end
function Scene:convertMapPosToUnityPos(x, y)
return Vector3(x * self.csScaleFactor, 0, y * self.csScaleFactor)
end
function Scene:convertUnityPosToMapPos(pos)
local x = math.floor(pos.x / self.csScaleFactor)
local y = math.floor(pos.z / self.csScaleFactor)
return x, y
end
function Scene:createMainRole(data, loadCallback)
self.mainRole = Character.new(data.entity_id, MainRoleData.getInstance():init(data), EntityType.MainRole, loadCallback)
self:addEntity(self.mainRole)
end
function Scene:createPlayers(data)
for i, playerInfo in ipairs(data) do
local player = Character.new(playerInfo.entity_id, PlayerData.new(playerInfo), EntityType.Player)
self:addEntity(player)
end
end
function Scene:createMonsters(data)
for i, monsterInfo in ipairs(data) do
local monster = Character.new(monsterInfo.entity_id, MonsterData.new(monsterInfo), EntityType.Monster)
self:addEntity(monster)
end
end
function Scene:createNPCs(data)
for i, npcInfo in ipairs(data) do
local npc = Character.new(npcInfo.entity_id, NpcData.new(npcInfo), EntityType.Npc)
self:addEntity(npc)
end
end
function Scene:createTbCombatUnits(data)
for i, unitInfo in ipairs(data) do
local unit = TBCombatUnit.new(10000+unitInfo.unit_id, unitInfo, EntityType.TBCombatUnit)
self:addEntity(unit)
end
end
function Scene:getTbCombatUnits()
local tbCombatUnits = {}
for k, entity in pairs(self.entities) do
if entity.type == EntityType.TBCombatUnit then
table.insert(tbCombatUnits, entity)
end
end
return tbCombatUnits
end
function Scene:removeTbCombatUnits()
for k, entity in pairs(self:getTbCombatUnits()) do
self:removeEntity(entity.entityId)
end
end
function Scene:setAllEntitiesActive(bool)
for k, entity in pairs(self.entities) do
if entity.gameObject then
entity.gameObject:SetActive(bool)
entity:showHUDText(bool)
end
end
end
function Scene:showHUDText(bool)
local bool = bool or true
for k, entity in ipairs(self.entities) do
entity:updateUIPos(bool)
entity:showHUDText(bool)
end
end
function Scene:showCombatUnitBloodbar(bool)
local bool = bool or true
for k, entity in ipairs(self.entities) do
if entity.type == EntityType.TBCombatUnit then
entity:updateUIPos(bool)
entity:showBloodbar(bool)
end
end
end
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/lbzcode/UnityFun.git
git@gitee.com:lbzcode/UnityFun.git
lbzcode
UnityFun
UnityFun
master

搜索帮助