Twin-Hook/Assets/Scripts/MyTypes.cs
Gerard Gascón e0a842f222 init
2025-04-24 17:26:56 +02:00

194 lines
5.4 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public static class MyVars
{
public static float cellSize = 1;
public static int gridWidth = 15;
public static int gridHeight = 12;
public static float slowTime = .1f;
public static float defaultTime = 1;
public static Vector2Int p1StartPos = new Vector2Int((gridWidth-1)/2, 2);
public static Vector2Int p2StartPos = new Vector2Int((gridWidth+1)/2, 2);
public static float enemyMaxSpeed = 3;
public static float enemySpeedGrowth = 0.2f;
public static float minEnemyAmount = 2;
public static float maxEnemyAmount = 5;
public static float enemyAmountGrowth = 0.25f;
public static int enemyKillScore = 1000;
public static float spikeAmount = 3;
}
public static class MyMethods
{
private static System.Random rng = new System.Random();
public static float Remap(this float value, float from1, float to1, float from2, float to2)
{
return (value - from1) / (to1 - from1) * (to2 - from2) + from2;
}
public static void Shuffle<T>(this IList<T> list)
{
int n = list.Count;
while (n > 1)
{
n--;
int k = rng.Next(n + 1);
T value = list[k];
list[k] = list[n];
list[n] = value;
}
}
}
namespace MyTypes
{
public enum MyDirection
{
_UP, _DOWN, _RIGHT, _LEFT, _MAX
}
public class MyPawn : MonoBehaviour
{
protected MyCell currentCell=null;
public MyCell CurrentCell
{
get
{
return currentCell;
}
set
{
currentCell = value;
}
}
}
public class MyCell
{
public Vector2Int position;
private MyPawn pawn;
public MyPawn Pawn
{
get
{
return pawn;
}
set
{
//pawn = value;
if (value != null) //if value does not equal null, the pawn is moving into this cell
{
if (pawn == null) //I am an empty cell
{
if(value.CurrentCell!=null)
value.CurrentCell.pawn = null;
pawn = value;
pawn.CurrentCell = this;
LeanTween.move(pawn.gameObject, new Vector3(position.x * MyVars.cellSize, 0, position.y * MyVars.cellSize), 0.1f).setEaseOutCirc();
pawn.gameObject.transform.localScale = new Vector3(.75f, .75f, 1.25f);
//LeanTween.scaleZ(pawn.gameObject, 1.5f, 0).setEaseOutBack();
//LeanTween.scaleX(pawn.gameObject, .75f, 0).setEaseOutBack();
//LeanTween.scaleY(pawn.gameObject, .75f, 0).setEaseOutBack();
LeanTween.scaleZ(pawn.gameObject, 1, .35f).setEaseOutBack();
LeanTween.scaleX(pawn.gameObject, 1, .35f).setEaseOutBack();
LeanTween.scaleY(pawn.gameObject, 1, .35f).setEaseOutBack();
//pawn.gameObject.transform.position = new Vector3(position.x * MyVars.cellSize, 0, position.y * MyVars.cellSize);
}
else
{
Debug.LogError("Assigned pawn to an occupied cell: " + position);
EnemyBehavior.enemyAmount--;
}
}
}
}
public MyCell (Vector2Int position)
{
this.position = position;
pawn = null;
}
public MyCell (int x, int y)
{
position = new Vector2Int(x, y);
pawn = null;
}
}
[System.Serializable]
public class MyGrid
{
public int width=MyVars.gridWidth;
public int height=MyVars.gridHeight;
public float cellSize = MyVars.cellSize;
public MyCell[,] grid;
public List<MyCell> availableCells;
public MyGrid(int width, int height)
{
this.width = width;
this.height = height;
grid = new MyCell[width, height];
availableCells = new List<MyCell>();
}
public MyCell getCell(Vector2Int pos)
{
return grid[pos.x , pos.y];
}
public MyCell getCell(Vector2Int pos, Vector2Int offset)
{
return grid[pos.x+offset.x, pos.y+offset.y];
}
public void AddAvailableCell(MyCell cell)
{
availableCells.Add(cell);
}
public MyCell GetAvailableCell()
{
MyMethods.Shuffle(availableCells);
MyCell aux = availableCells[availableCells.Count-1];
availableCells.Remove(aux);
return aux;
}
public void RemoveAvailableCell(MyCell cell)
{
if(availableCells.Contains(cell))
availableCells.Remove(cell);
}
public void movePawn(MyPawn pawnToMove, MyCell targetCell)
{
AddAvailableCell(pawnToMove.CurrentCell);
RemoveAvailableCell(targetCell);
//pawnToMove.CurrentCell = targetCell;
targetCell.Pawn = pawnToMove; //this also updates former cell's pawn reference and pawn's cell reference
}
}
}