fix:风机初始化代码提交
This commit is contained in:
@@ -0,0 +1,188 @@
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
|
||||
#if ENVIRO_PHOTON_SUPPORT
|
||||
using Photon.Pun;
|
||||
#endif
|
||||
|
||||
namespace Enviro
|
||||
{
|
||||
#if ENVIRO_PHOTON_SUPPORT
|
||||
[RequireComponent(typeof (PhotonView))]
|
||||
[AddComponentMenu("Enviro 3/Integrations/Photon Integration")]
|
||||
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 ()
|
||||
{
|
||||
if(EnviroManager.instance != null && EnviroManager.instance.Time != null)
|
||||
networkHours = EnviroManager.instance.Time.GetTimeOfDay();
|
||||
|
||||
photonView.ObservedComponents[0] = this;
|
||||
photonView.Synchronization = synchronizationType;
|
||||
}
|
||||
|
||||
public override void OnJoinedRoom()
|
||||
{
|
||||
if (PhotonNetwork.IsMasterClient)
|
||||
{
|
||||
EnviroManager.instance.OnZoneWeatherChanged += (EnviroWeatherType type, EnviroZone zone) => {
|
||||
SendWeatherToClient (type, zone);
|
||||
};
|
||||
|
||||
EnviroManager.instance.OnSeasonChanged += (EnviroEnvironment.Seasons season) => {
|
||||
SendSeasonToClient (season);
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
if(EnviroManager.instance.Weather != null)
|
||||
EnviroManager.instance.Weather.globalAutoWeatherChange = false;
|
||||
|
||||
if(EnviroManager.instance.Time != null)
|
||||
EnviroManager.instance.Time.Settings.simulate = false;
|
||||
|
||||
if(EnviroManager.instance.Environment != null)
|
||||
EnviroManager.instance.Environment.Settings.changeSeason = false;
|
||||
|
||||
StartCoroutine (GetWeather ());
|
||||
}
|
||||
}
|
||||
|
||||
IEnumerator GetWeather ()
|
||||
{
|
||||
yield return 0;
|
||||
photonView.RPC("GetWeatherAndSeason", RpcTarget.MasterClient);
|
||||
}
|
||||
|
||||
public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
|
||||
{
|
||||
if(EnviroManager.instance.Time == null)
|
||||
return;
|
||||
|
||||
if (stream.IsWriting)
|
||||
{
|
||||
stream.SendNext(EnviroManager.instance.Time.GetTimeOfDay());
|
||||
stream.SendNext(EnviroManager.instance.Time.days);
|
||||
stream.SendNext(EnviroManager.instance.Time.months);
|
||||
stream.SendNext(EnviroManager.instance.Time.years);
|
||||
}
|
||||
else
|
||||
{
|
||||
networkHours = (float) stream.ReceiveNext();
|
||||
EnviroManager.instance.Time.days = (int) stream.ReceiveNext();
|
||||
EnviroManager.instance.Time.months = (int) stream.ReceiveNext();
|
||||
EnviroManager.instance.Time.years = (int) stream.ReceiveNext();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void SendWeatherToClient (EnviroWeatherType type, EnviroZone zone)
|
||||
{
|
||||
int weatherID = 0;
|
||||
int zoneID = -1;
|
||||
|
||||
for(int i = 0; i < EnviroManager.instance.Weather.Settings.weatherTypes.Count; i++)
|
||||
{
|
||||
if (EnviroManager.instance.Weather.Settings.weatherTypes [i] == type)
|
||||
weatherID = i;
|
||||
}
|
||||
|
||||
for (int i = 0; i < EnviroManager.instance.zones.Count; i++)
|
||||
{
|
||||
if (EnviroManager.instance.zones [i] == zone)
|
||||
zoneID = i;
|
||||
}
|
||||
|
||||
photonView.RPC("SendWeatherUpdate", RpcTarget.OthersBuffered,weatherID,zoneID);
|
||||
}
|
||||
|
||||
void SendSeasonToClient (EnviroEnvironment.Seasons s)
|
||||
{
|
||||
photonView.RPC("SendSeasonUpdate",RpcTarget.OthersBuffered,(int)s);
|
||||
}
|
||||
|
||||
[PunRPC]
|
||||
void GetWeatherAndSeason ()
|
||||
{
|
||||
if(EnviroManager.instance.Weather != null)
|
||||
{
|
||||
for (int i = 0; i < EnviroManager.instance.zones.Count; i++)
|
||||
{
|
||||
SendWeatherToClient(EnviroManager.instance.zones[i].currentWeatherType, EnviroManager.instance.zones[i]);
|
||||
}
|
||||
|
||||
SendWeatherToClient(EnviroManager.instance.Weather.targetWeatherType, null);
|
||||
}
|
||||
|
||||
if(EnviroManager.instance.Environment != null)
|
||||
SendSeasonToClient(EnviroManager.instance.Environment.Settings.season);
|
||||
}
|
||||
|
||||
|
||||
|
||||
[PunRPC]
|
||||
void SendWeatherUpdate (int id, int zone)
|
||||
{
|
||||
if(EnviroManager.instance.Weather != null)
|
||||
{
|
||||
if(zone == -1)
|
||||
EnviroManager.instance.Weather.ChangeWeather(id);
|
||||
else
|
||||
EnviroManager.instance.Weather.ChangeZoneWeather(id,zone);
|
||||
}
|
||||
}
|
||||
|
||||
[PunRPC]
|
||||
void SendSeasonUpdate (int id)
|
||||
{
|
||||
if(EnviroManager.instance.Environment != null)
|
||||
return;
|
||||
|
||||
switch (id)
|
||||
{
|
||||
case 0:
|
||||
EnviroManager.instance.Environment.Settings.season = EnviroEnvironment.Seasons.Spring;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
EnviroManager.instance.Environment.Settings.season = EnviroEnvironment.Seasons.Summer;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
EnviroManager.instance.Environment.Settings.season = EnviroEnvironment.Seasons.Autumn;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
EnviroManager.instance.Environment.Settings.season = EnviroEnvironment.Seasons.Winter;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Update ()
|
||||
{
|
||||
|
||||
if (EnviroManager.instance == null || EnviroManager.instance.Time == null)
|
||||
return;
|
||||
|
||||
if (!PhotonNetwork.IsMasterClient)
|
||||
{
|
||||
if (networkHours < 0.5f && EnviroManager.instance.Time.GetTimeOfDay() > 23f)
|
||||
EnviroManager.instance.Time.SetTimeOfDay(networkHours);
|
||||
|
||||
EnviroManager.instance.Time.SetTimeOfDay(Mathf.Lerp (EnviroManager.instance.Time.GetTimeOfDay(), (float)networkHours, Time.deltaTime * updateSmoothing));
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user