Esempio n. 1
0
        /// <summary>
        /// 設定主/副建築資料
        /// </summary>
        private void initBuildInfo()
        {
            SceneObj sceneObj;

            if (GameCore.NetData.TryGetSceneObjData(Id, out sceneObj) == false)
            {
                return;
            }

            CastleObj castleObj = sceneObj as CastleObj;

            if (castleObj.OwnerIsSelf() == false && castleObj.GetBuildCount() == 0)
            {
                return;
            }

            // 產生建築資訊
            var etor = castleObj.GetBuilds();

            while (etor.MoveNext())
            {
                builds.Add(BuildInfo.Create(etor.Current, sceneObj.OwnerId()));
            }

            // 產生建築GridRoot
            gridHex.Release();
            gridHex.LoadEntity(new MiscEntityData(GameCore.Entity.GenerateSerialId(), gridHexAssetName),
                               (entity) =>
            {
                entity.CachedTransform.position = CachedTransform.position;
                gridHex.entity.OnZoom(GameCore.Zoom.Last3DLerp * Constant.NetData.FloatRevert);
                createBuilds();
            });
        }
Esempio n. 2
0
        private void onResetBuilding(object sender, GameEventArgs e)
        {
            var eventArgs = e as NetDataEvent.ResetBuildingEvent;

            if (eventArgs == null)
            {
                return;
            }

            SceneObj sceneObj;

            if (GameCore.NetData.TryGetSceneObjData(GameCore.NetData.SelfCastle.Guid, out sceneObj) == false)
            {
                return;
            }

            CastleObj castle = sceneObj as CastleObj;

            castle.SetResetBuildingFlag(eventArgs.PosIndex);
        }
Esempio n. 3
0
        /// <summary>
        /// 根據GUID產生對應的主堡外觀
        /// </summary>
        /// <param name="guid"></param>
        private void createCastleEntity(int guid)
        {
            SceneObj sceneObj;

            if (GameCore.NetData.TryGetSceneObjData(guid, out sceneObj) == false)
            {
                return;
            }

            if (GameCore.Entity.HasEntity(guid))
            {
                return;
            }

            CastleObj        castle = sceneObj as CastleObj;
            CastleEntityData data   = new CastleEntityData(castle.Guid(), BuildingData.GetCastle(castle.Culture(), castle.Population()).prefab)
            {
                Position = castle.Position()
            };

            GameCore.Entity.ShowCastle(data);
        }
Esempio n. 4
0
        /// <summary>
        /// 伺服器更新主堡資料
        /// </summary>
        public override void Refresh(object userData)
        {
            if (hudEntReq != null && hudEntReq.entity != null)
            {
                hudEntReq.entity.Refresh(userData);
            }

            SceneObj sceneObj;

            if (GameCore.NetData.TryGetSceneObjData(Id, out sceneObj) == false)
            {
                return;
            }

            CastleObj castleObj = sceneObj as CastleObj;

            if (castleObj.GetBuildCount() == 0)
            {
                return;
            }

            // 產生建築資訊
            var etor = castleObj.GetBuilds();

            while (etor.MoveNext())
            {
                if (etor.Current.IsNew == false)
                {
                    continue;
                }

                builds.Add(BuildInfo.Create(etor.Current, sceneObj.OwnerId()));
            }

            createBuilds();
        }
Esempio n. 5
0
        /// <summary>
        /// 根據提升的人口數改變主城外觀
        /// </summary>
        private void upgradeSelfCastle()
        {
            SceneObj sceneObj;

            if (GameCore.NetData.TryGetSceneObjData(GameCore.NetData.SelfCastle.Guid, out sceneObj) == false)
            {
                return;
            }

            CastleObj castle = sceneObj as CastleObj;

            var  newPrefab        = BuildingData.GetCastle(castle.Culture(), castle.Population()).prefab;
            int  scaffoldSerialID = 0;
            bool haveOldCastle    = false;

            if (GameCore.Entity.HasEntity(GameCore.NetData.SelfCastle.Guid))
            {
                var castleEntity = GameCore.Entity.GetEntity(GameCore.NetData.SelfCastle.Guid);

                // 人口提升後仍使用相同主堡外觀
                if (System.IO.Path.GetFileNameWithoutExtension(castleEntity.EntityAssetName).Equals(newPrefab))
                {
                    return;
                }

                haveOldCastle = true;

                // 顯示鷹架
                scaffoldSerialID = GameCore.Entity.GenerateSerialId();
                GameCore.Entity.ShowMisc(new MiscEntityData(scaffoldSerialID, Constant.Resource.Scaffold)
                {
                    Position = castle.Position()
                });
            }

            MEC.Timing.CallDelayed(Constant.Resource.ConstructTime, () =>
            {
                // 隱藏舊主堡
                if (haveOldCastle)
                {
                    GameCore.Entity.HideEntity(GameCore.NetData.SelfCastle.Guid);
                }

                // 移除鷹架
                GameCore.Entity.HideEntity(scaffoldSerialID);

                // 顯示新主堡
                CastleEntityData data = new CastleEntityData(GameCore.NetData.SelfCastle.Guid, newPrefab)
                {
                    Position = castle.Position()
                };
                GameCore.Entity.ShowCastle(data);

                // 播放建設完成特效
                int fxSerialID = GameCore.Entity.GenerateSerialId();
                GameCore.Entity.ShowParticle(new ParticleEntityData(fxSerialID, Constant.Resource.ConstructFX, 0)
                {
                    Position = castle.Position()
                });
            });
        }