diff options
Diffstat (limited to 'Valheim_v0.141.2_r202102/Valheim/assembly_valheim/SnapToGround.cs')
| -rw-r--r-- | Valheim_v0.141.2_r202102/Valheim/assembly_valheim/SnapToGround.cs | 63 | 
1 files changed, 63 insertions, 0 deletions
diff --git a/Valheim_v0.141.2_r202102/Valheim/assembly_valheim/SnapToGround.cs b/Valheim_v0.141.2_r202102/Valheim/assembly_valheim/SnapToGround.cs new file mode 100644 index 0000000..2aa1ad8 --- /dev/null +++ b/Valheim_v0.141.2_r202102/Valheim/assembly_valheim/SnapToGround.cs @@ -0,0 +1,63 @@ +using System.Collections.Generic; +using UnityEngine; + +[ExecuteInEditMode] +public class SnapToGround : MonoBehaviour +{ +	public float m_offset; + +	private static List<SnapToGround> m_allSnappers = new List<SnapToGround>(); + +	private bool m_inList; + +	private void Awake() +	{ +		m_allSnappers.Add(this); +		m_inList = true; +	} + +	private void OnDestroy() +	{ +		if (m_inList) +		{ +			m_allSnappers.Remove(this); +			m_inList = false; +		} +	} + +	private void Snap() +	{ +		if (!(ZoneSystem.instance == null)) +		{ +			float groundHeight = ZoneSystem.instance.GetGroundHeight(base.transform.position); +			Vector3 position = base.transform.position; +			position.y = groundHeight + m_offset; +			base.transform.position = position; +			ZNetView component = GetComponent<ZNetView>(); +			if (component != null && component.IsOwner()) +			{ +				component.GetZDO().SetPosition(position); +			} +		} +	} + +	public bool HaveUnsnapped() +	{ +		return m_allSnappers.Count > 0; +	} + +	public static void SnappAll() +	{ +		if (m_allSnappers.Count == 0) +		{ +			return; +		} +		Heightmap.ForceGenerateAll(); +		foreach (SnapToGround allSnapper in m_allSnappers) +		{ +			allSnapper.Snap(); +			allSnapper.m_inList = false; +		} +		m_allSnappers.Clear(); +	} +}  | 
