Пример #1
0
    public void CastSkill(int skillIndex = -1)
    {
        var roleGameOE = RoleMgr.GetInstance().GetMainRole();
        var roleInfo   = roleGameOE.GetComponent <RoleInfo>();
        var skillID    = SkillManager.GetInstance().GetSkillIDByIndex(skillIndex);

        string assetPath      = ResPath.GetRoleSkillResPath(skillID);
        bool   isNormalAttack = skillIndex == -1;//普通攻击

        if (!isNormalAttack)
        {
            SkillManager.GetInstance().ResetCombo();//使用非普攻技能时就重置连击索引
        }
        var uid = SceneMgr.Instance.EntityManager.GetComponentData <UID>(roleGameOE.Entity);
        Action <TimelineInfo.Event> afterAdd = null;

        if (isNormalAttack)
        {
            //普攻的话增加连击索引
            afterAdd = (TimelineInfo.Event e) =>
            {
                if (e == TimelineInfo.Event.AfterAdd)
                {
                    SkillManager.GetInstance().IncreaseCombo();
                }
            };
        }
        var timelineInfo = new TimelineInfo {
            ResPath = assetPath, Owner = roleGameOE.Entity, StateChange = afterAdd
        };

        TimelineManager.GetInstance().AddTimeline(uid.Value, timelineInfo, SceneMgr.Instance.EntityManager);
    }
Пример #2
0
    protected override void OnUpdate()
    {
        var requestArray = Group.GetComponentDataArray <NameboardSpawnRequest>();
        var entityArray  = Group.GetEntityArray();

        var spawnRequests = new NameboardSpawnRequest[requestArray.Length];

        for (var i = 0; i < requestArray.Length; i++)
        {
            spawnRequests[i] = requestArray[i];
            PostUpdateCommands.DestroyEntity(entityArray[i]);
        }

        for (var i = 0; i < spawnRequests.Length; i++)
        {
            var request = spawnRequests[i];
            GameObjectEntity nameboardGOE = m_world.Spawn <GameObjectEntity>(ResMgr.GetInstance().GetPrefab("Nameboard"));
            nameboardGOE.transform.SetParent(nameboardCanvas);
            var    nameboardBehav = nameboardGOE.GetComponent <Nameboard>();
            var    uid            = EntityManager.GetComponentData <UID>(request.Owner);
            string name           = SceneMgr.Instance.GetNameByUID(uid.Value);
            nameboardBehav.Name = name;
            var isMainRole = RoleMgr.GetInstance().IsMainRoleEntity(request.Owner);
            nameboardBehav.CurColorStyle = isMainRole ? Nameboard.ColorStyle.Green : Nameboard.ColorStyle.Red;
            if (EntityManager.HasComponent <NameboardData>(request.Owner))
            {
                var nameboardData = EntityManager.GetComponentData <NameboardData>(request.Owner);
                nameboardData.UIEntity   = nameboardGOE.Entity;
                nameboardData.UIResState = NameboardData.ResState.Loaded;
                EntityManager.SetComponentData(request.Owner, nameboardData);
            }
        }
    }
Пример #3
0
    protected override void OnUpdate()
    {
        //TODO:控制刷新或请求频率
        var requestArray = RequestGroup.ToComponentDataArray <RoleLooksNetRequest>(Allocator.TempJob);

        if (requestArray.Length == 0)
        {
            requestArray.Dispose();
            return;
        }

        var requestEntityArray = RequestGroup.ToEntityArray(Allocator.TempJob);

        // Copy requests as spawning will invalidate Group
        var requests = new RoleLooksNetRequest[requestArray.Length];

        for (var i = 0; i < requestArray.Length; i++)
        {
            requests[i] = requestArray[i];
            PostUpdateCommands.DestroyEntity(requestEntityArray[i]);
        }

        for (var i = 0; i < requests.Length; i++)
        {
            SprotoType.scene_get_role_look_info.request req = new SprotoType.scene_get_role_look_info.request();
            req.uid = requests[i].roleUid;
            Entity owner = requests[i].owner;
            if (!EntityManager.Exists(owner))
            {
                continue;
            }
            UnityMMO.NetMsgDispatcher.GetInstance().SendMessage <Protocol.scene_get_role_look_info>(req, (_) =>
            {
                SprotoType.scene_get_role_look_info.response rsp = _ as SprotoType.scene_get_role_look_info.response;
                // Debug.Log("rsp.result : "+rsp.result.ToString()+" owner:"+owner.ToString());
                if (rsp.result == UnityMMO.GameConst.NetResultOk)
                {
                    RoleMgr.GetInstance().SetName(req.uid, rsp.role_looks_info.name);
                    if (m_world.GetEntityManager().HasComponent <HealthStateData>(owner))
                    {
                        var hpData   = m_world.GetEntityManager().GetComponentData <HealthStateData>(owner);
                        hpData.CurHp = rsp.role_looks_info.hp;
                        hpData.MaxHp = rsp.role_looks_info.max_hp;
                        m_world.GetEntityManager().SetComponentData <HealthStateData>(owner, hpData);
                    }
                    bool hasTrans = m_world.GetEntityManager().HasComponent <Transform>(owner);
                    if (hasTrans)
                    {
                        var transform = m_world.GetEntityManager().GetComponentObject <Transform>(owner);
                        //因为是异步操作,等后端发送信息过来时PostUpdateCommands已经失效了,所以不能这么用
                        RoleLooksSpawnRequest.Create(m_world.GetEntityManager(), (int)rsp.role_looks_info.career, transform.localPosition, transform.localRotation, owner, (int)rsp.role_looks_info.body, (int)rsp.role_looks_info.hair);
                    }
                }
            });
        }
        requestEntityArray.Dispose();
        requestArray.Dispose();
    }
