public override void FixedUpdate(int deltaTime)
    {
        List <EntityBase> list = GetEntityList();

        for (int i = 0; i < list.Count; i++)
        {
            CommandComponent     cc  = list[i].GetComp <CommandComponent>();
            CDComponent          cdc = list[i].GetComp <CDComponent>();
            SkillStatusComponent ssc = list[i].GetComp <SkillStatusComponent>();

            cdc.CD -= deltaTime;

            if (cc.skillDir.ToVector() != Vector3.zero &&
                cc.isFire &&
                cdc.CD <= 0)
            {
                cdc.CD = 2 * 1000;

                Debug.Log("FIRE!!!");

                //FIRE!!!
                string skillID = "2000";

                ssc.m_skillTime        = 0;
                ssc.m_isTriggerSkill   = false;
                ssc.m_skillStstus      = SkillStatusEnum.Before;
                ssc.m_currentSkillData = ssc.GetSkillData(skillID);
                ssc.m_currentSkillData.UpdateInfo();
            }
        }
    }
    void SkillLogic(EntityBase entity, int deltaTime)
    {
        SkillStatusComponent ssc = entity.GetComp <SkillStatusComponent>();
        MoveComponent        mc  = entity.GetComp <MoveComponent>();

        if (ssc.m_isHit)
        {
            SkillDataGenerate skillData = ssc.m_currentSkillData.SkillInfo;

            //TODO 技能代处理


            //获取伤害列表
            List <EntityBase> damageList = GetSkillDamageList(entity, skillData);
            //创建飞行物
            CreateFlyObject(skillData, entity);

            for (int i = 0; i < damageList.Count; i++)
            {
                //伤害处理
                Damage(entity, damageList[i], skillData);

                //击飞处理
                BlowFly(entity, damageList[i], skillData);

                //伤害Buff处理
                DamageBuff(entity, damageList[i], skillData);
            }

            //TODO 恢复
        }
    }
    List <EntityBase> GetSkillDamageList(EntityBase entity, SkillDataGenerate skillData)
    {
        CampComponent        acc = entity.GetComp <CampComponent>();
        SkillStatusComponent ssc = entity.GetComp <SkillStatusComponent>();

        List <EntityBase> result = new List <EntityBase>();
        List <EntityBase> list   = GetEntityList(new string[] { "CollisionComponent", "LifeComponent", "CampComponent" });

        SkillUtils.UpdateArea(skillAreaCache, skillData.m_EffectArea, ssc.skillDir.ToVector(), entity);

        Debug.DrawRay(skillAreaCache.position, skillAreaCache.direction, Color.red, 10);

        for (int i = 0; i < list.Count; i++)
        {
            CollisionComponent bcc    = list[i].GetComp <CollisionComponent>();
            CampComponent      bcampc = list[i].GetComp <CampComponent>();
            LifeComponent      lc     = list[i].GetComp <LifeComponent>();

            //Debug.Log("bcampc.creater " + bcampc.creater + " AreaCollideSucceed -->" + skillAreaCache.AreaCollideSucceed(bcc.area));

            if (acc.creater != bcampc.creater &&
                skillAreaCache.AreaCollideSucceed(bcc.area) &&
                lc.Life > 0)
            {
                result.Add(list[i]);
            }
        }

        return(result);
    }
    public static void BlowFly(WorldBase world, EntityBase skiller, EntityBase hurter, string blowFlyID)
    {
        MoveComponent amc = skiller.GetComp <MoveComponent>();
        MoveComponent bmc = hurter.GetComp <MoveComponent>();

        Vector3 dir = amc.dir.ToVector();

        if (skiller.GetExistComp <SkillStatusComponent>())
        {
            SkillStatusComponent assc = skiller.GetComp <SkillStatusComponent>();
            dir = assc.skillDir.ToVector();
        }

        //Debug.Log("BlowFly --> skill id " + skillData.m_key + "  blowfly id " + blowFlyID + " skilltoken pos " + amc.pos.ToVector() + " ");

        if (blowFlyID != "null")
        {
            //Debug.Log("BlowFly " + hurter.ID + " skillID " + skillData.m_key);

            //击飞处理
            if (hurter.GetExistComp <BlowFlyComponent>())
            {
                BlowFlyComponent bfc = hurter.GetComp <BlowFlyComponent>();
                if (!bfc.isBlow)
                {
                    bfc.isBlow    = true;
                    bfc.blowFlyID = blowFlyID;
                    bfc.blowTime  = (int)(bfc.BlowData.m_Time * 1000);
                    bfc.SetBlowFly(amc.pos.ToVector(), bmc.pos.ToVector(), dir);
                }
            }
        }
    }
