Beispiel #1
0
    private void CreateNPC(IEntityDataStruct entityDataStruct, EntityModelPartial entityModelPartial)
    {
        switch (entityModelPartial)
        {
        case EntityModelPartial.DataStruct:
            m_preCreateNPCStructCache.Add(entityDataStruct);
            break;

        case EntityModelPartial.GameObject:
            var sMsgPropCreateEntity_SC_NPC = (SMsgPropCreateEntity_SC_NPC)entityDataStruct;

            ////TraceUtil.Log("============>>>>>>>>>>.MapID" + sMsgPropCreateEntity_SC_NPC.MapID);
            ////TraceUtil.Log("============>>>>>>>>>.NPCX" + sMsgPropCreateEntity_SC_NPC.NPCX);
            ////TraceUtil.Log("============>>>>>>>>>.BaseValue.OBJECT_FIELD_ENTRY_ID" + sMsgPropCreateEntity_SC_NPC.BaseValue.OBJECT_FIELD_ENTRY_ID);
            ////TraceUtil.Log("============>>>>>>>>>.UnitValue.UNIT_FIELD_DIR" + sMsgPropCreateEntity_SC_NPC.UnitValue.UNIT_FIELD_DIR);
            ////TraceUtil.Log("============>>>>>>>>>.UnitValue.UNIT_FIELD_LEVEL" + sMsgPropCreateEntity_SC_NPC.UnitValue.UNIT_FIELD_LEVEL);
            ////TraceUtil.Log("============>>>>>>>>>.NPCValue.CREATURE_FIELD_CAN_TALK" + sMsgPropCreateEntity_SC_NPC.NPCValue.CREATURE_FIELD_CAN_TALK);

            //string npcName = "NPC_QHY";
            //var npcPrefab = this.FindByName(npcName);
            ////TraceUtil.Log("npcID==========" + sMsgPropCreateEntity_SC_NPC.BaseValue.OBJECT_FIELD_ENTRY_ID);
            var npcPrefab = NPCConfigManager.Instance.NPCConfigList[sMsgPropCreateEntity_SC_NPC.BaseValue.OBJECT_FIELD_ENTRY_ID].NPCPrefab;
            var pos       = Vector3.zero;
            pos = pos.GetFromServer(sMsgPropCreateEntity_SC_NPC.NPCX, sMsgPropCreateEntity_SC_NPC.NPCY);
            //var pos = new Vector3(100, 0, -100);
            //sMsgPropCreateEntity_SC_NPC.UnitValue.UNIT_FIELD_DIR
            Quaternion npcDir = Quaternion.Euler(0, (float)sMsgPropCreateEntity_SC_NPC.UnitValue.UNIT_FIELD_DIR / 1000f, 0);

            ////TraceUtil.Log("NPC333333333333333333333333NPC===" + sMsgPropCreateEntity_SC_NPC.UnitValue.UNIT_FIELD_DIR);
            var npc = (GameObject)GameObject.Instantiate(npcPrefab, pos, npcDir);

            var npcBehaviour = npc.GetComponent <NPCBehaviour>();

            string npcName    = NPCConfigManager.Instance.NPCConfigList[sMsgPropCreateEntity_SC_NPC.BaseValue.OBJECT_FIELD_ENTRY_ID]._szName;
            string szNpcTitle = NPCConfigManager.Instance.NPCConfigList[sMsgPropCreateEntity_SC_NPC.BaseValue.OBJECT_FIELD_ENTRY_ID]._npcTitle;
            var    npcTitleGo = (GameObject)GameObject.Instantiate(NpcTitle, Vector3.left * 2000, Quaternion.identity);
            npcTitleGo.transform.parent     = BattleManager.Instance.UICamera.transform;
            npcTitleGo.transform.localScale = new Vector3(20, 20, 20);
            npcTitleGo.GetComponent <NPCTitle>().SetNpcTitle(npcName, szNpcTitle, npc.transform.FindChild("NPCTitle").position);

            npcBehaviour.NPCDataModel = sMsgPropCreateEntity_SC_NPC;

            EntityModel npcDataModel = new EntityModel();
            npcDataModel.Behaviour        = npcBehaviour;
            npcDataModel.GO               = npc;
            npcDataModel.EntityDataStruct = sMsgPropCreateEntity_SC_NPC;

            NPCManager.GetInstance();
            EntityController.Instance.RegisteEntity(entityDataStruct.SMsg_Header.uidEntity, npcDataModel);
            break;
        }
    }
