Beispiel #1
0
    private static void ParseEffectParam(ref EffectParam param, SecurityElement element)
    {
        if (param == null || element == null || element.Tag != "Param")
        {
            return;
        }
        if (param.type == typeof(FollowEffectEntity))
        {
            var move = param as FollowEffectParam;
            move.speed = element.Attribute("speed").ToFloatEx();

            move.offsetTo = element.Attribute("offsetTo").ToVector3Ex();
        }
        else if (param.type == typeof(TimeEffectEntity))
        {
            var time = param as TimeEffectParam;
            time.duration  = element.Attribute("duration").ToFloatEx();
            time.triggerAt = element.Attribute("triggerAt").ToFloatEx();
        }
        else if (param.type == typeof(HitEffectEntity))
        {
            var hit = param as HitEffectParam;
            hit.duration  = element.Attribute("duration").ToFloatEx();
            hit.triggerAt = element.Attribute("triggerAt").ToFloatEx();
            hit.hitColor  = element.Attribute("color").ToColorEx();
        }
    }
Beispiel #2
0
    public override void Init(HeroAction _skill, EffectParam _data, HeroEntity _parentTarget)
    {
        base.Init(_skill, _data, _parentTarget);
        FollowEffectParam move = param as FollowEffectParam;

        mSpeed = move.speed;

        mOffsetTo = move.offsetTo;
        OnBegin();
    }
Beispiel #3
0
    public override void Init(HeroAction _skill, EffectParam _data, HeroEntity _parentTarget)
    {
        base.Init(_skill, _data, _parentTarget);

        if (parentTarget != null)
        {
            mRenderer = parentTarget.gameObject.GetComponentInChildren <MeshRenderer>();
            if (mRenderer != null)
            {
                mOldColor = mRenderer.material.color;
                mRenderer.material.color = (param as HitEffectParam).hitColor;
            }
        }
    }
    public override void Init(HeroAction _skill, EffectParam _data, HeroEntity _parentTarget)
    {
        base.Init(_skill, _data, _parentTarget);
        var t = param as TimeEffectParam;

        mEffectTime = t.duration;
        mDuration   = t.duration;
        if (t.triggerAt > 0)
        {
            mTriggerAt = t.triggerAt;
        }

        if (mEffectTime <= 0)
        {
            mEffectTime = 0.1f;
        }
    }
Beispiel #5
0
    public virtual void Init(HeroAction _action, EffectParam _data, HeroEntity _parentTarget)
    {
        action       = _action;
        param        = _data;
        parentTarget = _parentTarget;

        if (param.effectOn == EffectOn.Custom)
        {
        }
        else
        {
            GameObject go = action.entity.gameObject;
            if (param.effectOn == EffectOn.Self)
            {
                go = action.entity.gameObject;
            }
            else if (param.effectOn == EffectOn.Target)
            {
                if (parentTarget != null)
                {
                    go = parentTarget.gameObject;
                }
            }
            if (go)
            {
                Vector3 position = go.transform.position;
                position   += go.transform.forward * param.offset.z;
                position   += go.transform.right * param.offset.x;
                position.y += param.offset.y;

                gameObject.transform.position = position;
                gameObject.transform.rotation = Quaternion.LookRotation(go.transform.forward);

                string assetBundleName = string.Format("assets/assetBundle/{0}.prefab", param.assetBundleName);
                string assetName       = string.Format("assets/assetBundle/{0}.prefab", param.assetName);


                LoadAsset(assetBundleName, assetName);
            }
            else
            {
                OnEnd();
            }
        }
    }