Beispiel #5
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();
        }
    }
Beispiel #6
0
    public void UpperAnim(EntityBase entity, AnimComponent ac)
    {
        SkillStatusComponent sc = entity.GetComp <SkillStatusComponent>();

        if (sc.m_skillStstus != SkillStatusEnum.Finish &&
            sc.m_skillStstus != SkillStatusEnum.None)
        {
            string attackAnimName = "null";

            switch (sc.m_skillStstus)
            {
            case SkillStatusEnum.Before:
                attackAnimName = sc.m_currentSkillData.BeforeInfo.m_AnimName;
                break;

            case SkillStatusEnum.Current:
                attackAnimName = sc.m_currentSkillData.CurrentInfo.m_AnimName;
                break;

            case SkillStatusEnum.Later:
                attackAnimName = sc.m_currentSkillData.LaterInfo.m_AnimName;
                break;
            }
            if (attackAnimName != "null")
            {
                //TODO 将来可能对动画做追赶
                ac.anim.Play(attackAnimName, 1);
            }
            else
            {
                ac.anim.Play("empty", 1);
            }
        }
    }
Beispiel #7
0
    public override MomentComponentBase DeepCopy()
    {
        SkillStatusComponent sc = new SkillStatusComponent();

        sc.m_skillStstus = m_skillStstus;

        sc.m_skillTime             = m_skillTime;
        sc.m_skillTriggerTimeSpace = m_skillTriggerTimeSpace;

        sc.m_isHit          = m_isHit;
        sc.m_isEnter        = m_isEnter;
        sc.m_isTriggerSkill = m_isTriggerSkill;

        sc.skillDir = skillDir.DeepCopy();
        if (m_currentSkillData != null)
        {
            sc.m_currentSkillData = m_currentSkillData.DeepCopy();
        }

        for (int i = 0; i < m_skillList.Count; i++)
        {
            sc.m_skillList.Add(m_skillList[i].DeepCopy());
        }

        return(sc);
    }
Beispiel #8
0
 public void CreateSkillAreaTip(EntityBase entity, SkillStatusComponent status)
 {
     //if (RangeTip == null)
     //{
     //    GameObject tip = GameObjectManager.CreateGameObjectByPool("AreaTips");
     //    RangeTip = tip.GetComponent<CreatMesh>();
     //}
     //RangeTip.gameObject.SetActive(true);
     //RangeTip.SetMesh(entity, status.m_currentSkillData.SkillInfo.m_EffectArea, true, status.m_currentSkillData.SkillInfo.m_AreaTexture);
 }
    public static Vector3 GetAreaDir(Area area, AreaDataGenerate areaData, EntityBase skiller, EntityBase aim = null)
    {
        MoveComponent        smc = skiller.GetComp <MoveComponent>();
        SkillStatusComponent ssc = skiller.GetComp <SkillStatusComponent>();

        Vector3 l_dir = Vector3.zero;

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

            case DirectionEnum.Backward:
                l_dir = ssc.skillDir.ToVector() * -1;
                break;

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

            case DirectionEnum.Leave:
                Debug.LogError("没有aim,不能使用" + areaData.m_SkewDirection + "方向,修正为Backward");
                l_dir = ssc.skillDir.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 = ssc.skillDir.ToVector(); break;

            case DirectionEnum.Backward: l_dir = ssc.skillDir.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);
    }
    void SkillLogic(EntityBase entity, int deltaTime)
    {
        SkillStatusComponent ssc = entity.GetComp <SkillStatusComponent>();
        MoveComponent        mc  = entity.GetComp <MoveComponent>();

        if (ssc.m_isHit)
        {
            SkillDataGenerate skillData = ssc.m_currentSkillData.m_skillInfo;
            Debug.Log("isHit");
            //获取伤害列表

            //创建飞行物
            CreateFlyObject(skillData, entity);
        }
    }
