예제 #1
0
    public void CreateObj(int dataId, int colorId)
    {
        if (mObjElf != null)
        {
            mObjElf.Destroy();
            mObjElf = null;
        }
        if (dataId == -1)
        {
            return;
        }

        var angle = gameObject.transform.rotation.eulerAngles.y;

        angle += 90.0f;
        var temp = Owner.Position;

        temp.x += (float)Math.Cos(angle) * Radius;
        temp.z += (float)Math.Sin(angle) * Radius;
        NavMeshHit hit;

        if (NavMesh.Raycast(Owner.Position, temp, out hit, -1))
        {
            temp = hit.position;
        }

        InitBaseData initData = new InitOtherPlayerData
        {
            ObjId   = 0,
            DataId  = dataId,
            X       = temp.x,
            Y       = temp.y,
            Z       = temp.z,
            DirX    = 1,
            DirZ    = 0,
            Name    = "",
            RobotId = 0ul
        };

        var go  = ComplexObjectPool.NewObjectSync(Resource.PrefabPath.Elf);
        var elf = go.GetComponent <ObjElf>();

        elf.Init(initData, () =>
        {
            mObjElf = elf;
            mObjElf.OnElfMoveOver = OnElfMoveOver;
            mObjElf.DoIdle();
            var character = gameObject.GetComponent <ObjCharacter>();
            if (character)
            {
                mObjElf.SetMoveSpeed(character.GetMoveSpeed() + 0.08f);
                ObjFakeCharacter.ChangeColor(mObjElf.GetModel(), colorId);
            }
        });
        go.SetActive(true);
    }
예제 #2
0
파일: Actor.cs 프로젝트: pikaqiufk/Client
    public static Actor Create(int dateId,
                               Dictionary <int, int> equipList = null,
                               Action <Actor> callback         = null,
                               int layer          = 0,
                               bool sync          = false,
                               bool dynamicShadow = false)
    {
        var initData = new InitOtherPlayerData
        {
            ObjId     = 0,
            DataId    = dateId,
            X         = Offset += 10,
            Y         = -1000,
            Z         = -2000,
            DirX      = 1,
            DirZ      = 0,
            Name      = "",
            IsDead    = false,
            IsMoving  = false,
            MoveSpeed = 0,
            Camp      = 0,
            RobotId   = 0ul
        };

        if (null != equipList)
        {
            {
                // foreach(var pair in equipList)
                var __enumerator2 = (equipList).GetEnumerator();
                while (__enumerator2.MoveNext())
                {
                    var pair = __enumerator2.Current;
                    {
                        initData.EquipModel.Add(pair.Key, pair.Value);
                    }
                }
            }
        }

        var go = ComplexObjectPool.NewObjectSync(Resource.PrefabPath.Actor);

        go.layer = layer;
        var character = go.GetComponent <Actor>();

        character.mIsDynamicShadow = dynamicShadow;
        character.SyncLoadModel    = sync;
#if UNITY_EDITOR
        go.name = "Actor" + "_" + initData.ObjId;
#endif
        character.Init(initData, () => { callback(character); });
        go.SetActive(true);
        return(character);
    }
예제 #3
0
    public void CreateOtherPlayerAsync(InitOtherPlayerData initData, Action <ObjOtherPlayer> callBack = null)
    {
        GameObject root = null;

        if (null != GameLogic.Instance && null != GameLogic.Instance.Scene)
        {
            root = GameLogic.Instance.Scene.OtherPlayerRoot;
        }

        if (GameLogic.Instance.Scene.OtherPlayerRootTransform.childCount - mFakeList.Count >
            GameSetting.Instance.MaxVisibleModelCount)
        {
            initData.UseFakeModel = true;
        }

        CreateObjAsync(initData, Resource.PrefabPath.OtherPlayer,
                       root, callBack);
    }
