SRMP-Public/SRMP/Networking/NetworkPlayerDisplayOnMap.cs
2023-05-29 22:23:11 +02:00

117 lines
No EOL
4 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MonomiPark.SlimeRancher.Regions;
using UnityEngine;
namespace SRMultiplayer.Networking
{
public class NetworkPlayerDisplayOnMap : DisplayOnMap
{
public NetworkPlayer Player;
public RegionMember Member;
public override void Awake()
{
base.Awake();
if (SRSingleton<Map>.Instance.mapUI.gameObject.activeInHierarchy)
{
MapMarker marker = GetMarker();
marker.transform.SetParent(SRSingleton<Map>.Instance.mapUI.mapMarkerSection.gameObject.transform, false);
marker.transform.localPosition = Vector3.zero;
}
}
private void Update()
{
if(SRSingleton<Map>.Instance.mapUI.gameObject.activeInHierarchy)
{
if (ShowOnMap())
{
MapMarker marker = GetMarker();
marker.gameObject.SetActive(true);
RegionRegistry.RegionSetId regionSetId = GetRegionSetId();
Vector4 coefficients;
Vector2 minPoint;
Vector2 maxPoint;
float num;
if (regionSetId == RegionRegistry.RegionSetId.DESERT)
{
coefficients = SRSingleton<Map>.Instance.mapUI.desertCoefficients;
minPoint = SRSingleton<Map>.Instance.mapUI.desertMarkerPositionMin;
maxPoint = SRSingleton<Map>.Instance.mapUI.desertMarkerPositionMax;
num = SRSingleton<Map>.Instance.mapUI.desertRotationAdjustment;
}
else
{
coefficients = SRSingleton<Map>.Instance.mapUI.mainCoefficients;
minPoint = SRSingleton<Map>.Instance.mapUI.worldMarkerPositionMin;
maxPoint = SRSingleton<Map>.Instance.mapUI.worldMarkerPositionMax;
num = SRSingleton<Map>.Instance.mapUI.mainRotationAdjustment;
}
marker.SetAnchoredPosition(SRSingleton<Map>.Instance.mapUI.GetMapPosClamped(GetCurrentPosition(), coefficients, minPoint, maxPoint));
Vector3 eulerAngles = GetCurrentRotation().eulerAngles;
marker.Rotate(Quaternion.Euler(eulerAngles.x + num, eulerAngles.y, eulerAngles.z));
}
else
{
GetMarker().gameObject.SetActive(false);
}
}
}
public override ZoneDirector.Zone GetZoneId()
{
return GetCurrentZone();
}
public override RegionRegistry.RegionSetId GetRegionSetId()
{
return Player.CurrentRegionSet;
}
public override Vector3 GetCurrentPosition()
{
return Player.transform.position;
}
public override Quaternion GetCurrentRotation()
{
return Player.transform.rotation;
}
public override bool ShowOnMap()
{
return playerState.HasUnlockedMap(GetZoneId());
}
public ZoneDirector.Zone GetCurrentZone()
{
if (ZoneDirector.Zones(Member).Count == 0)
{
return ZoneDirector.Zone.NONE;
}
ZoneDirector.Zone result = ZoneDirector.Zone.NONE;
int num = int.MaxValue;
foreach (ZoneDirector.Zone zone in ZoneDirector.Zones(Member))
{
if (zone < (ZoneDirector.Zone)num)
{
result = zone;
num = (int)zone;
}
}
return result;
}
private bool IsInHiddenCell()
{
return (from r in Member.regions
where r.cellDir.notShownOnMap
select r).Count<Region>() > 0;
}
}
}