226 lines
6.0 KiB
Plaintext
226 lines
6.0 KiB
Plaintext
-- autoImport('EffectAndAudioForInteractionGrass_NoAppropriate')
|
|
autoImport('LuaFarmland')
|
|
autoImport('LuaRolesOnCurrentMap')
|
|
autoImport('Debug_LuaMemotry')
|
|
autoImport('ArrayUtil')
|
|
autoImport('LuaDynamicGrass')
|
|
|
|
FunctionInteractionGrass = class("FunctionInteractionGrass")
|
|
|
|
local reusableLuaVector3 = LuaVector3.New()
|
|
local reusableArray1 = {}
|
|
local reusableArray2 = {}
|
|
|
|
local poolLuaVector3 = {}
|
|
local IsNull = Slua.IsNull
|
|
function FunctionInteractionGrass.GetLuaVector3()
|
|
local retVec3 = nil
|
|
local retIndex = 0
|
|
for k, v in pairs(poolLuaVector3) do
|
|
local vec3Container = v
|
|
if not vec3Container.vec3IsBusy then
|
|
retVec3 = vec3Container.vec3
|
|
retIndex = k
|
|
vec3Container.vec3IsBusy = true
|
|
break
|
|
end
|
|
end
|
|
if retVec3 == nil then
|
|
local luaVector3 = LuaVector3.zero
|
|
local vec3Container = {
|
|
vec3IsBusy = true,
|
|
vec3 = luaVector3
|
|
}
|
|
table.insert(poolLuaVector3, vec3Container)
|
|
retVec3 = luaVector3
|
|
retIndex = #poolLuaVector3
|
|
end
|
|
return retVec3, retIndex
|
|
end
|
|
|
|
function FunctionInteractionGrass.BackLuaVector3(lua_vector3_index)
|
|
local vec3Container = poolLuaVector3[lua_vector3_index]
|
|
vec3Container.isBusy = false
|
|
vec3Container.vec3:Set(0, 0, 0)
|
|
end
|
|
|
|
FunctionInteractionGrass.ins = nil
|
|
function FunctionInteractionGrass.Ins()
|
|
if FunctionInteractionGrass.ins == nil then
|
|
FunctionInteractionGrass.ins = FunctionInteractionGrass.new()
|
|
end
|
|
return FunctionInteractionGrass.ins
|
|
end
|
|
|
|
function FunctionInteractionGrass:Open()
|
|
if self.tick == nil then
|
|
self.tickID = 1
|
|
self.tick = TimeTickManager.Me():CreateTick(0, 100, self.OnTick, self, self.tickID)
|
|
end
|
|
if self.farmlandManager == nil then
|
|
self.farmlandManager = LuaFarmlandManager.Ins()
|
|
self.farmlandManager:Initialize()
|
|
end
|
|
|
|
-- {
|
|
-- [1] = { -- player id
|
|
-- pos = LuaVector3.zero, -- position
|
|
-- previousFarmland = 1, -- previous farmland
|
|
-- isLeaveFromPreviousFarmland = false,
|
|
-- farmland = 1 -- farmland
|
|
-- }
|
|
-- }
|
|
if self.cachedPlayersOnFarmlands == nil then
|
|
self.cachedPlayersOnFarmlands = {}
|
|
end
|
|
|
|
-- self:ListenSceneBeLoaded()
|
|
|
|
-- EffectAndAudioForInteractionGrass_NoAppropriate.Instance():Open()
|
|
|
|
self:Listen()
|
|
end
|
|
|
|
function FunctionInteractionGrass:Close()
|
|
if self.tick ~= nil then
|
|
TimeTickManager.Me():ClearTick(self, self.tickID)
|
|
end
|
|
self:Release()
|
|
-- EffectAndAudioForInteractionGrass_NoAppropriate.Instance():Close()
|
|
self:CancelListen()
|
|
end
|
|
|
|
function FunctionInteractionGrass:OnTick()
|
|
if not self:IsExistAnyFarmland() then
|
|
return
|
|
end
|
|
|
|
-- 1.handle Myself
|
|
self:_HandleCreature(Game.Myself)
|
|
|
|
-- 2.handle Players
|
|
local users = NSceneUserProxy.Instance.userMap
|
|
for k,v in pairs(users) do
|
|
self:_HandleCreature(v)
|
|
end
|
|
|
|
-- 3.can handle npcs
|
|
end
|
|
|
|
function FunctionInteractionGrass:_HandleCreature(creature)
|
|
local pos = creature:GetPosition()
|
|
local creatureID= creature.data.id
|
|
local handled = false
|
|
local farmlandManager = self.farmlandManager
|
|
for i = 1, #farmlandManager.cachedFarmlands do
|
|
local luaFarmland = farmlandManager.cachedFarmlands[i]
|
|
-- if not IsNull(luaFarmland.csfarmland) then
|
|
if(handled==false) then
|
|
if(luaFarmland:IsPointInside(pos)) then
|
|
farmlandManager:CreatureIn(luaFarmland,creatureID,pos)
|
|
if(not farmlandManager:GetOverlap()) then
|
|
handled = true
|
|
end
|
|
if(creature:IsMoving()) then
|
|
--handle moving
|
|
farmlandManager:TryHandleCreatureMoving(luaFarmland,creatureID,pos)
|
|
else
|
|
--handle idle
|
|
-- farmlandManager:TryHandleCreatureIdle(luaFarmland,creatureID)
|
|
end
|
|
else
|
|
farmlandManager:TryHandleCreatureLeaving(luaFarmland,creatureID)
|
|
end
|
|
else
|
|
farmlandManager:TryHandleCreatureLeaving(luaFarmland,creatureID)
|
|
end
|
|
-- end
|
|
end
|
|
end
|
|
|
|
function FunctionInteractionGrass:IsExistAnyFarmland()
|
|
for k, v in pairs(self.farmlandManager.cachedFarmlands) do
|
|
local luaFarmland = v
|
|
if not GameObjectUtil.Instance:ObjectIsNULL(luaFarmland.csfarmland) then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function FunctionInteractionGrass:Listen()
|
|
EventManager.Me():AddEventListener(LoadSceneEvent.FinishLoadScene, self.OnSceneBeLoaded, self)
|
|
EventManager.Me():AddEventListener(ServiceEvent.PlayerMapChange, self.OnMapChange, self)
|
|
end
|
|
|
|
function FunctionInteractionGrass:CancelListen()
|
|
EventManager.Me():RemoveEventListener(LoadSceneEvent.FinishLoadScene,self.OnSceneBeLoaded,self)
|
|
EventManager.Me():RemoveEventListener(ServiceEvent.PlayerMapChange, self.OnMapChange, self)
|
|
end
|
|
|
|
function FunctionInteractionGrass:OnSceneBeLoaded(message)
|
|
------------------- lawn -------------------
|
|
-- self:GetLawnsGameObject()
|
|
------------------- lawn -------------------
|
|
end
|
|
|
|
function FunctionInteractionGrass:OnMapChange(message)
|
|
self:Release()
|
|
self:Reset()
|
|
self.farmlandManager:Release()
|
|
self.farmlandManager:Reset()
|
|
-- EffectAndAudioForInteractionGrass_NoAppropriate.Instance():Reset()
|
|
LuaRolesOnCurrentMap.Ins():Reset()
|
|
-- LuaDynamicGrass.ReleasePoolEffectiveBody()
|
|
end
|
|
|
|
------------------- lawn -------------------
|
|
local effectiveDistanceOfLawn = {
|
|
Clover = 0.5,
|
|
}
|
|
|
|
function FunctionInteractionGrass:GetLawnsGameObject()
|
|
if self.gameObjectLawns == nil then
|
|
self.gameObjectLawns = {}
|
|
end
|
|
TableUtility.ArrayClear(self.gameObjectLawns)
|
|
local index = 1
|
|
while true do
|
|
local goLawn = GameObject.Find("Lawn" .. index)
|
|
if goLawn ~= nil then
|
|
table.insert(self.gameObjectLawns, goLawn)
|
|
index = index + 1
|
|
else
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
function FunctionInteractionGrass:IsExistAnyLawn()
|
|
if self.gameObjectLawns ~= nil then
|
|
for k, v in pairs(self.gameObjectLawns) do
|
|
local gameObjectLawn = v
|
|
if GameObjectUtil.Instance:ObjectIsNULL(gameObjectLawn) then
|
|
self.gameObjectLawns[k] = nil
|
|
end
|
|
end
|
|
if #self.gameObjectLawns > 0 then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
------------------- lawn -------------------
|
|
|
|
function FunctionInteractionGrass:Release()
|
|
for _, v in pairs(self.cachedPlayersOnFarmlands) do
|
|
local playerOnFarmland = v
|
|
FunctionInteractionGrass.BackLuaVector3(playerOnFarmland.vec3Index)
|
|
ReusableTable.DestroyAndClearTable(playerOnFarmland)
|
|
end
|
|
self.cachedPlayersOnFarmlands = nil
|
|
end
|
|
|
|
function FunctionInteractionGrass:Reset()
|
|
self.cachedPlayersOnFarmlands = {}
|
|
end |