Beispiel #11
0
    void SkillBehaviorLogic(EntityBase entity, int deltaTime)
    {
        SkillBehaviorCompoent sbc = entity.GetComp <SkillBehaviorCompoent>();
        SkillStatusComponent  ssc = entity.GetComp <SkillStatusComponent>();

        if (ssc.m_skillStstus == SkillStatusEnum.Before ||
            ssc.m_skillStstus == SkillStatusEnum.Current ||
            ssc.m_skillStstus == SkillStatusEnum.Later)
        {
            sbc.FXTimer += deltaTime;

            if (!sbc.isTriggerFX && sbc.FXTimer > GetDelayTime(ssc))
            {
                sbc.isTriggerFX = true;
                CreatSkillEffect(entity, ssc);
            }
        }
    }
Beispiel #12
0
    //CreatMesh RangeTip;


    public void CreatSkillEffect(EntityBase entity, SkillStatusComponent skillComp)
    {
        SkillStatusDataGenerate skillStatusData = null;

        switch (skillComp.m_skillStstus)
        {
        case SkillStatusEnum.Before:
            skillStatusData = skillComp.m_currentSkillData.BeforeInfo;
            break;

        case SkillStatusEnum.Current:
            skillStatusData = skillComp.m_currentSkillData.CurrentInfo;
            break;

        case SkillStatusEnum.Later:
            skillStatusData = skillComp.m_currentSkillData.LaterInfo;
            break;
        }

        string        FXName       = skillStatusData.m_FXName;
        float         FXLifeTime   = skillStatusData.m_FXLifeTime;
        float         offset       = skillStatusData.m_FXOffSet;
        HardPointEnum FXCreatPoint = skillStatusData.m_FXCreatPoint;

        string        followFXName       = skillStatusData.m_FollowFXName;
        float         FLoffset           = skillStatusData.m_FollowFXOffSet;
        HardPointEnum followFXCreatPoint = skillStatusData.m_FollowFXCreatPoint;
        float         followFXLifeTime   = skillStatusData.m_FollowFXLifeTime;

        //Debug.Log("FXName " + FXName);
        //Debug.Log("followFXName " + followFXName);

        //现在不管特效填跟不跟随都跟随角色,并在技能被打断时退出
        if (FXName != "null")
        {
            //恢复不follow
            CreateEffect(entity, FXName, FXCreatPoint, FXLifeTime, offset);
        }

        if (followFXName != "null")
        {
            CreateFollowSkillEffect(entity, followFXName, followFXCreatPoint, followFXLifeTime);
        }
    }
