示例#1
0
    public override void FixedUpdate(int deltaTime)
    {
        List <EntityBase> list = GetEntityList();

        for (int i = 0; i < list.Count; i++)
        {
            CommandComponent     cc  = (CommandComponent)list[i].GetComp("CommandComponent");
            SkillStatusComponent ssc = (SkillStatusComponent)list[i].GetComp("SkillStatusComponent");
            PlayerComponent      pc  = (PlayerComponent)list[i].GetComp("PlayerComponent");
            MoveComponent        mc  = (MoveComponent)list[i].GetComp("MoveComponent");
            LifeComponent        lc  = (LifeComponent)list[i].GetComp("LifeComponent");

            //CD
            for (int j = 0; j < ssc.m_skillList.Count; j++)
            {
                ssc.m_CDList[j] -= deltaTime;
            }

            if (ssc.skillDirCache.ToVector() != Vector3.zero &&
                cc.isFire &&
                !pc.GetIsDizziness() &&
                lc.Life > 0 &&
                cc.skillDir.ToVector() == Vector3.zero
                )
            {
                string    skillID = SkillUtils.GetSkillName(cc);
                SkillData data    = ssc.GetSkillData(skillID);

                if (ssc.GetSkillCDFinsih(skillID))
                {
                    //Debug.Log("FIRE!!! --> " + skillID);
                    ssc.m_skillTime        = 0;
                    ssc.m_skillStstus      = SkillStatusEnum.Before;
                    ssc.m_isTriggerSkill   = false;
                    ssc.m_currentSkillData = data;
                    ssc.m_currentSkillData.UpdateInfo();

                    ssc.SetSkillCD(skillID, data.CDSpace);

                    ssc.skillDir = ssc.skillDirCache.DeepCopy();
                    AreaDataGenerate areaData = DataGenerateManager <AreaDataGenerate> .GetData(ssc.m_currentSkillData.SkillInfo.m_EffectArea);

                    float distance = ssc.skillDir.ToVector().magnitude;
                    distance = areaData.m_SkewDistance + Mathf.Clamp(distance, 0, areaData.m_distance);

                    Vector3 aimPos = mc.pos.ToVector() + ssc.skillDir.ToVector().normalized *distance;
                    if (areaData.m_Shape != AreaType.Rectangle)
                    {
                        ssc.skillPos.FromVector(aimPos);
                    }
                    else
                    {
                        ssc.skillPos.FromVector(mc.pos.ToVector() + ssc.skillDir.ToVector().normalized *(areaData.m_SkewDistance - areaData.m_Length / 2));
                    }
                }
            }

            ssc.skillDirCache = cc.skillDir.DeepCopy();
        }
    }
    public static Vector3 GetAreaDir(Area area, AreaDataGenerate areaData, EntityBase skiller, EntityBase aim = null)
    {
        MoveComponent   smc = skiller.GetComp <MoveComponent>();
        PlayerComponent pc  = skiller.GetComp <PlayerComponent>();

        Vector3 l_dir = Vector3.zero;

        if (aim == null)
        {
            switch (areaData.m_SkewDirection)
            {
            case DirectionEnum.Forward:
                l_dir = pc.faceDir.ToVector();
                break;

            case DirectionEnum.Backward:
                l_dir = pc.faceDir.ToVector() * -1;
                break;

            case DirectionEnum.Close:
                Debug.LogError("没有aim,不能使用" + areaData.m_SkewDirection + "方向,修正为forward");
                l_dir = pc.faceDir.ToVector();
                break;

            case DirectionEnum.Leave:
                Debug.LogError("没有aim,不能使用" + areaData.m_SkewDirection + "方向,修正为Backward");
                l_dir = pc.faceDir.ToVector() * -1; break;

            default:
                Debug.LogError("没有aim,不能使用" + areaData.m_SkewDirection + "方向");
                break;
            }
        }

        if (aim != null)
        {
            MoveComponent amc = aim.GetComp <MoveComponent>();

            switch (areaData.m_SkewDirection)
            {
            case DirectionEnum.Forward: l_dir = pc.faceDir.ToVector(); break;

            case DirectionEnum.Backward: l_dir = pc.faceDir.ToVector() * -1; break;

            case DirectionEnum.Leave: l_dir = amc.pos.ToVector() - smc.pos.ToVector(); break;

            case DirectionEnum.Close: l_dir = smc.pos.ToVector() - amc.pos.ToVector(); break;
            }
        }
        return(l_dir);
    }
    public static void UpdateArea(Area area, string areaID, EntityBase skiller, EntityBase aim = null)
    {
        MoveComponent smc = skiller.GetComp <MoveComponent>();

        AreaDataGenerate areaData = DataGenerateManager <AreaDataGenerate> .GetData(areaID);

        Vector3 dir = GetAreaDir(area, areaData, skiller, aim);

        area.areaType = areaData.m_Shape;
        area.length   = areaData.m_Length;
        area.Width    = areaData.m_Width;
        area.angle    = areaData.m_Angle;
        area.radius   = areaData.m_Radius;

        area.direction = dir.normalized;
        area.position  = smc.pos.ToVector() + area.direction * areaData.m_SkewDistance;

        //Debug.Log( "skiller forward"+skiller.transform.forward);
    }
