/// <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(); }); }
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); }
/// <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); }
/// <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(); }
/// <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() }); }); }