Beispiel #13
0
    void SkillLogic(EntityBase entity, int deltaTime)
    {
        SkillStatusComponent ssc = entity.GetComp <SkillStatusComponent>();
        MoveComponent        mc  = entity.GetComp <MoveComponent>();
        CampComponent        cc  = entity.GetComp <CampComponent>();

        if (ssc.m_isHit)
        {
            SkillDataGenerate skillData = ssc.m_currentSkillData.SkillInfo;

            //技能代处理
            SkillUtils.TokenUseSkill(m_world, entity.ID, skillData.m_SkillAgency, mc.pos.ToVector(), ssc.skillDir.ToVector());

            //获取伤害列表
            List <EntityBase> damageList = GetSkillDamageList(entity, skillData);

            //Debug.Log("damageList " + damageList.Count);

            //创建飞行物
            CreateFlyObject(skillData, entity);

            //自身buff
            SkillUtils.AddBuff(m_world, entity, entity, skillData.m_SelfBuff);

            //Debug.Log("SkillLogic hit " + entity.ID + " createrid " + cc.creater + " damageList.Count " + damageList.Count);

            for (int i = 0; i < damageList.Count; i++)
            {
                //伤害处理
                Damage(entity, damageList[i], skillData);

                //击飞处理
                BlowFly(entity, damageList[i], skillData);

                //伤害Buff处理
                DamageBuff(entity, damageList[i], skillData);
            }

            //TODO 恢复
            Recover(entity, entity, skillData);
        }
    }
    public static void TokenUseSkill(WorldBase world, int createrID, string skillID, Vector3 pos, Vector3 dir)
    {
        //Debug.Log("TokenUseSkill pos" + pos + " frame " + world.FrameCount + " skillID" + skillID);

        if (skillID != null &&
            skillID != "null" &&
            skillID != "Null")
        {
            SkillStatusComponent ssc = new SkillStatusComponent();
            ssc.m_skillTime      = 0;
            ssc.m_skillStstus    = SkillStatusEnum.Before;
            ssc.m_isTriggerSkill = false;
            ssc.m_isHit          = false;
            ssc.m_skillList.Add(new SkillData(skillID));
            ssc.m_currentSkillData = ssc.GetSkillData(skillID);
            ssc.m_currentSkillData.UpdateInfo();
            ssc.skillDir.FromVector(dir);

            if (ssc.m_currentSkillData.LaterTime == 0)
            {
                Debug.LogError("技能代 " + skillID + "的持续时间不能为 0 !");
                return;
            }

            TransfromComponent tc = new TransfromComponent();
            tc.pos.FromVector(pos);
            tc.dir.FromVector(dir);

            //打印
            Debug.DrawRay(tc.pos.ToVector(), -tc.dir.ToVector(), Color.green, 10);

            CampComponent cc = new CampComponent();
            cc.creater = createrID;

            LifeSpanComponent lsc = new LifeSpanComponent();
            lsc.lifeTime = (int)(ssc.m_currentSkillData.LaterTime * 1000);

            world.CreateEntity(createrID + "SkillToken", tc, ssc, cc, lsc);
        }
    }
Beispiel #15
0
    int GetDelayTime(SkillStatusComponent skillComp)
    {
        SkillStatusDataGenerate skillStatusData = null;

        switch (skillComp.m_skillStstus)
        {
        case SkillStatusEnum.Before:
            skillStatusData = skillComp.m_currentSkillData.BeforeInfo;
            break;

        case SkillStatusEnum.Current:
            skillStatusData = skillComp.m_currentSkillData.CurrentInfo;
            break;

        case SkillStatusEnum.Later:
            skillStatusData = skillComp.m_currentSkillData.LaterInfo;
            break;
        }
        float delayTime = skillStatusData.m_FXDelay;

        return((int)(delayTime * 1000));
    }