Пример #4
0
    protected override void OnUpdate()
    {
        var requestArray  = Group.ToComponentDataArray <NameboardSpawnRequest>(Allocator.TempJob);
        var entityArray   = Group.ToEntityArray(Allocator.TempJob);
        var spawnRequests = new NameboardSpawnRequest[requestArray.Length];

        for (var i = 0; i < requestArray.Length; i++)
        {
            spawnRequests[i] = requestArray[i];
            PostUpdateCommands.DestroyEntity(entityArray[i]);
        }

        for (var i = 0; i < spawnRequests.Length; i++)
        {
            var request = spawnRequests[i];
            if (!EntityManager.Exists(request.Owner))
            {
                continue;
            }
            GameObjectEntity nameboardGOE = m_world.SpawnByGameObject <GameObjectEntity>(ResMgr.GetInstance().GetGameObject("Nameboard"));
            nameboardGOE.transform.SetParent(nameboardCanvas);
            nameboardGOE.transform.localScale = new Vector3(-1, 1, 1);
            var    nameboardBehav = nameboardGOE.GetComponent <Nameboard>();
            var    uid            = EntityManager.GetComponentData <UID>(request.Owner);
            string name           = SceneMgr.Instance.GetNameByUID(uid.Value);
            nameboardBehav.Name = name;
            var isMainRole = RoleMgr.GetInstance().IsMainRoleEntity(request.Owner);
            // Debug.Log("name : "+name+" isMainRole:"+isMainRole);
            nameboardBehav.CurColorStyle = isMainRole ? Nameboard.ColorStyle.Green : Nameboard.ColorStyle.Red;
            if (EntityManager.HasComponent <NameboardData>(request.Owner))
            {
                var nameboardData = EntityManager.GetComponentData <NameboardData>(request.Owner);
                nameboardData.UIEntity   = nameboardGOE.Entity;
                nameboardData.UIResState = NameboardData.ResState.Loaded;
                EntityManager.SetComponentData(request.Owner, nameboardData);
            }
            bool hasHPData = EntityManager.HasComponent <HealthStateData>(request.Owner);
            // Debug.Log("has Hp data "+hasHPData);
            if (hasHPData)
            {
                var hpData = EntityManager.GetComponentData <HealthStateData>(request.Owner);
                nameboardBehav.MaxHp = hpData.MaxHp;
                nameboardBehav.CurHp = hpData.CurHp;
                // nameboardBehav.UpdateBloodBar(hpData.CurHp, hpData.MaxHp);
            }

            var sceneObjType = EntityManager.GetComponentData <SceneObjectTypeData>(request.Owner);
            nameboardBehav.SetBloodVisible(sceneObjType.Value == SceneObjectType.Role || sceneObjType.Value == SceneObjectType.Monster);
        }
        requestArray.Dispose();
        entityArray.Dispose();
    }