예제 #4
0
    public static ObjFakeCharacter Create(int dateId,
                                          Dictionary <int, int> equipList    = null,
                                          Action <ObjFakeCharacter> callback = null,
                                          int layer       = 0,
                                          bool sync       = false,
                                          int renderQueue = -1,
                                          ulong objId     = 0,
                                          int colorId     = -1)
    {
        var initData = new InitOtherPlayerData
        {
            ObjId     = objId,
            DataId    = dateId,
            X         = Offset += 10,
            Y         = -1000,
            Z         = -2000,
            DirX      = 0,
            DirZ      = 1,
            Name      = "",
            IsDead    = false,
            IsMoving  = false,
            MoveSpeed = 0,
            Camp      = 0,
            RobotId   = 0ul
        };

        if (null != equipList)
        {
            {
                // foreach(var pair in equipList)
                var __enumerator2 = (equipList).GetEnumerator();
                while (__enumerator2.MoveNext())
                {
                    var pair = __enumerator2.Current;
                    {
                        initData.EquipModel.Add(pair.Key, pair.Value);
                    }
                }
            }
        }

        var go = ComplexObjectPool.NewObjectSync(Resource.PrefabPath.FakeCharacter);

        go.layer = layer;
        var character = go.GetComponent <ObjFakeCharacter>();

        character.SyncLoadModel = sync;
        character.RenderQueue   = renderQueue;
#if UNITY_EDITOR
        go.name = "ObjFakeCharacter" + "_" + initData.ObjId;
#endif
        go.SetActive(true);
        var model = character.GetModel();
        if (model != null)
        {
            model.SetActive(false);
        }
        character.Init(initData, () =>
        {
            callback(character);
            model = character.GetModel();
            if (model != null)
            {
                ChangeColor(model, colorId);
                //var frequency = model.GetComponent<AnimationUpdateFrequencyController>();
                //if (frequency)
                //{
                //    frequency.enabled = false;
                //}
                model.SetActive(true);
                //if (!model.animation.isActiveAndEnabled)
                //    model.animation.enabled = true;
            }
        });

        return(character);
    }
예제 #5
0
    public void CreateObj(CreateObjMsg msg)
    {
        if (ObjManager.Instance == null)
        {
            Logger.Log2Bugly("ObjManager.Instance == null");
            return;
        }
        if (PlayerDataManager.Instance == null)
        {
            Logger.Log2Bugly("PlayerDataManager.Instance == null");
            return;
        }
        {
            var __list1      = msg.Data;
            var __listCount1 = __list1.Count;
            for (var __i1 = 0; __i1 < __listCount1; ++__i1)
            {
                var data = __list1[__i1];
                {
                    if (data.ObjId == PlayerDataManager.Instance.GetGuid())
                    {
                        continue;
                    }
                    switch ((OBJ.TYPE)data.Type)
                    {
                    case OBJ.TYPE.NPC:
                    {
                        var init = new InitNPCData();
                        AssignInitCharacterData(init, data);
                        ObjManager.Instance.CreateNPCAsync(init);
                    }
                    break;

                    case OBJ.TYPE.AUTOPLAYER:
                    case OBJ.TYPE.OTHERPLAYER:
                    {
                        var init = new InitOtherPlayerData();
                        if (data.ExtData.Count > 0)
                        {
                            init.ServerId = data.ExtData[0];
                        }
                        for (var i = 0; i < data.Titles.Count; i++)
                        {
                            init.TitleList.Add(i, data.Titles[i]);
                        }
                        if (data.Owner != null && data.Owner.Items != null && data.Owner.Items.Count == 1)
                        {
                            init.RobotId = data.Owner.Items[0];
                        }
                        else
                        {
                            init.RobotId = 0ul;
                        }
                        init.AllianceName = data.AllianceName;
                        AssignInitCharacterData(init, data);
                        ObjManager.Instance.CreateOtherPlayerAsync(init);
                    }
                    break;

                    case OBJ.TYPE.RETINUE:
                    {
                        var init = new InitRetinueData();
                        AssignInitCharacterData(init, data);
                        if (data.Owner != null && data.Owner.Items != null && data.Owner.Items.Count == 1)
                        {
                            init.Owner = data.Owner.Items[0];
                        }
                        ObjManager.Instance.CreateRetinueAsync(init);
                    }
                    break;

                    case OBJ.TYPE.DROPITEM:
                    {
                        var init = new InitDropItemData();
                        AssignInitBaseData(init, data);
                        init.Owner.AddRange(data.Owner.Items);
                        init.RemianSeconds = data.ExtData[0];
                        init.PlayDrop      = 1 == data.ExtData[1] ? true : false;
                        init.TargetPos     = new Vector2(GameUtils.DividePrecision(data.TargetPos[0].x),
                                                         GameUtils.DividePrecision(data.TargetPos[0].y));

                        ObjManager.Instance.CreateDropItemAsync(init);
                    }
                    break;

                    default:
                    {
                        Logger.Fatal("Obj[{0}] is unknow type[{1}]", data.ObjId, data.Type);
                    }
                    break;
                    }
                }
            }
        }
    }