unityzgy/.svn/pristine/47/47b570bf149e880f801f510772ea46129eed2eb2.svn-base
ayuan9957 bf12e02276 feat: 多语言本地化系统 - 支持中/英/法/俄实时切换
- LocalizationManager: 新增翻译表(SetFormatted/SetDuration/LocalizeOperateMsg)
- LoginPanel: InputField placeholder本地化、字体颜色保持
- HistoryPanel: 用时数据本地化、placeholder本地化
- RecordDetailPanel: 操作详情消息本地化(LanguageChanged重建)
- AppraiseWindowBase: 评价等级本地化、操作消息重建
- EditorAppraiser: 所有评估消息改用InjectOperateMsgLocalized
- StudentOperateRecorder: 新增InjectOperateMsgLocalized方法
- LocalizationLanguageTestBar: 单例模式、ScreenSpaceOverlay筛选
- 字体切换时保留颜色和verticalOverflow
2026-07-16 10:05:59 +08:00

158 lines
4.1 KiB
Plaintext

using UnityEngine;
using System.Collections;
#if ENVIRO_PHOTON_SUPPORT
using Photon.Pun;
[RequireComponent(typeof (PhotonView))]
[AddComponentMenu("Enviro/Integration/PhotonSynchronization")]
#endif
#if ENVIRO_PHOTON_SUPPORT
public class EnviroPhotonIntegration : MonoBehaviourPunCallbacks, IPunObservable
{
#else
public class EnviroPhotonIntegration : MonoBehaviour
{
#endif
#if ENVIRO_PHOTON_SUPPORT
public ViewSynchronization synchronizationType = ViewSynchronization.Unreliable;
public float updateSmoothing = 15f;
private float networkHours;
void Start ()
{
networkHours = EnviroSkyMgr.instance.GetUniversalTimeOfDay();
photonView.ObservedComponents[0] = this;
photonView.Synchronization = synchronizationType;
}
public override void OnJoinedRoom()
{
if (PhotonNetwork.IsMasterClient)
{
EnviroSkyMgr.instance.Weather.updateWeather = true;
EnviroSkyMgr.instance.OnZoneWeatherChanged += (EnviroWeatherPreset type, EnviroZone zone) => {
SendWeatherToClient (type, zone);
};
EnviroSkyMgr.instance.OnSeasonChanged += (EnviroSeasons.Seasons season) => {
SendSeasonToClient (season);
};
}
else
{
EnviroSkyMgr.instance.Time.ProgressTime = EnviroTime.TimeProgressMode.None;
EnviroSkyMgr.instance.Weather.updateWeather = false;
EnviroSkyMgr.instance.Seasons.calcSeasons = false;
StartCoroutine (GetWeather ());
}
}
IEnumerator GetWeather ()
{
yield return 0;
photonView.RPC("GetWeatherAndSeason", RpcTarget.MasterClient);
}
public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
{
if (stream.IsWriting)
{
stream.SendNext(EnviroSkyMgr.instance.GetTimeOfDay());
stream.SendNext(EnviroSkyMgr.instance.GetCurrentDay());
stream.SendNext(EnviroSkyMgr.instance.GetCurrentYear());
}
else
{
networkHours = (float) stream.ReceiveNext();
EnviroSkyMgr.instance.Time.Days = (int) stream.ReceiveNext();
EnviroSkyMgr.instance.Time.Years = (int) stream.ReceiveNext();
}
}
void SendWeatherToClient (EnviroWeatherPreset type, EnviroZone zone)
{
int weatherID = 0;
int zoneID = 0;
for(int i = 0; i < EnviroSkyMgr.instance.Weather.weatherPresets.Count; i++)
{
if (EnviroSkyMgr.instance.Weather.weatherPresets [i] == type)
weatherID = i;
}
for (int i = 0; i < EnviroSkyMgr.instance.Weather.zones.Count; i++)
{
if (EnviroSkyMgr.instance.Weather.zones [i] == zone)
zoneID = i;
}
photonView.RPC("SendWeatherUpdate", RpcTarget.OthersBuffered,weatherID,zoneID);
}
void SendSeasonToClient (EnviroSeasons.Seasons s)
{
photonView.RPC("SendSeasonUpdate",RpcTarget.OthersBuffered,(int)s);
}
[PunRPC]
void GetWeatherAndSeason ()
{
for (int i = 0; i < EnviroSkyMgr.instance.Weather.zones.Count; i++)
{
SendWeatherToClient(EnviroSkyMgr.instance.Weather.zones[i].currentActiveZoneWeatherPreset, EnviroSkyMgr.instance.Weather.zones[i]);
}
SendSeasonToClient(EnviroSkyMgr.instance.Seasons.currentSeasons);
}
[PunRPC]
void SendWeatherUpdate (int id, int zone)
{
EnviroSkyMgr.instance.ChangeZoneWeather(zone, id);
}
[PunRPC]
void SendSeasonUpdate (int id)
{
switch (id)
{
case 0:
EnviroSkyMgr.instance.Seasons.currentSeasons = EnviroSeasons.Seasons.Spring;
break;
case 1:
EnviroSkyMgr.instance.Seasons.currentSeasons = EnviroSeasons.Seasons.Summer;
break;
case 2:
EnviroSkyMgr.instance.Seasons.currentSeasons = EnviroSeasons.Seasons.Autumn;
break;
case 3:
EnviroSkyMgr.instance.Seasons.currentSeasons = EnviroSeasons.Seasons.Winter;
break;
}
}
void Update ()
{
if (EnviroSkyMgr.instance == null || !EnviroSkyMgr.instance.IsAvailable())
return;
if (!PhotonNetwork.IsMasterClient)
{
if (networkHours < 0.5f && EnviroSkyMgr.instance.Time.Hours > 23f)
EnviroSkyMgr.instance.SetTimeOfDay(networkHours);
EnviroSkyMgr.instance.SetTimeOfDay(Mathf.Lerp (EnviroSkyMgr.instance.GetTimeOfDay(), (float)networkHours, Time.deltaTime * updateSmoothing));
}
}
#endif
}