public virtual void ClearData()
    {
        effectConfig = null;

        effectID          = 0;
        ResHandleInstance = null;
    }
Exemple #2
0
    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;
 }
Exemple #7
0
    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);
        }
    }
Exemple #8
0
 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;
    }
Exemple #10
0
    /// <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);
    }
Exemple #11
0
 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);
         }
     }
 }
Exemple #12
0
    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 + ")";
    }
Exemple #14
0
    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();
 }
Exemple #19
0
    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);
    }