Пример #5
0
    // Called when the state of the playable is set to Play
    public override void OnBehaviourPlay(Playable playable, FrameData info)
    {
        var isMainRole = RoleMgr.GetInstance().IsMainRoleEntity(Owner);

        // Debug.Log("cast skill behav isMainRole :"+isMainRole.ToString());
        if (isMainRole)
        {
            var trans = EntityMgr.GetComponentObject <Transform>(Owner);
            if (trans != null)
            {
                SprotoType.scene_cast_skill.request req = new SprotoType.scene_cast_skill.request();
                req.skill_id     = SkillID;
                req.cur_pos_x    = (long)(trans.localPosition.x * GameConst.RealToLogic);
                req.cur_pos_y    = (long)(trans.localPosition.y * GameConst.RealToLogic);
                req.cur_pos_z    = (long)(trans.localPosition.z * GameConst.RealToLogic);
                req.target_pos_x = (long)(trans.localPosition.x * GameConst.RealToLogic);
                req.target_pos_y = (long)(trans.localPosition.y * GameConst.RealToLogic);
                req.target_pos_z = (long)(trans.localPosition.z * GameConst.RealToLogic);
                req.direction    = (long)(trans.eulerAngles.y * GameConst.RealToLogic);
                // Debug.Log("req.direction : "+req.direction+" skillID "+SkillID);
                NetMsgDispatcher.GetInstance().SendMessage <Protocol.scene_cast_skill>(req, delegate(Sproto.SprotoTypeBase result){
                    SprotoType.scene_cast_skill.response ack = result as SprotoType.scene_cast_skill.response;
                    // Debug.Log("ack : "+(ack!=null).ToString());
                    if (ack == null)
                    {
                        return;
                    }
                    Debug.Log("scene_cast_skill ack.result : " + ack.result);
                    if (ack.result == 1)
                    {
                        XLuaFramework.CSLuaBridge.GetInstance().CallLuaFuncStr(GlobalEvents.MessageShow, "技能冷却中...");
                        return;
                    }
                    SkillManager.GetInstance().SetSkillCD((int)ack.skill_id, ack.cd_end_time);
                    // // Debug.Log("playable : "+(Playable.Equals(playable, Playable.Null)).ToString());
                    // var graph = PlayableExtensions.GetGraph(playable);
                    // // Debug.Log("graph.IsDone() : "+graph.IsDone().ToString());
                    // if (!graph.IsDone())
                    // {
                    //     var playableNum = graph.GetRootPlayableCount();
                    //     // Debug.Log("playableNum : "+playableNum);
                    //     for (int i = 0; i < playableNum; i++)
                    //     {
                    //         var rootPlayable = graph.GetRootPlayable(i);
                    //         FindFlyWord(rootPlayable, ack.fight_event.defenders, 0);
                    //     }
                    // }
                });
            }
        }
    }
Пример #6
0
    protected override void OnUpdate()
    {
        EntityArray entities       = RoleGroup.GetEntityArray();
        var         roleStateArray = RoleGroup.GetComponentArray <RoleState>();
        var         mainRoleGOE    = RoleMgr.GetInstance().GetMainRole();
        float3      mainRolePos    = float3.zero;

        if (mainRoleGOE != null)
        {
            mainRolePos = m_world.GetEntityManager().GetComponentData <Position>(mainRoleGOE.Entity).Value;
        }
        for (int i = 0; i < roleStateArray.Length; i++)
        {
            var  roleState          = roleStateArray[i];
            var  entity             = entities[i];
            bool isNeedReqLooksInfo = false;
            bool isNeedHideLooks    = false;

            //其它玩家离主角近时就要请求该玩家的角色外观信息
            var   curPos   = m_world.GetEntityManager().GetComponentData <Position>(entity).Value;
            float distance = Vector3.Distance(curPos, mainRolePos);
            Debug.Log("distance : " + distance);
            if (!roleState.hasLooks)
            {
                isNeedReqLooksInfo = distance <= 400;
                // bool isMainRole = m_world.GetEntityManager().HasComponent(entity, typeof(UnityMMO.MainRoleTag));
                // if (isMainRole)
                // {
                //     isNeedReqLooksInfo = true;
                // }
                // else
                // {
                // //其它玩家离主角近时就要请求该玩家的角色外观信息
                // var curPos = m_world.GetEntityManager().GetComponentData<Position>(entity).Value;
                // float distance = Vector3.Distance(curPos, mainRolePos);
                // Debug.Log("distance : "+distance);
                // isNeedReqLooksInfo = distance <= 200;
                // }
            }
            else
            {
                isNeedHideLooks = distance >= 300;
            }
            if (isNeedReqLooksInfo)
            {
                roleState.hasLooks = true;
                RoleLooksNetRequest.Create(PostUpdateCommands, roleState.roleUid, entity);
            }
        }
    }
