Import Test files
This commit is contained in:
136
Assets/Scripts/SC_Gem.cs
Normal file
136
Assets/Scripts/SC_Gem.cs
Normal file
@@ -0,0 +1,136 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
//This is a SINGULAR gem
|
||||
public class SC_Gem : MonoBehaviour
|
||||
{
|
||||
[HideInInspector]
|
||||
public Vector2Int posIndex;
|
||||
|
||||
private Vector2 firstTouchPosition;
|
||||
private Vector2 finalTouchPosition;
|
||||
private bool mousePressed;
|
||||
private float swipeAngle = 0;
|
||||
private SC_Gem otherGem;
|
||||
|
||||
public GlobalEnums.GemType type;
|
||||
public bool isMatch = false;
|
||||
private Vector2Int previousPos;
|
||||
public GameObject destroyEffect;
|
||||
public int scoreValue = 10;
|
||||
|
||||
public int blastSize = 1;
|
||||
private SC_GameLogic scGameLogic;
|
||||
|
||||
void Update()
|
||||
{
|
||||
if (Vector2.Distance(transform.position, posIndex) > 0.01f)
|
||||
transform.position = Vector2.Lerp(transform.position, posIndex, SC_GameVariables.Instance.gemSpeed * Time.deltaTime);
|
||||
else
|
||||
{
|
||||
transform.position = new Vector3(posIndex.x, posIndex.y, 0);
|
||||
scGameLogic.SetGem(posIndex.x, posIndex.y, this);
|
||||
}
|
||||
if (mousePressed && Input.GetMouseButtonUp(0))
|
||||
{
|
||||
mousePressed = false;
|
||||
if (scGameLogic.CurrentState == GlobalEnums.GameState.move)
|
||||
{
|
||||
finalTouchPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
|
||||
CalculateAngle();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void SetupGem(SC_GameLogic _ScGameLogic,Vector2Int _Position)
|
||||
{
|
||||
posIndex = _Position;
|
||||
scGameLogic = _ScGameLogic;
|
||||
}
|
||||
|
||||
//Not every gem needs this
|
||||
private void OnMouseDown()
|
||||
{
|
||||
if (scGameLogic.CurrentState == GlobalEnums.GameState.move)
|
||||
{
|
||||
firstTouchPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
|
||||
mousePressed = true;
|
||||
}
|
||||
}
|
||||
|
||||
//Not every gem needs this
|
||||
private void CalculateAngle()
|
||||
{
|
||||
swipeAngle = Mathf.Atan2(finalTouchPosition.y - firstTouchPosition.y, finalTouchPosition.x - firstTouchPosition.x);
|
||||
swipeAngle = swipeAngle * 180 / Mathf.PI;
|
||||
|
||||
if (Vector3.Distance(firstTouchPosition, finalTouchPosition) > .5f)
|
||||
MovePieces();
|
||||
}
|
||||
|
||||
//Not every gem needs this, maybe
|
||||
private void MovePieces()
|
||||
{
|
||||
previousPos = posIndex;
|
||||
|
||||
if (swipeAngle < 45 && swipeAngle > -45 && posIndex.x < SC_GameVariables.Instance.rowsSize - 1)
|
||||
{
|
||||
otherGem = scGameLogic.GetGem(posIndex.x + 1, posIndex.y);
|
||||
otherGem.posIndex.x--;
|
||||
posIndex.x++;
|
||||
|
||||
}
|
||||
else if (swipeAngle > 45 && swipeAngle <= 135 && posIndex.y < SC_GameVariables.Instance.colsSize - 1)
|
||||
{
|
||||
otherGem = scGameLogic.GetGem(posIndex.x, posIndex.y + 1);
|
||||
otherGem.posIndex.y--;
|
||||
posIndex.y++;
|
||||
}
|
||||
else if (swipeAngle < -45 && swipeAngle >= -135 && posIndex.y > 0)
|
||||
{
|
||||
otherGem = scGameLogic.GetGem(posIndex.x, posIndex.y - 1);
|
||||
otherGem.posIndex.y++;
|
||||
posIndex.y--;
|
||||
}
|
||||
else if (swipeAngle > 135 || swipeAngle < -135 && posIndex.x > 0)
|
||||
{
|
||||
otherGem = scGameLogic.GetGem(posIndex.x - 1, posIndex.y);
|
||||
otherGem.posIndex.x++;
|
||||
posIndex.x--;
|
||||
}
|
||||
|
||||
scGameLogic.SetGem(posIndex.x,posIndex.y, this);
|
||||
scGameLogic.SetGem(otherGem.posIndex.x, otherGem.posIndex.y, otherGem);
|
||||
|
||||
StartCoroutine(CheckMoveCo());
|
||||
}
|
||||
|
||||
//Why are we checking matches on the Gem itself
|
||||
public IEnumerator CheckMoveCo()
|
||||
{
|
||||
scGameLogic.SetState(GlobalEnums.GameState.wait);
|
||||
|
||||
yield return new WaitForSeconds(.5f);
|
||||
scGameLogic.FindAllMatches();
|
||||
|
||||
if (otherGem != null)
|
||||
{
|
||||
if (isMatch == false && otherGem.isMatch == false)
|
||||
{
|
||||
otherGem.posIndex = posIndex;
|
||||
posIndex = previousPos;
|
||||
|
||||
scGameLogic.SetGem(posIndex.x, posIndex.y, this);
|
||||
scGameLogic.SetGem(otherGem.posIndex.x, otherGem.posIndex.y, otherGem);
|
||||
|
||||
yield return new WaitForSeconds(.5f);
|
||||
scGameLogic.SetState(GlobalEnums.GameState.move);
|
||||
}
|
||||
else
|
||||
{
|
||||
scGameLogic.DestroyMatches();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user