Beispiel #16
0
    public static void UpdateArea(Area area, string areaID, Vector3 dir, EntityBase skiller, EntityBase aim = null)
    {
        //MoveComponent smc = skiller.GetComp<MoveComponent>();
        SkillStatusComponent ssc = skiller.GetComp <SkillStatusComponent>();

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

        Vector3 dirTmp = GetAreaDir(area, areaData, dir, 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 = dirTmp.normalized;
        //area.position = smc.pos.ToVector() + area.direction * areaData.m_SkewDistance;

        area.position = ssc.skillPos.ToVector() + areaData.m_SkewDistance * ssc.skillDir.ToVector().normalized;

        //Debug.Log( "skiller forward"+skiller.transform.forward);
    }
Beispiel #17
0
    public void CreateEffect(EntityBase entity, string effectName, HardPointEnum hardPoint, float time, float offset)
    {
        PerfabComponent      pc  = entity.GetComp <PerfabComponent>();
        SkillStatusComponent ssc = entity.GetComp <SkillStatusComponent>();
        MoveComponent        mc  = entity.GetComp <MoveComponent>();

        //挂载点完全放弃了
        Transform creatPoint = pc.hardPoint.hardPoint.GetHardPoint(hardPoint);

        Vector3 createPos      = mc.pos.ToVector() + ssc.skillDir.ToVector() * offset;
        Vector3 charactorEugle = Vector3.zero;
        Vector3 m_aimWaistDir  = ssc.skillDir.ToVector();
        float   euler          = Mathf.Atan2(m_aimWaistDir.x, m_aimWaistDir.z) * Mathf.Rad2Deg;

        if (m_aimWaistDir.z == 0)
        {
            euler = 0;
        }

        charactorEugle.y = euler;

        TransfromComponent etc = new TransfromComponent();

        etc.pos.FromVector(createPos);
        etc.dir.FromVector(m_aimWaistDir);

        AssetComponent eac = new AssetComponent();

        eac.m_assetName = effectName;

        LifeSpanComponent elc = new LifeSpanComponent();

        elc.lifeTime = (int)(time * 1000);

        m_world.CreateEntity("Effect" + effectName + entity.ID + createPos, etc, eac, elc);
    }
Beispiel #18
0
    public override void FixedUpdate(int deltaTime)
    {
        List <EntityBase> list = GetEntityList();

        for (int i = 0; i < list.Count; i++)
        {
            CommandComponent     cc  = list[i].GetComp <CommandComponent>();
            CDComponent          cdc = list[i].GetComp <CDComponent>();
            SkillStatusComponent ssc = list[i].GetComp <SkillStatusComponent>();
            PlayerComponent      pc  = list[i].GetComp <PlayerComponent>();

            cdc.CD -= deltaTime;

            //Debug.Log(cc.element1 + " --> " + cc.element2 + " CanFire " + (cdc.CD <= 0));

            if (cc.skillDir.ToVector() != Vector3.zero &&
                cc.isFire &&
                cdc.CD <= 0)
            {
                cdc.CD = 2 * 1000;

                //FIRE!!! 2000 2002技能可用

                string skillID = GetSkillName(cc);

                //Debug.Log("FIRE!!! --> " + skillID);

                ssc.m_skillTime        = 0;
                ssc.m_skillStstus      = SkillStatusEnum.Before;
                ssc.m_isTriggerSkill   = false;
                ssc.m_currentSkillData = ssc.GetSkillData(skillID);
                ssc.m_currentSkillData.UpdateInfo();
                ssc.skillDir = cc.skillDir.DeepCopy();
            }
        }
    }
Beispiel #19
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);
    }
    public void PlayerJoin(EntityBase entity)
    {
        ConnectionComponent connectComp = entity.GetComp <ConnectionComponent>();
        PlayerComponent     playerComp  = null;

        if (!entity.GetExistComp <PlayerComponent>())
        {
            playerComp = new PlayerComponent();
            entity.AddComp(playerComp);
        }
        else
        {
            playerComp = entity.GetComp <PlayerComponent>();
        }

        //将角色ID传入游戏
        playerComp.characterID = connectComp.m_session.player.characterID;
        playerComp.nickName    = connectComp.m_session.player.playerID;

        ElementData e1 = new ElementData();

        e1.id  = 100;
        e1.num = 10;
        playerComp.elementData.Add(e1);

        ElementData e2 = new ElementData();

        e2.id  = 101;
        e2.num = 10;
        playerComp.elementData.Add(e2);

        ElementData e3 = new ElementData();

        e3.id  = 102;
        e3.num = 10;
        playerComp.elementData.Add(e3);

        ElementData e4 = new ElementData();

        e4.id  = 103;
        e4.num = 00;
        playerComp.elementData.Add(e4);

        if (!entity.GetExistComp <CommandComponent>())
        {
            CommandComponent c = new CommandComponent();
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <TransfromComponent>())
        {
            TransfromComponent c = new TransfromComponent();
            c.pos.FromVector(new Vector3(15, 0, 0));
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <AssetComponent>())
        {
            AssetComponent c = new AssetComponent();
            c.m_assetName = playerComp.CharacterData.m_ModelID;
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <MoveComponent>())
        {
            MoveComponent c = new MoveComponent();
            c.pos.FromVector(new Vector3(15, 0, 0));

            entity.AddComp(c);
        }


        if (!entity.GetExistComp <SkillStatusComponent>())
        {
            SkillStatusComponent c = new SkillStatusComponent();

            DataTable data = DataManager.GetData("SkillData");
            for (int i = 0; i < data.TableIDs.Count; i++)
            {
                c.m_skillList.Add(new SkillData(data.TableIDs[i], i));
            }
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <CDComponent>())
        {
            CDComponent c = new CDComponent();
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <CampComponent>())
        {
            CampComponent c = new CampComponent();
            c.creater = entity.ID;
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <MoveComponent>())
        {
            MoveComponent c = new MoveComponent();
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <CollisionComponent>())
        {
            CollisionComponent c = new CollisionComponent();
            c.area.areaType = AreaType.Circle;
            c.area.radius   = 0.5f;
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <LifeComponent>())
        {
            LifeComponent c = new LifeComponent();
            c.maxLife = playerComp.CharacterData.m_hp;
            c.life    = playerComp.CharacterData.m_hp;
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <BlowFlyComponent>())
        {
            BlowFlyComponent c = new BlowFlyComponent();
            entity.AddComp(c);
        }

        //预测一个输入
        //TODO 放在框架中
        if (entity.GetExistComp <ConnectionComponent>())
        {
            ConnectionComponent cc = entity.GetComp <ConnectionComponent>();
            cc.m_lastInputCache = new CommandComponent();
            cc.m_defaultInput   = new CommandComponent();
        }

        GameTimeComponent gtc = m_world.GetSingletonComp <GameTimeComponent>();

        gtc.GameTime = 10000 * 1000;
    }
