Ejemplo n.º 1
0
    public override bool Init(InitBaseData initData, Action callback = null)
    {
        gameObject.layer = LayerMask.NameToLayer(GAMELAYER.ObjLogic);

        if (!base.Init(initData))
        {
            return(false);
        }
        mBackupDir      = Direction;
        TargetDirection = Direction;
        mNextPopTime    = DateTime.Now.AddSeconds(Random.Range(5, 12));
        EventDispatcher.Instance.AddEventListener(Event_UpdateMissionData.EVENT_TYPE, OnMissionUpdate);


        {
//如果是带Collider的就先给加上,免得后面Load模型有延迟
            if (null != TableNPC && TableNPC.NPCStopRadius > 0.1f)
            {
                var radius = TableNPC.NPCStopRadius;

                var collider = gameObject.GetComponent <SphereCollider>();
                if (null == collider)
                {
                    collider = gameObject.AddComponent <SphereCollider>();
                }
                collider.radius  = radius;
                gameObject.layer = LayerMask.NameToLayer(GAMELAYER.Collider);
            }
        }
        return(true);
    }
Ejemplo n.º 2
0
    public override bool Init(InitBaseData initData, Action callback = null)
    {
        State = ObjState.LogicDataInited;

        var init = initData as InitOtherPlayerData;

        mObjId    = init.ObjId;
        mDataId   = init.DataId;
        EquipList = new Dictionary <int, int>(init.EquipModel);

        Position  = new Vector3(initData.X, initData.Y, initData.Z);
        Direction = new Vector3(initData.DirX, 0, initData.DirZ);
        InitTableData();
        InitAnimation();
        InitStateMachine();
        State = ObjState.LoadingResource;
        LoadModelAsync(() =>
        {
            State = ObjState.Normal;
            if (GetAnimationController() == null)
            {
                return;
            }
            GetAnimationController().PlayWithoutLoad(OBJ.CHARACTER_ANI.STAND);
            InitEquip();
            if (null != callback)
            {
                callback();
            }
        });
        return(true);
    }
Ejemplo n.º 3
0
 //初始化
 public virtual bool Init(InitBaseData initData, Action callback = null)
 {
     State   = ObjState.LogicDataInited;
     mObjId  = initData.ObjId;
     mDataId = initData.DataId;
     return(true);
 }
Ejemplo n.º 4
0
    public override bool Init(InitBaseData initData, Action callback = null)
    {
        var data = initData as InitOtherPlayerData;

        foreach (var item in data.TitleList)
        {
            if (TitleList.ContainsKey(item.Key))
            {
                TitleList[item.Key] = item.Value;
            }
            else
            {
                TitleList.Add(item.Key, item.Value);
            }
        }
        AllianceName = data.AllianceName;

        RobotId = data.RobotId;

        if (!base.Init(initData))
        {
            return(false);
        }
        serverId  = data.ServerId;
        AreaState = data.AreaState;

        var tbPvpRule = Table.GetPVPRule(GameLogic.Instance.Scene.TableScene.PvPRule);

        if (tbPvpRule.NameColorRule == (int)NameColorRule.FightingEachOther && GameLogic.Instance.Scene.TableScene.IsHideName == 1)
        {
            Name = GameUtils.GetDictionaryText(220697 + RoleId);
        }
        return(true);
    }