Пример #7
0
    public override void OnPointerDown(PointerEventData eventData)
    {
        OnDrag(eventData);
        var       goe     = RoleMgr.GetInstance().GetMainRole();
        AutoFight fightAi = goe.GetComponent <UnityMMO.AutoFight>();

        if (fightAi != null)
        {
            fightAi.enabled = false;
        }
        var moveQuery = goe.GetComponent <UnityMMO.MoveQuery>();

        if (moveQuery != null)
        {
            moveQuery.StopFindWay();
        }
    }
Пример #8
0
    protected override void OnUpdate()
    {
        var    entities       = RoleGroup.ToEntityArray(Allocator.TempJob);
        var    uidArray       = RoleGroup.ToComponentDataArray <UID>(Allocator.TempJob);
        var    looksInfoArray = RoleGroup.ToComponentDataArray <LooksInfo>(Allocator.TempJob);
        var    mainRoleGOE    = RoleMgr.GetInstance().GetMainRole();
        float3 mainRolePos    = float3.zero;

        if (mainRoleGOE != null)
        {
            mainRolePos = m_world.GetEntityManager().GetComponentObject <Transform>(mainRoleGOE.Entity).localPosition;
        }
        for (int i = 0; i < looksInfoArray.Length; i++)
        {
            var  uid                = uidArray[i];
            var  looksInfo          = looksInfoArray[i];
            var  entity             = entities[i];
            bool isNeedReqLooksInfo = false;
            bool isNeedHideLooks    = false;

            //其它玩家离主角近时就要请求该玩家的角色外观信息
            var   curPos   = m_world.GetEntityManager().GetComponentObject <Transform>(entity).localPosition;
            float distance = Vector3.Distance(curPos, mainRolePos);
            if (looksInfo.CurState == LooksInfo.State.None)
            {
                isNeedReqLooksInfo = distance <= 400;
            }
            else
            {
                isNeedHideLooks = distance >= 300;
            }
            // Debug.Log("isNeedReqLooksInfo : "+isNeedReqLooksInfo.ToString()+" looksInfo.CurState:"+looksInfo.CurState.ToString());
            if (isNeedReqLooksInfo)
            {
                looksInfo.CurState = LooksInfo.State.Loading;
                // looksInfoArray[i] = looksInfo;
                EntityManager.SetComponentData <LooksInfo>(entities[i], looksInfo);
                RoleLooksNetRequest.Create(PostUpdateCommands, uid.Value, entity);
            }
        }
        entities.Dispose();
        looksInfoArray.Dispose();
        uidArray.Dispose();
    }
Пример #9
0
    protected override void OnUpdate()
    {
        EntityArray entities       = RoleGroup.GetEntityArray();
        var         roleStateArray = RoleGroup.GetComponentArray <RoleState>();
        var         looksInfoArray = RoleGroup.GetComponentDataArray <LooksInfo>();
        var         mainRoleGOE    = RoleMgr.GetInstance().GetMainRole();
        float3      mainRolePos    = float3.zero;

        if (mainRoleGOE != null)
        {
            mainRolePos = m_world.GetEntityManager().GetComponentObject <Transform>(mainRoleGOE.Entity).localPosition;
        }
        for (int i = 0; i < looksInfoArray.Length; i++)
        {
            var  roleState          = roleStateArray[i];
            var  looksInfo          = looksInfoArray[i];
            var  entity             = entities[i];
            bool isNeedReqLooksInfo = false;
            bool isNeedHideLooks    = false;

            //其它玩家离主角近时就要请求该玩家的角色外观信息
            var   curPos   = m_world.GetEntityManager().GetComponentObject <Transform>(entity).localPosition;
            float distance = Vector3.Distance(curPos, mainRolePos);
            if (looksInfo.CurState == LooksInfo.State.None)
            {
                isNeedReqLooksInfo = distance <= 400;
            }
            else
            {
                isNeedHideLooks = distance >= 300;
            }
            // Debug.Log("isNeedReqLooksInfo : "+isNeedReqLooksInfo.ToString()+" looksInfo.CurState:"+looksInfo.CurState.ToString());
            if (isNeedReqLooksInfo)
            {
                roleState.hasLooks = true;
                looksInfo.CurState = LooksInfo.State.Loading;
                looksInfoArray[i]  = looksInfo;
                RoleLooksNetRequest.Create(PostUpdateCommands, roleState.roleUid, entity);
            }
        }
    }
Пример #10
0
 public void Init(Entity owner, EntityManager entityMgr)
 {
     Owner      = owner;
     EntityMgr  = entityMgr;
     isMainRole = RoleMgr.GetInstance().IsMainRoleEntity(Owner);
 }