Beispiel #21
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;

        Vector3 forward = ssc.skillDir.ToVector();
        Vector3 dir     = forward;
        Vector3 pos     = Vector3.zero;

        //获取散射区域
        Area skillArea = SkillUtils.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 = mc.pos.DeepCopy();
            cpi.m_dir = ssc.skillDir.DeepCopy();

            result.Add(cpi);
        }

        return(result);
    }
Beispiel #22
0
    public void PlayerJoin(EntityBase entity)
    {
        PlayerComponent playerComp = null;

        if (!entity.GetExistComp <PlayerComponent>())
        {
            playerComp = new PlayerComponent();

            playerComp.characterID = "1";
            playerComp.nickName    = "Test model";

            ElementData e1 = new ElementData();
            e1.id  = 100;
            e1.num = 10;
            playerComp.elementData.Add(e1);

            ElementData e2 = new ElementData();
            e2.id  = 101;
            e2.num = 10;
            playerComp.elementData.Add(e2);

            ElementData e3 = new ElementData();
            e3.id  = 102;
            e3.num = 10;
            playerComp.elementData.Add(e3);

            ElementData e4 = new ElementData();
            e4.id  = 103;
            e4.num = 00;
            playerComp.elementData.Add(e4);

            entity.AddComp(playerComp);
        }

        if (!entity.GetExistComp <CommandComponent>())
        {
            CommandComponent c = new CommandComponent();
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <TransfromComponent>())
        {
            TransfromComponent c = new TransfromComponent();
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <AssetComponent>())
        {
            AssetComponent c = new AssetComponent();
            c.m_assetName = "famale_01";
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <MoveComponent>())
        {
            MoveComponent c = new MoveComponent();
            c.pos.FromVector(new Vector3(15, 0, 0));

            entity.AddComp(c);
        }

        if (!entity.GetExistComp <SkillStatusComponent>())
        {
            SkillStatusComponent c = new SkillStatusComponent();

            DataTable data = DataManager.GetData("SkillData");
            for (int i = 0; i < data.TableIDs.Count; i++)
            {
                c.m_skillList.Add(new SkillData(data.TableIDs[i], i));
            }
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <CDComponent>())
        {
            CDComponent c = new CDComponent();
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <CampComponent>())
        {
            CampComponent c = new CampComponent();
            c.creater = entity.ID;
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <MoveComponent>())
        {
            MoveComponent c = new MoveComponent();
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <CollisionComponent>())
        {
            CollisionComponent c = new CollisionComponent();
            c.area.areaType = AreaType.Circle;
            c.area.radius   = 0.5f;
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <LifeComponent>())
        {
            LifeComponent c = new LifeComponent();
            c.maxLife = playerComp.CharacterData.m_hp;
            c.life    = playerComp.CharacterData.m_hp;
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <BlowFlyComponent>())
        {
            BlowFlyComponent c = new BlowFlyComponent();
            entity.AddComp(c);
        }
    }
