Items #3

Merged
dddushesss merged 61 commits from Alexei into main 2022-01-05 12:48:28 +00:00
14 changed files with 155 additions and 67 deletions
Showing only changes of commit bf97cf74ca - Show all commits

View File

@ -22,5 +22,16 @@ MonoBehaviour:
type: 3} type: 3}
CoordinatesCanvas: {fileID: 4726489279989878083, guid: f31e0880dd078104bb31dc0fd7ef9f19, CoordinatesCanvas: {fileID: 4726489279989878083, guid: f31e0880dd078104bb31dc0fd7ef9f19,
type: 3} type: 3}
HexMeshPrefab: {fileID: 2988988380115025501, guid: efd47cbd22ddfee4aa2b1391914116fc, DefaultTexture: {fileID: 0}
type: 3} colors:
- _unitColor: 0
_texture: {fileID: 2800000, guid: 0298dfcb0756f534a9a125d510461c7a, type: 3}
_vfxPreab: {fileID: 8021195855904498788, guid: 2f6d0540c8fd7bb46b356ff86962379c,
type: 3}
- _unitColor: 1
_texture: {fileID: 2800000, guid: 3b75368df991b164583e8cede390e24e, type: 3}
_vfxPreab: {fileID: 442387583353148024, guid: 53959bc898e9a644daad0282881d596a,
type: 3}
- _unitColor: 2
_texture: {fileID: 2800000, guid: 983242f4b4db7a841af48234cf0021b8, type: 3}
_vfxPreab: {fileID: 0}

View File

@ -19,5 +19,7 @@ MonoBehaviour:
type: 3} type: 3}
joystickView: {fileID: 4385872142190176059, guid: 4df6913b39f4979429158c344680d83f, joystickView: {fileID: 4385872142190176059, guid: 4df6913b39f4979429158c344680d83f,
type: 3} type: 3}
Tick: 0.5
hexTexture: {fileID: 2800000, guid: 0298dfcb0756f534a9a125d510461c7a, type: 3} hexTexture: {fileID: 2800000, guid: 0298dfcb0756f534a9a125d510461c7a, type: 3}
vfxPrefab: {fileID: 8021195855904498788, guid: 2f6d0540c8fd7bb46b356ff86962379c,
type: 3}
color: 0

View File

