public void HandlePlayerMove(ulong playerId, Vector3 target)
    {
        BordlandsCreature bc = null;

        if (m_otherPlayerCreatures.TryGetValue(playerId, out bc))
        {
            if (bc.transform)
            {
                bc.SetTargetPos(target);
            }
        }
    }
    /// <summary>
    /// 延迟处理怪物,等待资源加载完毕
    /// </summary>
    /// <param name="monster"></param>
    public void HandleMonster(MonsterCreature monster, PNmlMonster data)
    {
        if (!monster || !monster.gameObject || !monster.behaviour || !monster.activeRootNode)
        {
            return;
        }

        monster.behaviour.enabled = false;
        monster.behaviour.collider_.syncPosition            = false;
        monster.behaviour.collider_.transform.localPosition = Vector3.zero;
        Util.SetLayer(monster.gameObject, Layers.MODEL);
        monster.gameObject.name = Util.Format("monster_{0}_{1}_{2}", data.uid, (EnumBordlandMonsterType)data.type, data.boss);
        monster.isPlayer        = false;

        BordlandsCreature bc = monster.activeRootNode.GetComponentDefault <BordlandsCreature>();

        bc.LoadMonsterRuntimeAnimator(BORDLAND_MONSTER_ANIMATOR_NAME, data);
        bc.moveSpeed = GetMonsterMoveSpeed(data.mesh);
        bc.creature  = monster;
        bc.ResetToOriginal();
        bc.SetMonsterRandomDir();
        bc.InitPVECreatureBehaviour();
        bc.CreateCollider();

        Vector3 pos       = data.pos.ToVector3();
        Vector4 levelEdge = bordlandsEdge;

        if (levelEdge.z == levelEdge.w)
        {
            levelEdge = new Vector4(-22f, 22f, -1.4f, 2f);
            m_edge    = levelEdge;
        }
        // edge check
        if (levelEdge.x != 0 || levelEdge.x != levelEdge.y)
        {
            pos.x = Mathf.Clamp(pos.x, levelEdge.x, levelEdge.y);
        }
        if (levelEdge.z != 0 || levelEdge.z != levelEdge.w)
        {
            pos.z = Mathf.Clamp(pos.z, levelEdge.z, levelEdge.w);
        }
        bc.creaturePos = pos;

        if (!m_monsterCreature.ContainsKey(data.uid))
        {
            m_monsterCreature.Add(data.uid, bc);
        }
        else
        {
            m_monsterCreature[data.uid] = bc;
        }
    }