Beispiel #23
0
    public void SkillStatusLogic(EntityBase entity, int deltaTime)
    {
        SkillStatusComponent sc = entity.GetComp <SkillStatusComponent>();

        if (sc.m_skillStstus != SkillStatusEnum.Finish &&
            sc.m_skillStstus != SkillStatusEnum.None)
        {
            //Debug.Log("ID: " + entity.ID + " m_skillStstus " + sc.m_skillStstus + " frame " + m_world.FrameCount +" skillTime "+ sc.m_skillTime +" LaterTime " + sc.m_currentSkillData.LaterTime);

            sc.m_skillTime += deltaTime;
            sc.FXTimer     += deltaTime;

            if (sc.m_skillTime > sc.m_currentSkillData.BeforeTime)
            {
                if (sc.m_skillStstus != SkillStatusEnum.Current)
                {
                    sc.m_isEnter     = true;
                    sc.m_skillStstus = SkillStatusEnum.Current;
                    m_world.eventSystem.DispatchEvent(GameUtils.c_SkillStatusEnter, entity);
                }
                else
                {
                    sc.m_isEnter = false;
                }
            }
            if (sc.m_skillTime > sc.m_currentSkillData.HitTime)
            {
                if (sc.m_currentSkillData.SkillInfo.m_Moment)
                {
                    if (sc.m_isTriggerSkill == false)
                    {
                        sc.m_isTriggerSkill = true;
                        sc.m_isHit          = true;
                        m_world.eventSystem.DispatchEvent(GameUtils.c_SkillHit, entity);
                    }
                    else
                    {
                        sc.m_isHit = false;
                    }
                }
                else
                {
                    sc.m_skillTriggerTimeSpace -= deltaTime;
                    //Debug.Log("m_skillTriggerTimeSpace " + sc.m_skillTriggerTimeSpace);

                    if (sc.m_skillTriggerTimeSpace < 0)
                    {
                        sc.m_skillTriggerTimeSpace = sc.m_currentSkillData.SkillInfo.m_TriggerSpaceTime;
                        //加个伤害间隔
                        sc.m_isHit = true;
                        m_world.eventSystem.DispatchEvent(GameUtils.c_SkillHit, entity);
                    }
                    else
                    {
                        sc.m_isHit = false;
                    }
                }
            }

            if (sc.m_skillTime > sc.m_currentSkillData.CurrentTime)
            {
                sc.m_isHit = false;

                if (sc.m_skillStstus != SkillStatusEnum.Later)
                {
                    sc.m_isEnter     = true;
                    sc.m_skillStstus = SkillStatusEnum.Later;
                    m_world.eventSystem.DispatchEvent(GameUtils.c_SkillStatusEnter, entity);
                }
                else
                {
                    sc.m_isEnter = false;
                }
            }

            if (sc.m_skillTime > sc.m_currentSkillData.LaterTime)
            {
                if (sc.m_skillStstus != SkillStatusEnum.Finish)
                {
                    sc.m_isEnter     = true;
                    sc.m_skillStstus = SkillStatusEnum.Finish;
                    m_world.eventSystem.DispatchEvent(GameUtils.c_SkillStatusEnter, entity);
                }
                else
                {
                    sc.m_isEnter = false;
                }
            }
        }
    }
    public void PlayerJoin(EntityBase entity)
    {
        if (!entity.GetExistComp <CommandComponent>())
        {
            CommandComponent c = new CommandComponent();
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <ViewComponent>())
        {
            ViewComponent c = new ViewComponent();
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <AssetComponent>())
        {
            AssetComponent c = new AssetComponent();
            c.m_assetName = "famale_01";
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <MoveComponent>())
        {
            MoveComponent c = new MoveComponent();
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <PlayerComponent>())
        {
            PlayerComponent c = new PlayerComponent();
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <SkillStatusComponent>())
        {
            SkillStatusComponent c = new SkillStatusComponent();

            DataTable data = DataManager.GetData("SkillData");
            for (int i = 0; i < data.TableIDs.Count; i++)
            {
                c.m_skillList.Add(new SkillData(data.TableIDs[i], i));
            }
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <CDComponent>())
        {
            CDComponent c = new CDComponent();
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <MoveComponent>())
        {
            MoveComponent c = new MoveComponent();
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <CampComponent>())
        {
            CampComponent c = new CampComponent();
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <CollisionComponent>())
        {
            CollisionComponent c = new CollisionComponent();
            c.area.areaType = AreaType.Circle;
            c.area.radius   = 0.5f;
            entity.AddComp(c);
        }

        if (!entity.GetExistComp <LifeComponent>())
        {
            LifeComponent c = new LifeComponent();
            c.maxLife = 100;
            c.life    = 100;
            entity.AddComp(c);
        }

        //预测一个输入
        //TODO 放在框架中
        if (entity.GetExistComp <ConnectionComponent>())
        {
            ConnectionComponent cc = entity.GetComp <ConnectionComponent>();
            cc.m_lastInputCache = new CommandComponent();
        }
    }
