public virtual void ClearData() { effectConfig = null; effectID = 0; ResHandleInstance = null; }
private void DeleteResourceHandleAsync(ref LightingEffectResHandleInstance instance, System.Action <LightingEffectResHandleInstance> callBack) { if (null == instance) { return; } int effectID = instance.EffectID; LightingEffectResHandle node = AllocResourcesHandle(effectID); node.CacheInstance(instance, EffectCacheRoot.transform, CachePos); int refCount = node.Release(); if (refCount <= 0) { //移除回调 RemoveAllCallBack(effectID); //看看是否加载完成 if (m_LightEffectHandleTable.Contains(effectID)) { m_LightEffectHandleTable.Remove(effectID); } PushToCache(node); //else //{ // //没有加载完成的直接卸载了 // UnLoadResourceHandle(node); //} } else { RemoveCallBack(effectID, callBack); } }
/// <summary> /// 是否是空的,注意一下,有的用的是替换动画,有的用的是EffectNode /// </summary> /// <param name="instance"></param> /// <returns></returns> public static bool isNullOrEmpry(LightingEffectResHandleInstance instance) { if (null == instance) { return(true); } return(!instance.Valid); }
public virtual void ApplyPlayDataToResHandler() { if (LightingEffectResHandleInstance.isNullOrEmpry(ResourceHandle)) { return; } ResHandleInstance.ApplyPlayData(ResHandlePlayData); }
public virtual void FillData(LightingEffect effectConfig, LightEffectParam param, LightingEffectResHandleInstance instance, Transform transformAgent) { this.effectConfig = effectConfig; effectID = effectConfig.nID; this.effectParam = param; this.ResHandleInstance = instance; this.behaviorTransformAgent = transformAgent; ResHandlePlayData.Clear(); }
public static void BuildInstance(LightingEffectResHandle node, ref LightingEffectResHandleInstance instance) { if (null == instance) { instance = new LightingEffectResHandleInstance(); } instance.m_EffectID = node.EffectID; instance.m_effectConfig = node.effectConfig; return; }
private void PushCallBack(int effectID, LightingEffectResHandleInstance data, System.Action <LightingEffectResHandleInstance> callBack) { EffectFactoryNodeAsyncLoadingObj obj = AllocAsyncLoadingObj(effectID); obj.CallBackList.Add(callBack); obj.dataList.Add(data); if (!m_AsyncLoadingEffectResHandle.Contains(effectID)) { m_AsyncLoadingEffectResHandle.Add(effectID); } }
public void InvActiveCacheRendering(Vector3 pos) { if (!isValid) { return; } foreach (LightingEffectResHandleInstance instance in AllInstanceNode) { if (!LightingEffectResHandleInstance.isNullOrEmpry(instance)) { instance.InvActiveCacheRendering(pos); } } }
void DestroyBehavior(ref LightingEffectBehavior instance) { if (!isValid) { return; } RemoveFromEntityEffectTable(instance); LightingEffectResHandleInstance temp = instance.ResourceHandle; DeleteResourceHandleAsync(ref temp, instance.OnResourcesLoadFinish); DeleteBehaviorTransformAgent(instance.TransformAgent); instance.ClearData(); instance.ResetAllMembers(); instance.SetInvalid(); instance = null; }
/// <summary> /// 返回值是一个标示,必须在回调函数中判断是否有效 /// </summary> /// <param name="effectID"></param> /// <param name="param"></param> /// <param name="callBack"></param> /// <returns></returns> private LightingEffectResHandleInstance GetResourceHandleAsync(int effectID, System.Action <LightingEffectResHandleInstance> callBack) { LightingEffectResHandleInstance Reslut = null; LightingEffectResHandle node = GetFromCache(effectID); if (null != node) { Reslut = node.Instantiate(); } else { node = AllocResourcesHandle(effectID); Reslut = node.Instantiate(); } node.AddRef(); PushCallBack(effectID, Reslut, callBack); return(Reslut); }
public void OnLoadFinish(Transform CacheParent, ResNode effectPrefabRes) { AssetBundleManager.SaveMemory(effectPrefabRes); prefabResNode = effectPrefabRes; stage = loadingStage.Stage_Finish; Init(CacheParent); foreach (LightingEffectResHandleInstance instance in m_AllInstanceNode) { LightingEffectResHandleInstance.FillInstance(currCahceTransform, this, instance); if (instance.isCached) { Quaternion qtn = Quaternion.identity; if (prefabResNode != null) { qtn = prefabResNode.GetResRotation(); } instance.OnCache(currCahceTransform, currCachePos, qtn); } } }
public void CacheInstance(LightingEffectResHandleInstance instance, Transform cacheParent, Vector3 cachePos) { if (null == instance) { return; } if (instance.isCached) { return; } currCahceTransform = cacheParent; currCachePos = cachePos; Quaternion qtn = Quaternion.identity; if (prefabResNode != null) { qtn = prefabResNode.GetResRotation(); } instance.OnCache(cacheParent, cachePos, qtn); m_CacheList.Enqueue(instance); }
public static void FillInstance(Transform parent, LightingEffectResHandle node, LightingEffectResHandleInstance instance) { if (LightingEffectResHandle.isNullOrEmpry(node)) { return; } if (null == instance) { return; } if (instance.Valid) { return; } instance.m_EffectID = node.EffectID; instance.m_effectConfig = node.effectConfig; instance.m_effectPrefab = node.prefabResNode.InstanceMainRes(); instance.m_AttackGroup = instance.m_effectPrefab.GetComponent <AttackCollisionGroup>(); instance.m_effect_ReplaceAnimation = instance.m_effectPrefab.GetComponent <Effect_ReplaceAnimation>(); instance.m_effect_CameraAnimation = instance.m_effectPrefab.GetComponent <Effect_CameraAnimation>(); instance.m_effectNode = instance.m_effectPrefab.GetComponent <EffectNode>(); if (instance.m_effectNode) { instance.m_effectNode.isStaticEffect = false; instance.m_effectNode.PlayOnAwake = false; instance.m_effectNode.Init(); instance.m_effectNode.StopEffect(); } instance.m_effectPrefabTransform = instance.m_effectPrefab.transform; instance.m_effectPrefabTransform.SetParent(parent); instance.m_effectPrefabTransform.position = Vector3.one * 999.0f; instance.m_effectPrefab.name = node.prefabResNode.AssetName + "(effect" + node.EffectID + ")"; }
public LightingEffectResHandleInstance Instantiate() { LightingEffectResHandleInstance instance = null; if (m_CacheList.Count > 0) { instance = m_CacheList.Dequeue(); //先看看是不是加载完成了。加载完成之后,再看看是否有效 if (stage == loadingStage.Stage_Finish) { if (isValid) { if (!instance.Valid) { instance.Clear(); LightingEffectResHandleInstance.FillInstance(currCahceTransform, this, instance); } } } } else { LightingEffectResHandleInstance.BuildInstance(this, ref instance); m_AllInstanceNode.Add(instance); //先看看是不是加载完成了。加载完成之后,再看看是否有效 if (stage == loadingStage.Stage_Finish) { if (isValid) { LightingEffectResHandleInstance.FillInstance(currCahceTransform, this, instance); } } } instance.isCached = false; return(instance); }
private bool PreWarmEffect(int nID, int PreWarmCount) { if (m_allBehaviorTable.ContainsKey(nID)) { //Debug.LogWarning("光效已经加载,不需要缓存,ID:" + nID); return(false); } LightingEffect config = ASpeedGame.Data.Scheme.SchemeLightingEffect.Instance.GetLightingEffect(nID); if (!config) { Debug.LogWarning("光效加载失败,找不到配置,ID:" + nID); return(false); } LightingEffectResHandle handle = AllocResourcesHandle(nID); Queue <LightingEffectBehavior> list = null; if (!m_behaviorCacheTable.TryGetValue(nID, out list)) { list = new Queue <LightingEffectBehavior>(); m_behaviorCacheTable.Add(nID, list); } for (int i = 0; i < PreWarmCount; i++) { LightingEffectBehavior reslut = CreateNewBehavior(nID, config.GetEffectType()); LightingEffectResHandleInstance instance = GetResourceHandleAsync(nID, reslut.OnResourcesLoadFinish); handle.CacheInstance(instance, EffectCacheRoot.transform, CachePos); handle.Release();//缓存不需要保留引用 reslut.FillData(config, null, instance, null); list.Enqueue(reslut); } return(true); }
public virtual void OnResourcesLoadFinish(LightingEffectResHandleInstance resHandle) { }
public override void FillData(LightingEffect effectConfig, LightEffectParam param, LightingEffectResHandleInstance instance, Transform transformAgent) { base.FillData(effectConfig, param, instance, transformAgent); this.wardConfig = effectConfig as LightingEffect_Ward; if (!wardConfig && effectConfig) { Debug.LogWarning(effectConfig.nID + "配置不匹配,创建光效失败---" + GetType().ToString()); } }
public override void OnResourcesLoadFinish(LightingEffectResHandleInstance resHandle) { startEffect(); }
private void ApplyResHandle() { if (!bStartEffect) { return; } if (LightingEffectResHandleInstance.isNullOrEmpry(ResHandleInstance)) { needClose = true; return; } if (!ResHandleInstance.CameraAnimation) { needClose = true; return; } if (cameraConfig.attackType == EffectAttackType.Source) { if (EffectParam.nSrcEntityID != EntityFactory.MainHeroID) { needClose = true; return; } } else if (cameraConfig.attackType == EffectAttackType.Target) { if (EffectParam.nTargetEntityID != EntityFactory.MainHeroID) { needClose = true; return; } } else if (cameraConfig.attackType == EffectAttackType.SourceAndTarget) { if (EffectParam.nSrcEntityID != EntityFactory.MainHeroID && EffectParam.nTargetEntityID != EntityFactory.MainHeroID) { needClose = true; return; } } uint tick = GameLogicAPI.getTickCount(); m_camera = SoldierCamera.MainInstance <SoldierCamera>(); if (!m_camera) { needClose = true; return; } if (ResHandleInstance.CameraAnimation.animationClip) { Transform sourceTransform = null; if (EffectParam.srcObject) { sourceTransform = EffectParam.srcObject.transform; } CamAnimStateParam param = new CamAnimStateParam(ResHandleInstance.CameraAnimation.animationClip, cameraConfig.animationOrgPos, cameraConfig.animationOrgProjectFloor, EffectParam.targetPos, sourceTransform, cameraConfig.animationMainCamera); m_camera.EnableMode(CameraMode.CameraAnim, true, param); return; } m_camera.playEffect(cameraConfig.delayTick, cameraConfig.effectLiveTick, ResHandleInstance.CameraAnimation.cameraAxis, cameraConfig.recoverTransform); }