Ejemplo n.º 5
0
    public override bool Init(InitBaseData initData, Action callback = null)
    {
        gameObject.layer = LayerMask.NameToLayer(GAMELAYER.ObjLogic);

        if (!base.Init(initData))
        {
            return(false);
        }
        mBackupDir      = Direction;
        TargetDirection = Direction;
        mNextPopTime    = DateTime.Now.AddSeconds(Random.Range(5, 12));
        EventDispatcher.Instance.AddEventListener(Event_UpdateMissionData.EVENT_TYPE, OnMissionUpdate);


        {
//如果是带Collider的就先给加上,免得后面Load模型有延迟
            if (null != TableNPC && TableNPC.NPCStopRadius > 0.1f)
            {
                var radius = TableNPC.NPCStopRadius;

                var collider = gameObject.GetComponent <SphereCollider>();
                if (null == collider)
                {
                    collider = gameObject.AddComponent <SphereCollider>();
                }
                collider.radius  = radius;
                gameObject.layer = LayerMask.NameToLayer(GAMELAYER.Collider);
            }
        }
        var temp = initData.TargetInfo.Split('|');

        if (3 == temp.Length)
        {
            int dataId = -1;
            int roleID = -1;
            if (!string.IsNullOrEmpty(temp[0]) && int.TryParse(temp[1], out roleID) && int.TryParse(temp[2], out dataId))
            {
                CharacterBaseData.TargetPlayerName = temp[0];
                var rebornLevel = Table.GetTransmigration(dataId);
                CharacterBaseData.TargetPlayerDataId = GameUtils.GetRebornSquareIconId(roleID, dataId);
                ////剑士
                //if (roleID == 0)
                //{
                //    CharacterBaseData.TargetPlayerDataId = rebornLevel.zsRebornIconSquare;
                //}
                ////法师
                //if (roleID == 1)
                //{
                //    CharacterBaseData.TargetPlayerDataId = rebornLevel.fsRebornIconSquare;
                //}
                ////弓手
                //if (roleID == 2)
                //{
                //    CharacterBaseData.TargetPlayerDataId = rebornLevel.gsRebornIconSquare;
                //}
            }
        }
        return(true);
    }
Ejemplo n.º 6
0
    public override bool Init(InitBaseData initData, Action callback = null)
    {
        if (!base.Init(initData))
        {
            return(false);
        }
        var retinueData = initData as InitRetinueData;

        if (retinueData == null)
        {
            return(false);
        }
        OwnerId = retinueData.Owner;
        return(true);
    }
Ejemplo n.º 7
0
    //初始化
    public override bool Init(InitBaseData initData, Action callback = null)
    {
        State = ObjState.LogicDataInited;

        var init = initData as InitOtherPlayerData;

        //mObjId = init.ObjId;
        mObjId    = ulong.MaxValue;
        mDataId   = init.DataId;
        EquipList = new Dictionary <int, int>(init.EquipModel);
        //mNavMeshAgent.enabled = true;
        mIsMoving         = false;
        SyncDirectionFlag = true;
        Position          = new Vector3(initData.X, initData.Y, initData.Z);
        Direction         = new Vector3(initData.DirX, 0, initData.DirZ);
        InitTableData();
        InitAnimation();

        PrepareAnimation(OBJ.CHARACTER_ANI.STAND);

        LoadResourceAction = () =>
        {
            if (State == ObjState.Deleted)
            {
                return;
            }
            State = ObjState.LoadingResource;
            LoadModelAsync(() =>
            {
                State = ObjState.Normal;
                if (GetAnimationController() == null)
                {
                    return;
                }
                InitEquip(SyncLoadModel);
                InitShadow(mIsDynamicShadow,
                           mIsDynamicShadow ? LayerMask.GetMask(GAMELAYER.CGMainPlayer) : LayerMask.GetMask(GAMELAYER.CG));
                PlayAnimation(OBJ.CHARACTER_ANI.STAND);

                if (null != callback)
                {
                    callback();
                }
            });
        };

        return(true);
    }
Ejemplo n.º 8
0
    //初始化
    public override bool Init(InitBaseData initData, Action callback = null)
    {
        State = ObjState.LogicDataInited;

        var init = initData as InitOtherPlayerData;

        mObjId = init.ObjId;
        //mObjId = ulong.MaxValue;
        mDataId   = init.DataId;
        EquipList = new Dictionary <int, int>(init.EquipModel);

        Position  = new Vector3(initData.X, initData.Y, initData.Z);
        Direction = new Vector3(initData.DirX, 0, initData.DirZ);

        InitTableData();
        InitAnimation();
        if (IsPlayerModel())
        {
            PrepareAnimation(OBJ.CHARACTER_ANI.STAND);
        }

        LoadResourceAction = () =>
        {
            if (State == ObjState.Deleted)
            {
                return;
            }
            State = ObjState.LoadingResource;
            LoadModelAsync(() =>
            {
                State = ObjState.Normal;
                if (GetAnimationController() == null)
                {
                    return;
                }
                InitEquip(SyncLoadModel);
                PlayAnimation(OBJ.CHARACTER_ANI.STAND);

                if (null != callback)
                {
                    callback();
                }
            });
        };

        return(true);
    }