Beispiel #25
0
    void ReceviceSkillHit(EntityBase entity, params object[] objs)
    {
        SkillStatusComponent sc = entity.GetComp <SkillStatusComponent>();

        CreateSkillAreaTip(entity, sc);
    }
Beispiel #26
0
    public void SkillStatusLogic(EntityBase entity, int deltaTime)
    {
        SkillStatusComponent sc = entity.GetComp <SkillStatusComponent>();

        if (sc.m_skillStstus != SkillStatusEnum.Finish &&
            sc.m_skillStstus != SkillStatusEnum.None)
        {
            sc.m_skillTime += deltaTime;

            if (sc.m_skillTime > sc.m_currentSkillData.BeforeTime * 1000)
            {
                if (sc.m_skillStstus != SkillStatusEnum.Current)
                {
                    sc.m_isEnter     = true;
                    sc.m_skillStstus = SkillStatusEnum.Current;
                }
                else
                {
                    sc.m_isEnter = false;
                }
            }
            if (sc.m_skillTime > sc.m_currentSkillData.HitTime * 1000)
            {
                if (sc.m_currentSkillData.SkillInfo.m_Moment)
                {
                    if (sc.m_isTriggerSkill == false)
                    {
                        sc.m_isTriggerSkill = true;
                        sc.m_isHit          = true;
                    }
                    else
                    {
                        sc.m_isHit = false;
                    }
                }
                else
                {
                    sc.m_skillTriggerTimeSpace -= deltaTime;
                    if (sc.m_skillTriggerTimeSpace < 0)
                    {
                        sc.m_skillTriggerTimeSpace = (int)(sc.m_currentSkillData.SkillInfo.m_TriggerSpaceTime) * 1000;
                        //加个伤害间隔
                        sc.m_isHit = true;
                    }
                    else
                    {
                        sc.m_isHit = false;
                    }
                }
            }

            if (sc.m_skillTime > sc.m_currentSkillData.CurrentTime * 1000)
            {
                if (sc.m_skillStstus != SkillStatusEnum.Later)
                {
                    sc.m_isEnter     = true;
                    sc.m_skillStstus = SkillStatusEnum.Later;
                }
                else
                {
                    sc.m_isEnter = false;
                }
            }

            if (sc.m_skillTime > sc.m_currentSkillData.LaterTime * 1000)
            {
                if (sc.m_skillStstus != SkillStatusEnum.Finish)
                {
                    sc.m_isEnter     = true;
                    sc.m_skillStstus = SkillStatusEnum.Finish;
                }
                else
                {
                    sc.m_isEnter = false;
                }
            }
        }
    }