BasicFantasy/Assets/Scripts/BlockController.cs

137 lines
3.9 KiB
C#
Raw Permalink Normal View History

2023-09-28 18:21:45 +09:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BlockController : MonoBehaviour
{
//block for instantiate
[SerializeField] private GameObject _characterBlock;
[SerializeField] private GameObject _bgBlock;
[SerializeField] private RectTransform _bgRoot;
[SerializeField] private RectTransform _characterRoot;
public E_TEAM CurrentTurn { get; private set; } = E_TEAM.BLUE;
private BackgroundBlock[,] _mapPositions;
private CharacterBlock _selectedCharacter;
private Vector2 _blockSize;
public Vector2 BlockSize
{
get
{
return _blockSize;
}
}
public CharacterBlock GenerateCharacter(CharacterInfo info,int x, int y)
{
info.UpdatePosition(x, y);
var obj = Instantiate(_characterBlock, transform);
var block = obj.GetComponent<CharacterBlock>();
block.SetData(info, _blockSize);
block.UpdatePosition(_mapPositions[x, y].transform.position, x, y);
return block;
}
public void Selected(CharacterBlock block)
{
if(block.Team != CurrentTurn)
{
return;
}
//<2F>̹<EFBFBD> ĥ<><C4A5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD> <20>ʱ<EFBFBD>ȭ
ResetBackground();
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD>õ<EFBFBD> ij<><C4B3><EFBFBD>Ϳ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(_selectedCharacter == block)
{
_selectedCharacter = null;
return;
}
else
{
_selectedCharacter = block;
}
SetBackground(block.CurrentX, block.CurrentY, block.Range);
}
public void Move(int x, int y)
{
CurrentTurn = CurrentTurn == E_TEAM.BLUE ? E_TEAM.RED : E_TEAM.BLUE;
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>޾ƿ<DEBE>
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD>õ<EFBFBD> ij<><C4B3><EFBFBD>͸<EFBFBD> <20>ش<EFBFBD> <20><>ǥ<EFBFBD><C7A5> <20>̵<EFBFBD><CCB5><EFBFBD>Ű<EFBFBD><C5B0>
ResetBackground();
//<2F><><EFBFBD><EFBFBD> ĥ<><C4A5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>÷<EFBFBD> <20>ʱ<EFBFBD>ȭ
_selectedCharacter.UpdatePosition(_mapPositions[x, y].transform.position, x, y);
}
public void GenerateMap(int x, int y, float padding)
{
_mapPositions = new BackgroundBlock[x, y];
float width = _bgRoot.rect.width - (padding * (x - 1));
float height = _bgRoot.rect.height - (padding * (y - 1));
_blockSize = new Vector2(width / x, height / y);
float xPos = 0;
float yPos = 0;
for (int i = 0; i < y; i++)
{
for (int j = 0; j < x; j++)
{
GameObject obj = Instantiate(_bgBlock, _bgRoot.transform);
var block = obj.GetComponent<BackgroundBlock>();
block.SetData(j, i);
block.SetSize(_blockSize);
block.UpdatePosition(new Vector2(xPos, yPos));
_mapPositions[j, i] = block;
xPos += _blockSize.x + padding;
}
yPos += _blockSize.y + padding;
xPos = 0;
}
}
private void ResetBackground()
{
for (int i = 0; i < _mapPositions.GetLength(0); i++)
{
for (int j = 0; j < _mapPositions.GetLength(1); j++)
{
if(_mapPositions[i, j].InRage)
{
_mapPositions[i, j].ResetColor();
}
}
}
}
private void SetBackground(int x, int y, int range)
{
//<2F><><EFBFBD><EFBFBD> <20>ȿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>÷<EFBFBD> <20><><EFBFBD><EFBFBD>
for(int i = -range; i <= range; i++)
{
for (int j = -range; j <= range; j++)
{
//<2F><><EFBFBD><EFBFBD><EBB0AA> <20><><EFBFBD><EFBFBD> range<67><65> <20><><EFBFBD><EFBFBD>?
int dx = i < 0 ? i * -1 : i;
int dy = j < 0 ? j * -1 : j;
if((dx + dy) <= range)
{
if(x + i >= 0 && x + i < _mapPositions.GetLength(0) &&
y + j >= 0 && y + j < _mapPositions.GetLength(1))
{
_mapPositions[x + i, y + j].SetColor(CurrentTurn);
}
}
}
}
}
}