Beispiel #6
0
 public void playEffect(string strProjectile, EffectParam pEffectParam)
 {
     GameObject goEffect = GameObject.Instantiate(Resources.Load("Prefabs/" + strProjectile)) as GameObject;
     if (null != goEffect)
     {
         EffectController ec = goEffect.GetComponent<EffectController>();
         if (null != ec)
         {
             ec.fStartX = pEffectParam.vec2Begin.x;
             ec.fStartY = pEffectParam.vec2Begin.y;
             ec.fAimX   = pEffectParam.vec2End.x;
             ec.fAimY   = pEffectParam.vec2End.y;
             ec.fTime   = pEffectParam.fTimes;
             ec.fDelay  = pEffectParam.fDelay;
             ec.fRotation = pEffectParam.fRotation;
             ec.enabled = true;
         }
     }
 }
Beispiel #7
0
    private void createProjectile(float fRemainTime)
    {
        // 创建飞行特效
        string strProjectile = m_pHost.getProjectileName();
        EffectParam pEffectParam = new EffectParam();
        pEffectParam.vec2Begin = m_pHost.getPosition();
        pEffectParam.vec2End   = m_pTarget.getPosition();
        // 延迟
        pEffectParam.fDelay = 0.0f;
        // 飞行时间
        pEffectParam.fTimes = fRemainTime;

        if (CAMP_TYPE.eATTACKER == m_pHost.TOY_CAMP) {
            pEffectParam.fRotation = 180.0f;
        } else if (CAMP_TYPE.eDEFENSE == m_pHost.TOY_CAMP) {
            pEffectParam.fRotation = 0.0f;
        }

        EffectManager.Instance().playEffect(strProjectile, pEffectParam);
    }
Beispiel #8
0
    private static void ParseEffect(ref List <EffectParam> effects, SecurityElement element)
    {
        if (element == null || element.Tag != "Effect")
        {
            return;
        }

        EffectParam effect = (EffectParam)Activator.CreateInstance(Type.GetType(element.Attribute("param")));

        effect.type            = Type.GetType(element.Attribute("type"));
        effect.assetBundleName = element.Attribute("bundleName");
        effect.assetName       = element.Attribute("assetName");
        effect.effectArise     = element.Attribute("effectArise").ToEnumEx <EffectArise>();
        effect.effectOn        = element.Attribute("effectOn").ToEnumEx <EffectOn>();
        effect.offset          = element.Attribute("offset").ToVector3Ex();
        effects.Add(effect);

        if (element.Children != null)
        {
            for (int i = 0; i < element.Children.Count; ++i)
            {
                var child = element.Children[i] as SecurityElement;
                if (child.Tag == "Effect")
                {
                    if (effect.effects == null)
                    {
                        effect.effects = new List <EffectParam>();
                    }
                    ParseEffect(ref effect.effects, child);
                }
                else if (child.Tag == "Param")
                {
                    ParseEffectParam(ref effect, child);
                }
            }
        }
    }
