This repository has been archived on 2025-04-11. You can view files and clone it, but cannot push or open issues or pull requests.
angels-and-demons/Angels and Demons/Assets/Scripts/BoardManager.cs

444 lines
9.8 KiB
C#
Raw Normal View History

2018-05-15 23:11:34 -05:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class BoardManager : MonoBehaviour
{
// Global reference to the canvas' width and height.
private float canvaswidth;
private float canvasheight;
// Variable to change spacing of the board from the edges of the canvas.
private float canvasspacing = 80f;
public Image board;
// Board size references.
private float boardwidth;
private float boardheight;
// Might want to make this part modular in the future.
private float numberofspaces = 11;
// Spaces for the board need to be spawned and resized based on canvas.
private float spacespacing;
public Button blackspaceasset;
public Transform blackspacetransform;
public Image whitespaceasset;
public Transform whitespacetransform;
// Image assets for the board spaces.
public Sprite angelimage;
public Image demonimage;
// Keep references of all the space GameObjects.
private Button[] blackspaces = new Button[61];
private Image[] whitespaces = new Image[60];
// Use this for initialization
void Start ()
{
canvasheight = this.GetComponentInParent<RectTransform>().rect.height;
canvaswidth = this.GetComponentInParent<RectTransform>().rect.width;
boardheight = board.GetComponent<RectTransform>().rect.height;
boardwidth = board.GetComponent<RectTransform>().rect.width;
spacespacing = ((canvaswidth - canvasspacing)/11f);
SpawnInitialBoard();
}
private void UpdateBoardScale()
{
canvasheight = this.GetComponentInParent<RectTransform>().rect.height;
canvaswidth = this.GetComponentInParent<RectTransform>().rect.width;
if(canvaswidth > canvasheight)
{
board.rectTransform.sizeDelta = new Vector2(canvasheight - canvasspacing, canvasheight - canvasspacing);
}
else
{
board.rectTransform.sizeDelta = new Vector2(canvaswidth - canvasspacing, canvaswidth - canvasspacing);
}
boardheight = board.GetComponent<RectTransform>().rect.height;
boardwidth = board.GetComponent<RectTransform>().rect.width;
spacespacing = ((boardwidth)/11f);
UpdatePieceScale();
}
private Button SpawnBlackSpace(int i)
{
Button bsbutton;
bsbutton = Instantiate(blackspaceasset, blackspacetransform);
bsbutton.name += "" + i;
bsbutton.onClick.AddListener(delegate{ButtonAction(bsbutton);});
return bsbutton;
}
private Image SpawnWhiteSpace()
{
Image wsimage;
wsimage = Instantiate(whitespaceasset, whitespacetransform);
return wsimage;
}
private void SpawnInitialBoard()
{
for(int i = 0; i < blackspaces.Length; ++i)
{
Button temp;
temp = SpawnBlackSpace(i);
temp.GetComponent<RectTransform>().sizeDelta = new Vector2(spacespacing, spacespacing);
float x = (spacespacing*i*2 + (temp.GetComponent<RectTransform>().rect.width / 2f)) % (boardwidth) - ((boardwidth) / 2f);
float y = (boardheight / 2f) - ((temp.GetComponent<RectTransform>().rect.height / 2f) + spacespacing*(Mathf.Floor(i/(11f/2f))));
temp.transform.localPosition = new Vector3(x, y, 0);
blackspaces[i] = temp;
if(i < blackspaces.Length - 1)
{
Image tempimage;
tempimage = SpawnWhiteSpace();
tempimage.GetComponent<RectTransform>().sizeDelta = new Vector2(spacespacing, spacespacing);
x = (spacespacing*i*2 + (tempimage.GetComponent<RectTransform>().rect.width / 2f)*3) % (boardwidth) - ((boardwidth) / 2f);
y = (boardheight / 2f) - ((tempimage.GetComponent<RectTransform>().rect.height / 2f) + spacespacing*(Mathf.Floor((i + 1)/(11.01f/2f))));
tempimage.transform.localPosition = new Vector3(x, y, 0);
whitespaces[i] = tempimage;
}
}
}
private void UpdatePieceScale()
{
for(int i = 0; i < blackspaces.Length; ++i)
{
Button temp = blackspaces[i];
temp.GetComponent<RectTransform>().sizeDelta = new Vector2(spacespacing, spacespacing);
float x = (spacespacing*i*2 + (temp.GetComponent<RectTransform>().rect.width / 2f)) % (boardwidth) - ((boardwidth) / 2f);
float y = (boardheight / 2f) - ((temp.GetComponent<RectTransform>().rect.height / 2f) + spacespacing*(Mathf.Floor(i/(11f/2f))));
temp.transform.localPosition = new Vector3(x, y, 0);
blackspaces[i] = temp;
if(i < blackspaces.Length - 1)
{
Image tempimage = whitespaces[i];
tempimage.GetComponent<RectTransform>().sizeDelta = new Vector2(spacespacing, spacespacing);
x = (spacespacing*i*2 + (tempimage.GetComponent<RectTransform>().rect.width / 2f)*3) % (boardwidth) - ((boardwidth) / 2f);
y = (boardheight / 2f) - ((tempimage.GetComponent<RectTransform>().rect.height / 2f) + spacespacing*(Mathf.Floor((i + 1)/(11.01f/2f))));
tempimage.transform.localPosition = new Vector3(x, y, 0);
whitespaces[i] = tempimage;
}
}
}
// Update is called once per frame
void Update ()
{
UpdateBoardScale();
}
public void ButtonAction(Button b)
{
int buttonindex = 0;
int.TryParse(b.name.Replace("Move Selection(Clone)", ""), out buttonindex);
Vector2 boardcoords = ConvertButtonIndex(buttonindex);
// This is completely incorrect and will most likely need a switch case of some kind in the future.
Debug.Log("Board coordinates: " + boardcoords.x + " " + boardcoords.y);
ChangeSpaces(boardcoords);
}
private Vector2 ConvertButtonIndex(int i)
{
Vector2 temp;
temp.x = (i*2)%11;
temp.y = 0;
switch(i)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
return temp;
case 6:
case 7:
case 8:
case 9:
case 10:
temp.y = 1;
return temp;
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
temp.y = 2;
return temp;
case 17:
case 18:
case 19:
case 20:
case 21:
temp.y = 3;
return temp;
case 22:
case 23:
case 24:
case 25:
case 26:
case 27:
temp.y = 4;
return temp;
case 28:
case 29:
case 30:
case 31:
case 32:
temp.y = 5;
return temp;
case 33:
case 34:
case 35:
case 36:
case 37:
case 38:
temp.y = 6;
return temp;
case 39:
case 40:
case 41:
case 42:
case 43:
temp.y = 7;
return temp;
case 44:
case 45:
case 46:
case 47:
case 48:
case 49:
temp.y = 8;
return temp;
case 50:
case 51:
case 52:
case 53:
case 54:
temp.y = 9;
return temp;
case 55:
case 56:
case 57:
case 58:
case 59:
case 60:
temp.y = 10;
return temp;
default:
return temp;
}
}
private int ConvertImageIndex(Vector2 bc)
{
int i = 0;
switch(Mathf.RoundToInt(bc.y))
{
case 0:
i = (Mathf.RoundToInt(bc.x) - 1)/2;
break;
case 1:
i = (Mathf.RoundToInt(bc.x))/2;
i += 5;
break;
case 2:
i = (Mathf.RoundToInt(bc.x) - 1)/2;
i += 11;
break;
case 3:
i = (Mathf.RoundToInt(bc.x))/2;
i += 16;
break;
case 4:
i = (Mathf.RoundToInt(bc.x) - 1)/2;
i += 22;
break;
case 5:
i = (Mathf.RoundToInt(bc.x))/2;
i += 27;
break;
case 6:
i = (Mathf.RoundToInt(bc.x) - 1)/2;
i += 33;
break;
case 7:
i = (Mathf.RoundToInt(bc.x))/2;
i += 38;
break;
case 8:
i = (Mathf.RoundToInt(bc.x) - 1)/2;
i += 44;
break;
case 9:
i = (Mathf.RoundToInt(bc.x))/2;
i += 49;
break;
case 10:
i = (Mathf.RoundToInt(bc.x) - 1)/2;
i += 55;
break;
default:
break;
}
return i;
}
private void ChangeSpaces(Vector2 bc)
{
Vector2 tempbc = bc;
int wsi = 0;
if(bc.x > 0 && bc.x < (numberofspaces - 1))
{
if(bc.y > 0)
{
Debug.Log(
"changing space:" +
(bc.x) + " " + (bc.y - 1)
);
tempbc = bc;
tempbc.y -= 1;
wsi = ConvertImageIndex(tempbc);
whitespaces[wsi].sprite = angelimage;
}
if(bc.y < (numberofspaces - 1))
{
Debug.Log(
"changing space:" +
(bc.x) + " " + (bc.y + 1)
);
tempbc = bc;
tempbc.y += 1;
wsi = ConvertImageIndex(tempbc);
whitespaces[wsi].sprite = angelimage;
}
Debug.Log(
"changing spaces:" +
(bc.x - 1) + " " + (bc.y) + "\t" +
(bc.x + 1) + " " + (bc.y)
);
tempbc = bc;
tempbc.x -= 1;
wsi = ConvertImageIndex(tempbc);
whitespaces[wsi].sprite = angelimage;
tempbc.x += 2;
wsi = ConvertImageIndex(tempbc);
whitespaces[wsi].sprite = angelimage;
}
else if(bc.y > 0 && bc.y < (numberofspaces - 1))
{
if(bc.x == 0)
{
Debug.Log(
"changing space:" +
(bc.x + 1) + " " + (bc.y)
);
tempbc = bc;
tempbc.x += 1;
wsi = ConvertImageIndex(tempbc);
whitespaces[wsi].sprite = angelimage;
}
if(bc.x == (numberofspaces - 1))
{
Debug.Log(
"changing space:" +
(bc.x - 1) + " " + (bc.y)
);
tempbc = bc;
tempbc.x -= 1;
wsi = ConvertImageIndex(tempbc);
whitespaces[wsi].sprite = angelimage;
}
Debug.Log(
"changing spaces:" +
(bc.x) + " " + (bc.y - 1) + "\t" +
(bc.x) + " " + (bc.y + 1)
);
tempbc = bc;
tempbc.y -= 1;
wsi = ConvertImageIndex(tempbc);
whitespaces[wsi].sprite = angelimage;
tempbc.y += 2;
wsi = ConvertImageIndex(tempbc);
whitespaces[wsi].sprite = angelimage;
}
else
{
if(bc.x == 0)
{
Debug.Log(
"changing space:" +
(bc.x + 1) + " " + (bc.y)
);
tempbc = bc;
tempbc.x += 1;
wsi = ConvertImageIndex(tempbc);
whitespaces[wsi].sprite = angelimage;
}
if(bc.x == (numberofspaces - 1))
{
Debug.Log(
"changing space:" +
(bc.x - 1) + " " + (bc.y)
);
tempbc = bc;
tempbc.x -= 1;
wsi = ConvertImageIndex(tempbc);
whitespaces[wsi].sprite = angelimage;
}
if(bc.y > 0)
{
Debug.Log(
"changing space:" +
(bc.x) + " " + (bc.y - 1)
);
tempbc = bc;
tempbc.y -= 1;
wsi = ConvertImageIndex(tempbc);
whitespaces[wsi].sprite = angelimage;
}
if(bc.y < (numberofspaces - 1))
{
Debug.Log(
"changing space:" +
(bc.x) + " " + (bc.y + 1)
);
tempbc = bc;
tempbc.y += 1;
wsi = ConvertImageIndex(tempbc);
whitespaces[wsi].sprite = angelimage;
}
}
}
}