Ejemplo n.º 9
0
    private void AssignInitBaseData(InitBaseData init, ObjData data)
    {
        init.ObjId  = data.ObjId;
        init.DataId = data.DataId;
        init.Name   = data.Name;
        init.Level  = data.Level;
        init.DirX   = GameUtils.DividePrecision(data.Pos.Dir.x);
        init.DirZ   = GameUtils.DividePrecision(data.Pos.Dir.y);
        init.X      = GameUtils.DividePrecision(data.Pos.Pos.x);
        init.Z      = GameUtils.DividePrecision(data.Pos.Pos.y);
        init.Y      = GameLogic.GetTerrainHeight(init.X, init.Z);

        init.HpNow   = data.HpNow;
        init.HpMax   = data.HpMax;
        init.MpNow   = data.MpMow;
        init.MpMax   = data.MpMax;
        init.Reason  = (ReasonType)data.Reason;
        init.ModelId = data.ModelId;
    }
Ejemplo n.º 10
0
    public override bool Init(InitBaseData initData, Action callback = null)
    {
        if (!base.Init(initData))
        {
            return(false);
        }
        var retinueData = initData as InitRetinueData;

        if (retinueData == null)
        {
            return(false);
        }
        OwnerId = retinueData.Owner;

        if (OwnerId >= 100000000 && OwnerId != ObjManager.Instance.MyPlayer.GetObjId())
        {
            gameObject.layer = LayerMask.NameToLayer(GAMELAYER.OhterPlayer);
        }
        return(true);
    }
Ejemplo n.º 11
0
    //初始化
    public override bool Init(InitBaseData initData, Action callback = null)
    {
        base.Init(initData);

        Reset();

        var data = initData as InitDropItemData;

        if (data == null)
        {
            return(false);
        }
        mOwnerIsMe       = false;
        mCanAutoPickup   = true;
        HasAutoFightMove = false;
        var player = ObjManager.Instance.MyPlayer;

        if (player)
        {
            if (data.Owner.Contains(player.GetObjId()))
            {
                mOwnerIsMe = true;
                //mCanAutoPickup = true;
            }
            else if (data.Owner.Count <= 0)
            {
//新增,这种是谁都可以拾取的
                mOwnerIsMe = true;
            }
        }
        mOwnerPickUpProtectionTime = Game.Instance.ServerTime.AddSeconds(data.RemianSeconds);
        mLifeTime = DateTime.Now.AddSeconds(TotalLifeTime);

        //float height = GameLogic.Instance.Scene.GetTerrainHeight(data.TargetPos) + 0.1f;
        //mTargetPos = new Vector3(data.TargetPos.x, height, data.TargetPos.y);

        if (-1 == TerrainLayerMask)
        {
            TerrainLayerMask = LayerMask.GetMask(GAMELAYER.ShadowReceiver);
        }
        var        ray = new Ray(new Vector3(data.TargetPos.x, 50, data.TargetPos.y), Vector3.down);
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit, 80, TerrainLayerMask))
        {
            mTargetPos    = hit.point;
            mTargetPos.y += 0.1f;
        }
        else
        {
            var height = GameLogic.GetTerrainHeight(data.TargetPos.x, data.TargetPos.y) + 0.1f;
            mTargetPos = new Vector3(data.TargetPos.x, height, data.TargetPos.y);
        }

        LoadResourceAction = () =>
        {
            if (State == ObjState.Deleted)
            {
                return;
            }

            State = ObjState.LoadingResource;
            LoadRes(() =>
            {
                State = ObjState.Normal;
                if (true != data.PlayDrop)
                {
                    //不需要播放掉落动画
                    Position = mTargetPos;
                    mState   = DropItemState.StayOnGround;

                    // 初始特效
                    if (mTableData != null && mTableData.Quality > 0 && !mEffect)
                    {
                        var resource = Table.GetClientConfig(600 + mTableData.Quality);

                        if (!string.IsNullOrEmpty(resource.Value))
                        {
                            CreateQualityEffect(resource.Value, o =>
                            {
                                if (DropItemState.StayOnGround != mState && DropItemState.Droping != mState)
                                {
                                    ComplexObjectPool.Release(o);
                                    mEffect = null;
                                }
                            });
                        }
                    }
                }
                else
                {
                    //需要播放掉落动画
                    StartCoroutine(Delay());
                    mState = DropItemState.Delay;
                }

                if (null != callback)
                {
                    callback();
                }

                mController = mModel.GetComponent <DropItemController>();
                if (null != mController)
                {
                    mController.ShowModel(true);
                    mController.ShowEffect(false);
                }
            });
        };

        EventDispatcher.Instance.AddEventListener(EquipBagNotFullChange.EVENT_TYPE, OnEquipRecycleSuccess);
        EventDispatcher.Instance.AddEventListener(UIEvent_PickSettingChanged.EVENT_TYPE, OnPickupSettingChanged);
        if (mOwnerIsMe)
        {
            ObjManager.Instance.MyPlayer.AutoCombat.AddDropPos(this);
        }
        return(true);
    }
