﻿using UnityEngine;

namespace JLGames.RocketDriver.Actions.Extensions
{
    public static class ExtVector
    {
        /// <summary>
        /// Shorthand for writing Vector2(0.5f, 0.5f).
        /// </summary>
        public static readonly Vector2 HalfOfOneVector = new Vector2(0.5f, 0.5f);

        /// <summary>
        /// Shorthand for writing Vector2(0.0f, 0.5f).
        /// </summary>
        public static readonly Vector2 HalfOfUpVector = new Vector2(0.0f, 0.5f);

        /// <summary>
        /// Shorthand for writing Vector2(0.0f, -0.5f).
        /// </summary>
        public static readonly Vector2 HalfOfDownVector = new Vector2(0.0f, -0.5f);

        /// <summary>
        /// Shorthand for writing Vector2(-0.5f, 0.0f).
        /// </summary>
        public static readonly Vector2 HalfOfLeftVector = new Vector2(-0.5f, 0.0f);

        /// <summary>
        /// Shorthand for writing Vector2(0.5f, 0.0f).
        /// </summary>
        public static readonly Vector2 HalfOfRightVector = new Vector2(0.5f, 0.0f);

        /// <summary>
        /// addition
        /// </summary>
        /// <param name="b"></param>
        /// <param name="c"></param>
        /// <returns></returns>
        public static Vector3Int Add(this Vector3Int b, Vector3Int c)
        {
            b.x += c.x;
            b.y += c.y;
            b.z += c.z;
            return b;
        }

        /// <summary>
        /// subtraction
        /// </summary>
        /// <param name="b"></param>
        /// <param name="c"></param>
        /// <returns></returns>
        public static Vector3Int Sub(this Vector3Int b, Vector3Int c)
        {
            b.x -= c.x;
            b.y -= c.y;
            b.z -= c.z;
            return b;
        }

        /// <summary>
        /// multiplication
        /// </summary>
        /// <param name="b"></param>
        /// <param name="c"></param>
        /// <returns></returns>
        public static Vector3Int Mul(this Vector3Int b, Vector3Int c)
        {
            b.x *= c.x;
            b.y *= c.y;
            b.z *= c.z;
            return b;
        }

        /// <summary>
        /// multiplication
        /// </summary>
        /// <param name="b"></param>
        /// <param name="c"></param>
        /// <returns></returns>
        public static Vector3Int Mul(this Vector3Int b, int c)
        {
            b.x *= c;
            b.y *= c;
            b.z *= c;
            return b;
        }

        /// <summary>
        /// multiplication
        /// </summary>
        /// <param name="b"></param>
        /// <param name="c"></param>
        /// <returns></returns>
        public static Vector3 Mul(this Vector3Int b, float c)
        {
            return new Vector3(b.x * c, b.y * c, b.z * c);
        }
    }
}