示例#4
0
    public void SetMesh(EntityBase entity, string areaID, bool isEnemy, string textureID)
    {
        MoveComponent mc = entity.GetComp <MoveComponent>();

        AreaDataGenerate areaData = DataGenerateManager <AreaDataGenerate> .GetData(areaID);

        Area    Area    = new Area();
        Vector3 AreaDir = SkillUtils.GetAreaDir(Area, areaData, entity, null);

        //Debug.Log("areaData.m_SkewDistance " + areaData.m_SkewDistance);

        Vector3 pos = mc.pos.ToVector();

        pos.y += 0.1f;
        transform.position = pos + AreaDir * areaData.m_SkewDistance;

        if (areaData.m_Shape == AreaType.Rectangle)
        {
            transform.position = pos + AreaDir * areaData.m_SkewDistance - AreaDir * areaData.m_Length / 2;
        }

        transform.right = AreaDir.normalized; //轴向不同,RangeTip 的前方为x轴,而player的为Z轴

        shapeType   = areaData.m_Shape;
        radius      = areaData.m_Radius;
        angleDegree = areaData.m_Angle;
        segments    = 40;
        high        = (int)Math.Ceiling(areaData.m_Length);
        width       = (int)Math.Ceiling(areaData.m_Width);

        isMonster = isEnemy;
        side      = 0.5f;

        SetTexture(textureID);

        creator.verticesTmp  = null;
        creator.uvsTmp       = null;
        creator.trianglesTmp = null;
    }
    List <CreatPostionInfo> GetCreatePostionInfos(SkillDataGenerate skillData, EntityBase skiller, int Length)
    {
        MoveComponent   mc = skiller.GetComp <MoveComponent>();
        PlayerComponent pc = skiller.GetComp <PlayerComponent>();

        List <CreatPostionInfo> result = new List <CreatPostionInfo>();

        result.Clear();

        if (Length == 0)
        {
            return(result);
        }

        HardPointEnum l_FXCreatPoint = skillData.m_FlyCreatPoint;

        Vector3 forward = pc.faceDir.ToVector();
        Vector3 dir     = forward;
        Vector3 pos     = Vector3.zero;

        //获取散射区域
        Area skillArea = UpdatSkillArea(areaCache, skillData, skiller, null);

        //TODO 寻敌方法
        //CharacterBase enemy = GetRecentlyEnemy(skillArea, skiller.m_camp, false);
        //CharacterBase enemy = null;
        MoveComponent emc = null;

        if (l_FXCreatPoint != HardPointEnum.enemy)
        {
            pos = mc.pos.ToVector();
        }
        else
        {
            if (emc == null)
            {
                return(result);
            }
            else
            {
                pos = emc.pos.ToVector();
            }
        }

        Vector3 leftBorder    = Vector3.zero;
        Vector3 leftDir       = Vector3.zero;
        Vector3 leftPos       = Vector3.zero;
        float   sectorStep    = 0;
        float   rectangleStep = 0;

        AreaDataGenerate area = DataGenerateManager <AreaDataGenerate> .GetData(skillData.m_FlyObjectArea);

        switch (area.m_SkewDirection)
        {
        case DirectionEnum.Forward: break;

        case DirectionEnum.Backward: forward *= -1; break;

        case DirectionEnum.Close: forward = (emc.pos.ToVector() - mc.pos.ToVector()).normalized; break;

        case DirectionEnum.Leave: forward = (mc.pos.ToVector() - emc.pos.ToVector()).normalized; break;
        }

        switch (area.m_Shape)
        {
        case AreaType.Circle:
            leftBorder = forward.Vector3RotateInXZ(360 * 0.5f);
            sectorStep = 360 / (Length + 1);
            break;

        case AreaType.Sector:
            leftBorder = forward.Vector3RotateInXZ(area.m_Angle * 0.5f);
            sectorStep = area.m_Angle / (Length + 1);
            break;

        case AreaType.Rectangle:
            leftDir       = forward.Vector3RotateInXZ(90);
            leftPos       = pos + leftDir * area.m_Width * 0.5f;
            rectangleStep = area.m_Width / (Length + 1);
            break;
        }

        for (int i = 0; i < Length; i++)
        {
            switch (area.m_Shape)
            {
            case AreaType.Circle:
            case AreaType.Sector:
                dir = leftBorder.Vector3RotateInXZ2((i + 1) * sectorStep);
                pos = pos + forward * area.m_SkewDistance;
                break;

            case AreaType.Rectangle:
                pos = leftPos - leftDir * rectangleStep * (i + 1);
                break;
            }


            CreatPostionInfo cpi = new CreatPostionInfo();
            cpi.m_pos = pos;
            cpi.m_dir = dir;

            result.Add(cpi);
        }

        return(result);
    }
