﻿using System.Collections.Generic;
using UnityEngine;

/**
	Contains useful extensions for Transform
	@author Herman Tulleken
*/
public static class TransformExtensions2 
{
	public static void SetX(this Transform transform, float x)
	{
		var newPosition = new Vector3(x, transform.position.y, transform.position.z);
		
		transform.position = newPosition;
	}
	
	public static void SetY(this Transform transform, float y)
	{
		var newPosition = new Vector3(transform.position.x, y, transform.position.z);
		
		transform.position = newPosition;
	}
	
	public static void SetLocalX(this Transform transform, float x)
	{
		var newPosition = new Vector3(x, transform.localPosition.y, transform.localPosition.z);
		
		transform.localPosition = newPosition;
	}
	
	public static void SetLocalZ(this Transform transform, float z)
	{
		var newPosition = new Vector3(transform.localPosition.x, transform.localPosition.y, z);
		
		transform.localPosition = newPosition;
	}
	
	public static void SetLocalY(this Transform transform, float y)
	{
		var newPosition = new Vector3(transform.localPosition.x, y, transform.localPosition.z);
		
		transform.localPosition = newPosition;
	}
	
	public static void SetLocalScaleY(this Transform transform, float y)
	{
		var newScale = new Vector3(
			transform.localScale.x,
			y,
			transform.localScale.z);
		
		transform.localScale = newScale;
	}
	
	public static void SetLocalScaleX(this Transform transform, float x)
	{
		var newScale = new Vector3(
			x,
			transform.localScale.y,
			transform.localScale.z);
		
		transform.localScale = newScale;
	}
	
	public static void SetZ(this Transform transform, float z)
	{
		var newPosition = new Vector3(transform.position.x, transform.position.y, z);
		
		transform.position = newPosition;
	}

	public static void SetXY(this Transform transform, float x, float y)
	{
		var newPosition = new Vector3(x, y, transform.position.z);
		
		transform.position = newPosition;
	}
	
	public static void SetXZ(this Transform transform, float x, float z)
	{
		var newPosition = new Vector3(x, transform.position.y, z);
		
		transform.position = newPosition;
	}

	public static void AddZ(this Transform transform, float z)
	{
		var offset = new Vector3(0, 0, z);
		
		transform.position += offset;
	}
	
	public static void AddX(this Transform transform, float x)
	{
		var offset = new Vector3(x, 0, 0);
		
		transform.position += offset;
	}
	
	public static void AddY(this Transform transform, float y)
	{
		var offset = new Vector3(0, y, 0);
		
		transform.position += offset;
	}
	
	public static void AddXY(this Transform transform, float x, float y)
	{
		var offset = new Vector3(x, y, 0);
		
		transform.position += offset;
	}
	
	public static bool InRange(this Transform transform, Transform other, float range)
	{
		return transform.position.InRange(other.position, range);
	}
	
	public static void SetScaleX(this Transform transform, float x)
	{		
		var newScale = new Vector3(x, transform.localScale.y, transform.localScale.z);
		transform.localScale = newScale;
	}
	
	public static void SetScaleY(this Transform transform, float y)
	{		
		var newScale = new Vector3(transform.localScale.x, y, transform.localScale.z);
		transform.localScale = newScale;
	}
	
	public static void SetScaleZ(this Transform transform, float z)
	{		
		var newScale = new Vector3(transform.localScale.x, transform.localScale.y, z);
		transform.localScale = newScale;
	}
	
	public static void SetScaleXY(this Transform transform, float x, float y)
	{		
		var newScale = new Vector3(x, y, transform.localScale.z);
		transform.localScale = newScale;
	}
	
	public static void FlipXY(this Transform transform)
	{
		transform.SetScaleXY(-transform.localScale.x, -transform.localScale.y);
	}
	
	public static void FlipX(this Transform transform)
	{
		transform.SetScaleX(-transform.localScale.x);
	}
	
	public static void FlipY(this Transform transform)
	{
		transform.SetScaleY(-transform.localScale.y);
	}
	
	public static void FlipZ(this Transform transform)
	{
		transform.SetScaleZ(-transform.localScale.z);
	}
	
	public static void FlipPostive(this Transform transform)
	{
		transform.localScale = new Vector3(
			Mathf.Abs(transform.localScale.x),
			Mathf.Abs(transform.localScale.y),
			Mathf.Abs(transform.localScale.z));
	}
	
	public static void RotateAroundX(this Transform transform, float angle)
	{
		var rotation = new Vector3(angle, 0, 0);
		transform.Rotate(rotation);
	}
	
	public static void RotateAroundY(this Transform transform, float angle)
	{
		var rotation = new Vector3(0, angle, 0);
		transform.Rotate(rotation);
	}
	
	public static void SetLocalRotationX(this Transform transform, float angle)
	{
		transform.localRotation = Quaternion.Euler(new Vector3(angle, 0, 0));
	}
	
	public static void SetLocalRotationY(this Transform transform, float angle)
	{
		transform.localRotation = Quaternion.Euler(new Vector3(0, angle, 0));
	}
}