@ -11,6 +11,7 @@ namespace Chars
{ {
public float Move; public float Move;
} }
public class Player : IUnit public class Player : IUnit
{ {
private HexCoordinates spawnPos; private HexCoordinates spawnPos;
@ -25,9 +26,11 @@ namespace Chars
private Animator _animator; private Animator _animator;
private PlayerView _playerView; private PlayerView _playerView;
private bool _isMoving; private bool _isMoving;
private GameObject _vfxPrefab;
private UnitColor _color;
private static readonly int Moving = Animator.StringToHash("isMoving"); private static readonly int Moving = Animator.StringToHash("isMoving");
private static readonly int Move1 = Animator.StringToHash("Move"); private static readonly int Move1 = Animator.StringToHash("Move");
private float _tick = 0.8f;
public bool IsMoving => _isMoving; public bool IsMoving => _isMoving;
public GameObject PlayerInstance => _instance; public GameObject PlayerInstance => _instance;
@ -37,14 +40,13 @@ namespace Chars
prefab = playerData.playerPrefab; prefab = playerData.playerPrefab;
_isAlive = false; _isAlive = false;
_hexGrid = hexGrid; _hexGrid = hexGrid;
_texture = playerData.hexTexture;
_isMoving = false; _isMoving = false;
_color = playerData.color;
} }
public void Move(HexDirection direction) public void Move(HexDirection direction)
{ {
_tick = Time.time;
if (_cell.GetNeighbor(direction)) if (_cell.GetNeighbor(direction))
{ {
_isMoving = true; _isMoving = true;
@ -55,21 +57,19 @@ namespace Chars
_playerView.OnStep += () => _playerView.OnStep += () =>
{ {
_isMoving = false; _isMoving = false;
_cell.PaintHex(_texture); _cell.PaintHex(_color);
_tick = Time.time - _tick;
_animator.SetBool(Moving, _isMoving);
_animator.SetBool(Moving, _isMoving);
}; };
_instance.transform.DOMove(_cell.transform.position, _animLength.Move); _instance.transform.DOMove(_cell.transform.position, _animLength.Move);
} }
} }
private void SetAnimLength() private void SetAnimLength()
{ {
AnimationClip[] clips = _animator.runtimeAnimatorController.animationClips; AnimationClip[] clips = _animator.runtimeAnimatorController.animationClips;
foreach(var clip in clips) foreach (var clip in clips)
{ {
_animLength.Move = clip.name switch _animLength.Move = clip.name switch
{ {
@ -84,10 +84,10 @@ namespace Chars
if (!_isAlive) if (!_isAlive)
{ {
_cell = _hexGrid.GetCellFromCoord(spawnPos); _cell = _hexGrid.GetCellFromCoord(spawnPos);
_cell.PaintHex(_texture); _cell.PaintHex(_color);
for (int i = 0; i < 6; i++) for (int i = 0; i < 6; i++)
{ {
_cell.GetNeighbor((HexDirection)i).PaintHex(_texture); _cell.GetNeighbor((HexDirection)i).PaintHex(_color);
} }
_instance = Object.Instantiate(prefab, _cell.transform.parent); _instance = Object.Instantiate(prefab, _cell.transform.parent);

View File

@ -1,4 +1,5 @@
using HexFiled; using System.Collections.Generic;
using HexFiled;
using TMPro; using TMPro;
using UnityEngine; using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
@ -17,5 +18,6 @@ namespace Runtime.Data
public TMP_Text cellLabelPrefab; public TMP_Text cellLabelPrefab;
public GameObject CoordinatesCanvas; public GameObject CoordinatesCanvas;
public Texture DefaultTexture; public Texture DefaultTexture;
public List<CellColor> colors;
} }
} }

View File

@ -10,6 +10,6 @@ namespace Data
public HexCoordinates spawnPos; public HexCoordinates spawnPos;
public GameObject playerPrefab; public GameObject playerPrefab;
public PlayerControlView joystickView; public PlayerControlView joystickView;
public Texture hexTexture; public UnitColor color;
} }
} }

View File