示例#6
0
    List <CreatPostionInfo> GetCreatePostionInfos(SkillDataGenerate skillData, EntityBase skiller, int Length)
    {
        MoveComponent        mc  = skiller.GetComp <MoveComponent>();
        SkillStatusComponent ssc = skiller.GetComp <SkillStatusComponent>();

        List <CreatPostionInfo> result = new List <CreatPostionInfo>();

        //result.Clear();

        if (Length == 0)
        {
            return(result);
        }

        HardPointEnum l_FXCreatPoint = skillData.m_FlyCreatPoint;

        SyncVector3 forward = new SyncVector3().FromVector(ssc.skillDir.ToVector().normalized);
        SyncVector3 dir     = forward;
        SyncVector3 pos     = mc.pos;

        SyncVector3 leftBorder    = new SyncVector3();
        SyncVector3 leftDir       = new SyncVector3();
        SyncVector3 leftPos       = new SyncVector3();
        float       sectorStep    = 0;
        float       rectangleStep = 0;

        AreaDataGenerate area = DataGenerateManager <AreaDataGenerate> .GetData(skillData.m_FlyObjectArea);

        switch (area.m_SkewDirection)
        {
        case DirectionEnum.Forward: break;

        case DirectionEnum.Backward: forward *= -1; break;
            //case DirectionEnum.Close: forward = (emc.pos - mc.pos); break;
            //case DirectionEnum.Leave: forward = (mc.pos - emc.pos); break;
        }

        switch (area.m_Shape)
        {
        case AreaType.Circle:
            leftBorder = forward.RotateInXZ(360 * 0.5f);
            sectorStep = 360 / (Length + 1);
            break;

        case AreaType.Sector:
            leftBorder = forward.RotateInXZ(area.m_Angle * 0.5f);
            sectorStep = area.m_Angle / (Length + 1);
            pos        = pos + forward * area.m_SkewDistance;
            break;

        case AreaType.Rectangle:
            leftDir       = forward.RotateInXZ(90);
            leftPos       = pos + leftDir * area.m_Width * 0.5f;
            rectangleStep = area.m_Width / (Length + 1);

            break;
        }
        for (int i = 0; i < Length; i++)
        {
            switch (area.m_Shape)
            {
            case AreaType.Circle:
            case AreaType.Sector:
                dir = leftBorder.RotateInXZ2((i + 1) * sectorStep);

                break;

            case AreaType.Rectangle:
                pos = leftPos - leftDir * rectangleStep * (i + 1);
                break;
            }
            CreatPostionInfo cpi = new CreatPostionInfo();
            pos.y = 0;
            dir.y = 0;

            cpi.m_pos = pos;
            cpi.m_dir = dir;
            result.Add(cpi);

            //CreatPostionInfo cpi = new CreatPostionInfo();
            //cpi.m_pos = mc.pos.DeepCopy();
            //cpi.m_dir.FromVector( ssc.skillDir.DeepCopy().ToVector().normalized);

            //result.Add(cpi);
        }

        return(result);
    }