Ejemplo n.º 12
0
    private void CreateObjAsync <T>(InitBaseData initData,
                                    string prefabPath,
                                    GameObject root     = null,
                                    Action <T> callBack = null)
        where T : ObjBase
    {
        if (mObjDict.ContainsKey(initData.ObjId))
        {
            Logger.Warn("mObjPool.ContainsKey[{0}]", initData.ObjId.ToString());
            RemoveObj(initData.ObjId);
        }

        //ResourceManager.PrepareResource<GameObject>(prefabPath, prefab =>
        {
            var pos         = new Vector3(initData.X, initData.Y, initData.Z);
            var go          = ComplexObjectPool.NewObjectSync(prefabPath);
            var goTransform = go.transform;

            goTransform.localPosition = pos;
            goTransform.localRotation = Quaternion.identity;

            if (null != root)
            {
                goTransform.parent = root.transform;
            }
#if UNITY_EDITOR
            go.name = string.Format("[{0}]({1})_{2}", initData.Name, initData.DataId, initData.ObjId);
#endif
            go.SetActive(true);
            var obj = go.GetComponent <T>();
            try
            {
                obj.Init(initData, () =>
                {
                    if (null != callBack)
                    {
                        callBack(obj);
                    }
                });
            }
            catch (Exception e)
            {
                Logger.Error("Create obj[{0}] failed! error:[{1}]", initData.ObjId, e.ToString());
#if !UNITY_EDITOR
                ComplexObjectPool.Release(go);
#endif
            }

            if (initData.UseFakeModel)
            {
                mFakeList.Add(initData.ObjId);
            }

            mObjDict.Add(initData.ObjId, obj);
            if (!IsInit)
            {
                Table.ForeachWarFlag((tb) =>
                {
                    WarFlagDictionary.Add(tb.Id, tb.FlagModel);
                    return(true);
                });
                IsInit = true;
            }
            if (WarFlagDictionary.ContainsValue(initData.DataId))
            {
                EventDispatcher.Instance.DispatchEvent(new UpdateWarFlagModelEvent(initData.ObjId, 0, initData.DataId));
            }
            else if (GameUtils.GetNpcLodeID(initData.DataId) > 0)
            {
                EventDispatcher.Instance.DispatchEvent(new UpdateWarFlagModelEvent(initData.ObjId, 1, initData.DataId));
            }
            else
            {
                var e1 = new Character_Create_Event(initData.ObjId);
                EventDispatcher.Instance.DispatchEvent(e1);
            }
            //Logger.Info("CreateObjAsync Obj[{0}]", initData.ObjId.ToString());
        }
        //);
    }