@ -0,0 +1,22 @@
using System;
using UnityEngine;
namespace HexFiled
{
[Serializable]
public struct CellColor
{
[SerializeField] private UnitColor _unitColor;
[SerializeField] private Texture _texture;
[SerializeField] private GameObject _vfxPrefab;
public UnitColor UnitColor => _unitColor;
public Texture Texture => _texture;
public GameObject VFXPrefab => _vfxPrefab;
public bool Equals(CellColor obj)
{
return obj._unitColor == _unitColor;
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 154669d65ce642ef881c9655fda24558
timeCreated: 1640030907

View File

@ -1,33 +1,54 @@
using System; using System;
using System.Collections.Generic;
using UnityEngine; using UnityEngine;
namespace HexFiled namespace HexFiled
{ {
public class HexCell : MonoBehaviour public class HexCell : MonoBehaviour
{ {
public HexCoordinates coordinates;
public Action<HexCell> onHexPainted;
public HexCoordinates coordinates; [SerializeField] private HexCell[] neighbors;
public Color color; private UnitColor _color;
public Action<HexCell> OnHexPainted; private MeshRenderer _renderer;
private Dictionary<UnitColor, CellColor> _cellColor;
[SerializeField] private HexCell[] neighbors; private void Awake()
private static readonly int Player = Shader.PropertyToID("player"); {
_renderer = GetComponent<MeshRenderer>();
PaintHex(UnitColor.GREY);
}
public HexCell GetNeighbor(HexDirection direction) public void SetDictionary(Dictionary<UnitColor, CellColor> colors)
{ {
return neighbors[(int)direction]; _cellColor = colors;
} }
public void SetNeighbor(HexDirection direction, HexCell cell) public HexCell GetNeighbor(HexDirection direction)
{ {
neighbors[(int)direction] = cell; return neighbors[(int)direction];
cell.neighbors[(int)direction.Opposite()] = this; }
}
public void PaintHex(Texture texture) public void SetNeighbor(HexDirection direction, HexCell cell)
{ {
gameObject.GetComponent<MeshRenderer>().material.mainTexture = texture; neighbors[(int)direction] = cell;
OnHexPainted?.Invoke(this); cell.neighbors[(int)direction.Opposite()] = this;
} }
}
public void PaintHex(UnitColor color)
{
if (color == _color) return;
if(color == UnitColor.GREY)
{
_renderer.material.mainTexture = _cellColor[color].Texture;
_color = color;
return;
}
_renderer.material.mainTexture = _cellColor[color].Texture;
onHexPainted?.Invoke(this);
_color = color;
Instantiate(_cellColor[color].VFXPrefab, transform);
}
}
} }

View File

@ -1,4 +1,5 @@
using System; using System;
using System.Collections.Generic;
using Runtime.Controller; using Runtime.Controller;
using Runtime.Data; using Runtime.Data;
using TMPro; using TMPro;
@ -11,31 +12,30 @@ namespace HexFiled
{ {
private int _width; private int _width;
private int _height; private int _height;
private Color _defaultColor = Color.white;
private Color _touchedColor = Color.magenta;
private GameObject _cellPrefab; private GameObject _cellPrefab;
private TMP_Text _cellLabelPrefab; private TMP_Text _cellLabelPrefab;
private Camera _camera;
private HexCell[] _cells; private HexCell[] _cells;
private Canvas _gridCanvas; private Canvas _gridCanvas;
private GameObject _baseGameObject; private GameObject _baseGameObject;
public Action<HexCell> OnHexPainted; public Action<HexCell> OnHexPainted;
public Action OnGridLoaded; public Action OnGridLoaded;
private Dictionary<UnitColor, CellColor> _colors;
public HexGrid(FieldData fieldData) public HexGrid(FieldData fieldData)
{ {
_width = fieldData.width; _width = fieldData.width;
_height = fieldData.height; _height = fieldData.height;
_defaultColor = fieldData.defaultColor;
_touchedColor = fieldData.touchedColor;
_cellPrefab = fieldData.cellPrefab; _cellPrefab = fieldData.cellPrefab;
_cellLabelPrefab = fieldData.cellLabelPrefab; _cellLabelPrefab = fieldData.cellLabelPrefab;
_camera = Camera.main;
_baseGameObject = new GameObject("HexGrid"); _baseGameObject = new GameObject("HexGrid");
_colors = new Dictionary<UnitColor, CellColor>(fieldData.colors.Count);
foreach (var color in fieldData.colors)
{
_colors.Add(color.UnitColor, color);
}
_gridCanvas = Object.Instantiate(fieldData.CoordinatesCanvas, _baseGameObject.transform) _gridCanvas = Object.Instantiate(fieldData.CoordinatesCanvas, _baseGameObject.transform)
.GetComponent<Canvas>(); .GetComponent<Canvas>();
} }
public HexCell GetCellFromCoord(HexCoordinates coordinates) public HexCell GetCellFromCoord(HexCoordinates coordinates)
@ -48,15 +48,6 @@ namespace HexFiled
return _cells[i - 1]; return _cells[i - 1];
} }
private void PaintHex(Color color, HexCoordinates coordinates)
{
int index = coordinates.X + coordinates.Z * _width + coordinates.Z / 2;
HexCell cell = _cells[index];
cell.color = color;
cell.gameObject.GetComponent<MeshRenderer>().material.color = color;
OnHexPainted.Invoke(_cells[index]);
}
void CreateCell(int x, int z, int i) void CreateCell(int x, int z, int i)
{ {
@ -66,36 +57,43 @@ namespace HexFiled
position.z = z * (HexMetrics.outerRadius * 1.5f); position.z = z * (HexMetrics.outerRadius * 1.5f);
var cellGO = Object.Instantiate(_cellPrefab); var cellGO = Object.Instantiate(_cellPrefab);
HexCell cell = _cells[i] = cellGO.GetComponent<HexCell>(); HexCell cell = _cells[i] = cellGO.GetComponent<HexCell>();
cell.SetDictionary(_colors);
cell.PaintHex(UnitColor.GREY);
cell.transform.SetParent(_baseGameObject.transform, false); cell.transform.SetParent(_baseGameObject.transform, false);
cell.transform.localPosition = position; cell.transform.localPosition = position;
cell.coordinates = HexCoordinates.FromOffsetCoordinates(x, z); cell.coordinates = HexCoordinates.FromOffsetCoordinates(x, z);
cell.color = _defaultColor; cell.onHexPainted += OnHexPainted;
cell.OnHexPainted += OnHexPainted;
if (x > 0) { if (x > 0)
{
cell.SetNeighbor(HexDirection.W, _cells[i - 1]); cell.SetNeighbor(HexDirection.W, _cells[i - 1]);
} }
if (z > 0) { if (z > 0)
if ((z & 1) == 0) { {
if ((z & 1) == 0)
{
cell.SetNeighbor(HexDirection.SE, _cells[i - _width]); cell.SetNeighbor(HexDirection.SE, _cells[i - _width]);
if (x > 0) { if (x > 0)
{
cell.SetNeighbor(HexDirection.SW, _cells[i - _width - 1]); cell.SetNeighbor(HexDirection.SW, _cells[i - _width - 1]);
} }
} }
else { else
{
cell.SetNeighbor(HexDirection.SW, _cells[i - _width]); cell.SetNeighbor(HexDirection.SW, _cells[i - _width]);
if (x < _width - 1) { if (x < _width - 1)
{
cell.SetNeighbor(HexDirection.SE, _cells[i - _width + 1]); cell.SetNeighbor(HexDirection.SE, _cells[i - _width + 1]);
} }
} }
} }
#if UNITY_EDITOR #if UNITY_EDITOR
TMP_Text label = Object.Instantiate(_cellLabelPrefab, _gridCanvas.transform, false); TMP_Text label = Object.Instantiate(_cellLabelPrefab, _gridCanvas.transform, false);
label.rectTransform.anchoredPosition = label.rectTransform.anchoredPosition =
new Vector2(position.x, position.z); new Vector2(position.x, position.z);
label.text = cell.coordinates.ToStringOnSeparateLines(); label.text = cell.coordinates.ToStringOnSeparateLines();
#endif #endif
} }
public void Init() public void Init()
@ -113,6 +111,5 @@ namespace HexFiled
// _hexMesh.Triangulate(_cells); // _hexMesh.Triangulate(_cells);
OnGridLoaded.Invoke(); OnGridLoaded.Invoke();
} }
} }
} }

View File

@ -0,0 +1,9 @@
namespace HexFiled
{
public enum UnitColor
{
GREEN,
RED,
GREY
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: b3c5f2a8422b4c3b81178ae5cf8597b0
timeCreated: 1640030929

View File

@ -8,6 +8,7 @@ using UnityEngine.UI;
public class FadeIn : MonoBehaviour public class FadeIn : MonoBehaviour
{ {
[SerializeField] private float duration; [SerializeField] private float duration;
private void OnEnable() private void OnEnable()
{ {
var back = GetComponent<Image>(); var back = GetComponent<Image>();

View File

@ -0,0 +1,14 @@
using HexFiled;
using UnityEngine;
namespace DefaultNamespace
{
public class VFXController
{
void HexCaptured(HexCell cell)
{
ParticleSystem system;
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: e5124914ee2c478bb47f35353a0669fb
timeCreated: 1640027806