Example #3
0
    private void _ME(ModuleEvent <Module_Bordlands> e)
    {
        switch (e.moduleEvent)
        {
        case Module_Bordlands.EventDetectMonster:
            m_detectPanel.OnQuitBtnClick(null);
            break;

        case Module_Bordlands.EventFightMonster:
            m_sanctionPanel.OnQuitBtnClick(null);
            ScNmlSceneFightMonster fight = e.msg as ScNmlSceneFightMonster;
            if (fight.result != 0)
            {
                //todo 错误显示
                Logger.LogError("fight error ,result is {0}", fight.result);
                return;
            }
            break;

        case Module_Bordlands.EventBordlandOver: CheckOpenQuitPanel(); break;

        case Module_Bordlands.EventRefreshSelfRank: m_scoreText.text = moduleBordlands.selfScore.ToString(); break;

        case Module_Bordlands.EventClickScenePlayerSuccess:
            if (!actived)
            {
                return;
            }
            BordlandsCreature bc = e.param1 as BordlandsCreature;
            if (bc && bc.monsterData != null)
            {
                if (bc.isInBattle)
                {
                    string msg = ConfigText.GetDefalutString(TextForMatType.BorderlandUIText, 27);
                    moduleGlobal.ShowMessage(msg);
                }
                else
                {
                    m_sanctionPanel.SetPanelVisible(true);
                    m_sanctionPanel.monsterData = bc.monsterData;
                }
            }
            break;

        case Module_Bordlands.EventShowRewardOver: CheckOpenQuitPanel(); break;
        }
    }
    public void HandlePlayer(Creature player, PNmlPlayer info, bool isPlayer = false)
    {
        Util.SetLayer(player.gameObject, Layers.MODEL);

        player.isPlayer          = isPlayer;
        player.enableUpdate      = false;
        player.behaviour.enabled = false;
        player.gameObject.SetActive(m_playerVisible || isPlayer);
        player.gameObject.name = isPlayer ? "self" : info.roleName;
        CharacterEquip.ChangeCloth(player, info.fashion);

        BordlandsCreature bc         = player.activeRootNode.GetComponentDefault <BordlandsCreature>();
        PropItemInfo      weaponInfo = ConfigManager.Get <PropItemInfo>(info.fashion.weapon);

        if (weaponInfo)
        {
            bc.LoadPlayerRuntimeAnimator(Creature.GetAnimatorName(weaponInfo.subType, info.gender), weaponInfo.subType, (byte)info.gender);
        }
        bc.playerType = isPlayer ? BordlandsCreature.BordLandCreatureType.Self : BordlandsCreature.BordLandCreatureType.Player;
        bc.roleInfo   = info;
        bc.creature   = player;
        bc.InitPVECreatureBehaviour();
        bc.creaturePos = info.pos.ToVector3();
        if (player.pet)
        {
            player.pet.gameObject.SetActive(m_playerVisible || isPlayer);
            player.pet.position_ = bc.creaturePos - new Vector3(0.45f, 0, 0);
        }

        if (!isPlayer)
        {
            if (!m_otherPlayerCreatures.ContainsKey(info.roleId))
            {
                m_otherPlayerCreatures.Add(info.roleId, null);
            }
            m_otherPlayerCreatures[info.roleId] = bc;
        }
    }
    void _Packet(ScNmlSceneObjState p)
    {
        EnumBordlandCreatureState state = (EnumBordlandCreatureState)p.state;

        if (m_bordlandMonster.ContainsKey(p.uid))
        {
            Logger.LogInfo("monster.uid = {0},state change to {1}", p.uid, state);
            if (state == EnumBordlandCreatureState.LeaveFromScene)
            {
                m_bordlandMonster.Remove(p.uid);
                BordlandsCreature bc = m_monsterCreature.Get(p.uid);
                if (bc)
                {
                    bc.gameObject.SetActive(false);
                    bc.ResetToOriginal();
                    m_monsterCreature.Remove(p.uid);
                    AddDeadMonsterCreature(bc.creature as MonsterCreature);
                }
            }
            else
            {
                //更新数据层
                PNmlMonster pm = m_bordlandMonster.Get(p.uid);
                if (pm != null)
                {
                    pm.state = p.state;
                }

                //更新UI层
                BordlandsCreature bc = m_monsterCreature.Get(p.uid);
                if (bc)
                {
                    bc.monsterData.state = p.state;
                    bc.isInBattle        = state == EnumBordlandCreatureState.Fighting;
                }
            }
        }
        else if (m_bordlandPlayers.ContainsKey(p.uid))
        {
            Logger.LogInfo("player.uid = {0},state change to {1}", p.uid, state);
            if (state == EnumBordlandCreatureState.LeaveFromScene)
            {
                m_bordlandPlayers.Remove(p.uid);
                BordlandsCreature bc = m_otherPlayerCreatures.Get(p.uid);
                if (bc)
                {
                    //离开后需要关掉宠物AI
                    if (bc.creature.pet != null)
                    {
                        moduleAI.RemovePetAI(bc.creature.pet);
                    }
                    bc.gameObject.SetActive(false);
                    m_otherPlayerCreatures.Remove(p.uid);
                    bc.creature.Destroy();
                }
            }
            else
            {
                PNmlPlayer pm = m_bordlandPlayers.Get(p.uid);
                if (pm != null)
                {
                    pm.state = p.state;
                }

                BordlandsCreature bc = m_otherPlayerCreatures.Get(p.uid);
                if (bc)
                {
                    bc.roleInfo.state = p.state;
                    bc.isInBattle     = state == EnumBordlandCreatureState.Fighting;
                }
            }
        }
        else
        {
            Logger.LogError("scene_obj_uid = {0} doesn't load,check out!", p.uid);
        }
    }