yunque9/lua_probject/extend_project/extend/poker/mushi/FlyCoin.lua

76 lines
2.3 KiB
Lua

---
--- Created by 谌建军.
--- DateTime: 2017/12/18 15:19
---
local FlyCoin = {}
local M = FlyCoin
function FlyCoin.new(startPos,endPos,view,coinPre)
local self = setmetatable({}, {__index = M})
self.class = "FlyCoin"
--self.flyObj = UIPackage.CreateObjectFromURL("ui://Extend_Poker_MuShi/coin")
self.flyObj= UnityEngine.GameObject.Instantiate(coinPre)
--view:AddChild(self.flyObj)
self.flyObj.gameObject.transform.parent = view.displayObject.gameObject.transform
self.flyObj.gameObject.transform.position = startPos--Vector3(50,-50,0)
self.flyObj.gameObject.transform.localScale = Vector3(50,50,50)
self.isFly = false
self.g = -5
self.hideTime = 1
self.flySpeed = Vector3.New(5,5,0)
self.currentTime = 0
self.gravity = Vector3.New(0,0,0)
self.SpeedRatio=3
self:SetParabola(startPos,endPos)
UpdateBeat:Add(self.OnFlyCoinUpdate,self)
return self
end
function M:SetParabola(startPos,endPos)
self.startPos=startPos
self.endPos=endPos
self.distance=Vector3.Distance(endPos,startPos)
self.totalTime=self.distance/self.SpeedRatio
if self.totalTime>0.6 then
self.totalTime=0.6
end
self.flySpeed=Vector3((self.endPos.x-self.startPos.x)/self.totalTime,(self.endPos.y-self.startPos.y)/self.totalTime-0.5*self.g*self.totalTime,(self.endPos.z-self.startPos.z)/self.totalTime )
self.currentTime=0
self.flyObj.gameObject.transform.position=startPos
self.isFly=true
end
function M:OnFlyCoinUpdate()
if self.isFly then
self.currentTime=self.currentTime+Time.deltaTime
self.gravity.y=self.currentTime*self.g
if self.currentTime>self.totalTime and self.currentTime<self.hideTime then
self.flyObj.gameObject.transform.position=self.endPos
self.isFly=false
self.currentTime=0
coroutine.start(function ()
coroutine.wait(0.3)
self:OnDestroy()
end)
elseif self.currentTime>self.hideTime then
self.isFly=false
self.currentTime=0
self:OnDestroy()
else
self.flyObj.gameObject.transform.position =self.flyObj.gameObject.transform.position + (self.flySpeed+self.gravity)*Time.deltaTime
end
end
end
function M:OnDestroy()
if self.flyObj~=nil then
UnityEngine.GameObject.Destroy(self.flyObj.gameObject)
end
UpdateBeat:Remove(self.OnFlyCoinUpdate,self)
end
return M