Beispiel #9
0
    private bool createEffect()
    {
        LightEffectParam newParam = new LightEffectParam();

        EffectParam.ColoneTo(ref newParam);

        float maxDistance = EffectParam.fDistance;
        float effectRad   = EffectParam.fAttackRange;

        Vector3 newSourcePos = newParam.srcObject.transform.position;

        if (sourceTransform != null)
        {
            newSourcePos = sourceTransform.position;
        }


        Vector3 areaTargetPos = EffectParam.targetPos;
        Vector3 newTargetPos  = areaTargetPos;

        //构造一个范围内的随机目标位置
        if (areaConfig.projectOnGround == true)
        {  //构造一个投影到地面的圆形
            int     angle  = Random.Range(0, 360);
            float   _rad   = angle * Mathf.PI / 180.0f;
            Vector3 offset = new Vector3(Mathf.Sin(_rad), 0, Mathf.Cos(_rad));
            float   dis    = Random.Range(0.0f, effectRad);
            offset       *= dis;
            newTargetPos += offset;

            RaycastHit _ClosestHitInfo_Down;
            RaycastHit _ClosestHitInfo_Up;
            float      rayDistance          = maxDistance;
            Ray        PointToGroundRayDown = new Ray(newTargetPos, new Vector3(0, -1, 0));
            Ray        PointToGroundRayUp   = new Ray(newTargetPos, new Vector3(0, 1, 0));
            bool       DownHit     = Physics.Raycast(PointToGroundRayDown, out _ClosestHitInfo_Down, rayDistance, -1);
            bool       UpHit       = Physics.Raycast(PointToGroundRayUp, out _ClosestHitInfo_Up, rayDistance, -1);
            Vector3    recordPos   = newTargetPos;
            float      hitDistance = maxDistance;
            if (DownHit)
            {
                hitDistance  = (_ClosestHitInfo_Down.point - recordPos).magnitude;
                newTargetPos = _ClosestHitInfo_Down.point;
            }

            if (UpHit)
            {
                if ((_ClosestHitInfo_Up.point - recordPos).magnitude < hitDistance)
                {
                    hitDistance  = (_ClosestHitInfo_Up.point - recordPos).magnitude;
                    newTargetPos = _ClosestHitInfo_Up.point;
                }
            }

            newParam.targetPos = newTargetPos;
        }
        else if (effectRad > 0.01f)
        { //构造一个圆锥
            Vector3 normal  = EffectParam.targetPos - newSourcePos;
            Vector3 tangent = new Vector3(0, 0, 1);
            Vector3.OrthoNormalize(ref normal, ref tangent);
            int        angle    = Random.Range(0, 360);
            Quaternion rotation = Quaternion.AngleAxis((float)angle, normal);
            tangent = rotation * tangent;
            float dis = Random.Range(0.0f, effectRad);
            tangent      *= dis;
            newTargetPos += tangent;
            if (areaConfig.extentToMaxDistance)
            {//将目标点拉远,延长用更容易造成与地面的碰撞
                Vector3 dir = newTargetPos - newSourcePos;
                dir.Normalize();
                newTargetPos = newSourcePos + dir * maxDistance;
            }
            newParam.targetPos = newTargetPos;
        }
        else
        {
            if (areaConfig.extentToMaxDistance)
            {//将目标点拉远,延长用更容易造成与地面的碰撞
                Vector3 dir = newTargetPos - newSourcePos;
                dir.Normalize();
                newTargetPos = newSourcePos + dir * maxDistance;
            }
            newParam.targetObject = EffectParam.targetObject;
            newParam.targetPos    = EffectParam.targetPos;
        }

        if (areaConfig.customOffset.sqrMagnitude > 0.001f)
        {
            //有此设置时,变更起始点,变为相对于newParam.targetPos,偏移customOffet
            Vector3 offsetNormal = EffectParam.targetPos - newSourcePos;
            offsetNormal.y = 0;
            offsetNormal.Normalize();
            Vector3 offsetTangent  = new Vector3(0, 1, 0);
            Vector3 offsetBinormal = Vector3.Cross(offsetTangent, offsetNormal);
            //Vector3.OrthoNormalize(ref offsetNormal, ref offsetTangent,ref offsetBinormal);
            Vector3 offSet = newParam.targetPos;
            offSet               += offsetNormal * areaConfig.customOffset.z;
            offSet               += offsetTangent * areaConfig.customOffset.y;
            offSet               += offsetBinormal * areaConfig.customOffset.x;
            newParam.sourcePos    = offSet;
            newParam.nEffectFlag |= (int)LightEffectParam.EFFECT_FLAG.CustomSourcePos;
        }

        LightingEffectManager leManager = EffectParam.srcObject.GetComponent <LightingEffectManager>();

        if (leManager != null)
        {
            ////测试用代码,用来标记检测发射区域是否正确
            //GameObject checkPoint = GameObject.CreatePrimitive(PrimitiveType.Sphere);
            //checkPoint.transform.localScale = new Vector3(0.2f, 0.2f, 0.2f);
            //checkPoint.transform.SetPosition( newParam.targetPos;
            //checkPoint.collider.enabled = false;
            //checkPoint.name = "Point" + mEffectLeftCount.ToString();

            leManager.AddLighting(areaConfig.subEffectID, newParam);
        }

        return(true);
    }