Beispiel #2
0
    private void CreatePlayer(IEntityDataStruct entityDataStruct, EntityModelPartial entityModelPartial)
    {
        //if(GameManager.Instance.CurrentState == GameManager.GameState.GAME_STATE_STORYLINE)
        //{
        //	return;
        //}


        switch (entityModelPartial)
        {
        case EntityModelPartial.DataStruct:
            EntityModel playerDataModel = new EntityModel();
            playerDataModel.EntityDataStruct = entityDataStruct;
            EntityController.Instance.RegisteEntity(entityDataStruct.SMsg_Header.uidEntity, playerDataModel);

            break;

        case EntityModelPartial.GameObject:

            if (null == PlayerManager.Instance.FindPlayerByActorId(((IPlayerDataStruct)entityDataStruct).PlayerActorID))
            {
                return;
            }
            //应该按ID或类型读配置加载不同的角色。
            bool  isHero = entityDataStruct.SMsg_Header.nIsHero == 1;
            float x = 100, z = -100;

            byte kind             = 0;
            int  fashionId        = 0;
            var  playerDataStruct = (IPlayerDataStruct)entityDataStruct;
            x         = playerDataStruct.PlayerX;
            z         = playerDataStruct.PlayerY;
            kind      = (byte)playerDataStruct.GetCommonValue().PLAYER_FIELD_VISIBLE_VOCATION;
            fashionId = playerDataStruct.GetCommonValue().PLAYER_FIELD_VISIBLE_FASHION;

            bool inTown     = GameManager.Instance.CurrentState == GameManager.GameState.GAME_STATE_TOWN;
            var  configData = inTown ?
                              PlayerDataManager.Instance.GetTownItemData(kind)
                    : PlayerDataManager.Instance.GetBattleItemData(kind);

            if (configData == null)
            {
                TraceUtil.Log("角色类型:" + kind + " 找不到配置信息");
            }
            var fashionItem = ItemDataManager.Instance.GetItemData(fashionId);

            var player = AssemblyPlayer(configData, kind, isHero, fashionItem == null?null:fashionItem._ModelId);

            player.layer = isHero?10:18;             //Player
            var heroBehaviour = player.AddComponent <PlayerBehaviour>();
            player.AddComponent <PlayerHurtFlash>(); //增加被攻击或者爆气特效脚本
            //heroBehaviour.ClickPointEffect = HeroClickPointEffect;   主角点击场面的反馈特效。
            var shadowEff = GameObject.Instantiate(configData.ShadowEffect) as GameObject;
            shadowEff.name                    = "shadow";
            shadowEff.transform.parent        = player.transform;
            shadowEff.transform.localPosition = new Vector3(0, 1, 0);
            //cache hurt point
            heroBehaviour.CacheHurtPoint();
            heroBehaviour.CacheShadow();

            PlayerGenerateConfigData battleConfig = PlayerDataManager.Instance.GetBattleItemData(kind);
            if (null != battleConfig.RunEffect)
            {
                GameObject runEff = GameObject.Instantiate(battleConfig.RunEffect) as GameObject;
                runEff.name                    = "run_effect";
                runEff.transform.parent        = player.transform;
                runEff.transform.localPosition = Vector3.zero;
                runEff.transform.localScale    = Vector3.one;
                heroBehaviour.CacheRunEffect();
            }


            var UIConfig = PlayerDataManager.Instance.GetUIItemData(kind);
            heroBehaviour.HitFlyHeight      = UIConfig.HitFlyHeight;
            heroBehaviour.BeBeAttackBreakLV = UIConfig.BeAttackBreakLV;
            heroBehaviour.BeHitFlyBreakLV   = UIConfig.BeHitFlyBreakLV;

            heroBehaviour.PlayerKind = kind;

            var playerPosition = new Vector3(0, 0.1f, 0);
            playerPosition = playerPosition.GetFromServer(x, z);

            player.transform.position = playerPosition;
            Quaternion playerDir = Quaternion.Euler(0, (float)playerDataStruct.GetUnitValue().sMsgPropCreateEntity_SC_UnitVisibleValue.UNIT_FIELD_DIR / 1000.0f, 0);
            player.transform.rotation = playerDir;

            TypeID type;
            heroBehaviour.EntityModel = EntityController.Instance.GetEntityModel(entityDataStruct.SMsg_Header.uidEntity, out type);

            if (isHero)
            {
                player.AddComponent <DontDestroy>();
            }
            else
            {
                if (GameManager.Instance.CurrentState == GameManager.GameState.GAME_STATE_BATTLE)
                {
                    //加入箭头挂载脚本
                        #if !UNITY_EDITOR
                    ArrowManager.Instance.AddTeammateArrow(player);
                        #endif
                }
            }

            #region 加入称号动画 (去掉)

            /*
             * int prestigeLevel = playerDataStruct.GetCommonValue().PLAYER_FIELD_VISIBLE_PRESTIGE_LEVEL;
             * var prestigeData = PlayerDataManager.Instance.GetPlayerPrestigeList().SingleOrDefault(p => p._pvpLevel == prestigeLevel);
             * if (prestigeData != null)
             * {
             *  GameObject medalPrefab = prestigeData._titlePrefab;
             *  if (medalPrefab != null)
             *  {
             *      GameObject medal = (GameObject)Instantiate(medalPrefab);
             *      MedalEffectBehaviour medalBehaviour = medal.AddComponent<MedalEffectBehaviour>();
             *      medalBehaviour.SetHeroTransform(heroBehaviour.transform);
             *      if (entityDataStruct.SMsg_Header.IsHero)
             *      {
             *          medal.AddComponent<DontDestroy>();
             *      }
             *      MedalManager.Instance.RegisterMedal(entityDataStruct.SMsg_Header.uidEntity, prestigeLevel, medalBehaviour);
             *  }
             * }
             */
            #endregion

            //加入头顶名字
            //if (playerDataStruct is SMsgPropCreateEntity_SC_MainPlayer)
            //{
            //    CreateTitle(((SMsgPropCreateEntity_SC_MainPlayer)playerDataStruct).Name, isHero, player.transform);
            //}
            if (GameManager.Instance.CurrentState != GameManager.GameState.GAME_STATE_PLAYERROOM && playerDataStruct is SMsgPropCreateEntity_SC_OtherPlayer)
            {
                var title = CreateTitle(entityDataStruct.SMsg_Header.uidEntity, ((SMsgPropCreateEntity_SC_OtherPlayer)playerDataStruct).Name, isHero, player.transform);
                heroBehaviour.PlayerTitleRef = title;
            }


            //称号
            //CreateTitle(entityDataStruct.SMsg_Header.uidEntity,player.transform);


            PlayerManager.Instance.AttachEntityDataModel(player, entityDataStruct.SMsg_Header.uidEntity);
            PlayerManager.Instance.AttachEntityDataModel(heroBehaviour, entityDataStruct.SMsg_Header.uidEntity);

            if (GameManager.Instance.CurrentState == GameManager.GameState.GAME_STATE_BATTLE)
            {
                GameManager.Instance.TryFindCameraTarget();
            }

            //根据当前游戏场景,改变玩家的技能,武器挂载等
            ////TraceUtil.Log("根据当前游戏场景,改变玩家的技能,武器挂载等在PlayerFactory");
            PlayerManager.Instance.PlayerChangeScene(GameManager.Instance.CurrentState, entityDataStruct.SMsg_Header.uidEntity);
            //PlayerManager.Instance.PlayerCreateProcess(player, heroBehaviour,GameManager.Instance.CurrentState);
            break;
        }
    }