You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
PlumberUltimateAds/Assets/Scripts/LevelDesigner.cs

342 lines
9.2 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*
http://www.cgsoso.com/forum-211-1.html
CG搜搜 Unity3d 每日Unity3d插件免费更新 更有VIP资源
CGSOSO 主打游戏开发影视设计等CG资源素材。
插件如若商用,请务必官网购买!
daily assets update for try.
U should buy the asset from home store if u use it in your project!
*/
using MS;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class LevelDesigner : MonoBehaviour
{
public List<Cell> _cellPrefab;
public LevelDesignCell _levelDesigncellPrefab;
public Button newBtn;
public Button openBtn;
public Button saveBtn;
public int row;
public int column;
public InputField rowInput;
public InputField columnInput;
public Text levelSizeLbl;
public Popup cellTypePopup;
public Text pipeColorLbl;
public GameObject chooseColorBegin;
public GameObject chooseColorEnd;
[Header("Layout Setting")]
public RectTransform _levelContainer;
public float _space = 1f;
public bool enableSaveWithoutCheck;
[HideInInspector]
public List<LevelDesignCell> allCellList;
private RectTransform rootCanvas;
private float _levelContainerMaxHeight;
public static LevelDesigner instance;
private LevelDesignCell _selectedCell;
public LevelDesignCell SelectedCell
{
get
{
return _selectedCell;
}
set
{
if (_selectedCell != null)
{
_selectedCell.selectionImage.gameObject.SetActive(value: false);
}
_selectedCell = value;
if (_selectedCell != null)
{
chooseColorBegin.gameObject.SetActive(SelectedCell != null && SelectedCell.cell.pipeCellType == CellType.Start);
chooseColorEnd.gameObject.SetActive(SelectedCell != null && SelectedCell.cell.pipeCellType == CellType.End);
_selectedCell.selectionImage.gameObject.SetActive(value: true);
}
else
{
chooseColorBegin.gameObject.SetActive(value: false);
chooseColorEnd.gameObject.SetActive(value: false);
UpdatePipes();
}
}
}
private void Start()
{
instance = this;
rowInput.onValueChanged.AddListener(delegate(string arg)
{
if (arg.StartsWith("-"))
{
rowInput.text = string.Empty;
}
else
{
int.TryParse(arg, out row);
}
});
columnInput.onValueChanged.AddListener(delegate(string arg)
{
if (arg.StartsWith("-"))
{
columnInput.text = string.Empty;
}
else
{
int.TryParse(arg, out column);
}
});
ResetLevelDesigner();
rootCanvas = base.transform.parent.GetComponent<RectTransform>();
_levelContainerMaxHeight = _levelContainer.rect.height;
}
private void Update()
{
if (SelectedCell != null)
{
if (UnityEngine.Input.GetKeyUp(KeyCode.Alpha1) || UnityEngine.Input.GetKeyUp(KeyCode.Keypad1))
{
OnCellSilider(2f);
OnCRotSilider(1f);
}
else if (UnityEngine.Input.GetKeyUp(KeyCode.Alpha2) || UnityEngine.Input.GetKeyUp(KeyCode.Keypad2))
{
OnCellSilider(2f);
OnCRotSilider(0f);
}
else if (UnityEngine.Input.GetKeyUp(KeyCode.Alpha3) || UnityEngine.Input.GetKeyUp(KeyCode.Keypad3))
{
OnCellSilider(6f);
}
else if (UnityEngine.Input.GetKeyUp(KeyCode.X))
{
OnCellSilider(0f);
}
else if (UnityEngine.Input.GetKeyUp(KeyCode.RightArrow))
{
OnCRotSilider((SelectedCell.cellData.RightRotationValue + 1) % 4);
}
else if (UnityEngine.Input.GetKeyUp(KeyCode.LeftArrow))
{
OnCRotSilider((SelectedCell.cellData.RightRotationValue - 1 >= 0) ? (SelectedCell.cellData.RightRotationValue - 1) : 3);
}
}
saveBtn.interactable = (saveBtn.interactable || enableSaveWithoutCheck);
}
public void OnNewBtn()
{
if (rowInput.gameObject.activeSelf)
{
if (string.IsNullOrEmpty(rowInput.text) || string.IsNullOrEmpty(columnInput.text))
{
Toast.instance.ShowMessage("You can't leave row or column empty");
return;
}
if (row == 0 || column == 0)
{
Toast.instance.ShowMessage("Row and column must be larger than 0");
return;
}
SetupLevel(row, column);
newBtn.GetComponentInChildren<Text>().text = "New";
openBtn.gameObject.SetActive(value: true);
saveBtn.gameObject.SetActive(value: true);
rowInput.gameObject.SetActive(value: false);
columnInput.gameObject.SetActive(value: false);
}
else
{
newBtn.GetComponentInChildren<Text>().text = "Ok";
openBtn.gameObject.SetActive(value: false);
saveBtn.gameObject.SetActive(value: false);
rowInput.gameObject.SetActive(value: true);
columnInput.gameObject.SetActive(value: true);
ResetLevelDesigner();
}
}
public void OnOpenBtn()
{
}
public void OnSaveBtn()
{
}
public void ResetLevelDesigner()
{
SelectedCell = null;
saveBtn.interactable = false;
allCellList = new List<LevelDesignCell>();
for (int num = _levelContainer.childCount - 1; num >= 0; num--)
{
UnityEngine.Object.DestroyImmediate(_levelContainer.GetChild(num).gameObject);
}
}
public void SetupLevel(int row, int column)
{
ResetLevelDesigner();
_levelContainer.sizeDelta = new Vector2(rootCanvas.rect.width, _levelContainerMaxHeight);
float a = Mathf.Min(_levelContainer.rect.width / (float)column, _levelContainer.rect.height / (float)row);
a = Mathf.Min(a, 140f);
_levelContainer.sizeDelta = new Vector2((float)column * a, (float)row * a);
for (int i = 0; i < row; i++)
{
for (int j = 0; j < column; j++)
{
LevelDesignCell levelDesignCell = UnityEngine.Object.Instantiate(_levelDesigncellPrefab, _levelContainer);
levelDesignCell.GetComponent<RectTransform>().sizeDelta = Vector2.one * a;
levelDesignCell.GetComponent<RectTransform>().anchoredPosition = new Vector2((float)j * a + (float)j * _space, (float)(-i) * a - (float)i * _space);
levelDesignCell.cellData = new LevelCellData(0, 0, 0, PipeColor.None, redundant: false);
levelDesignCell.pos = new Vector2Int(j, i);
allCellList.Add(levelDesignCell);
levelDesignCell.UpdateCell();
}
}
SelectedCell = null;
}
public void OnCellSilider(float t)
{
int cellIndex = (int)t;
if (SelectedCell != null)
{
SelectedCell.cellData.CellIndex = cellIndex;
SelectedCell.cellData.DefaultColor = PipeColor.None;
SelectedCell.UpdateCell();
}
chooseColorBegin.gameObject.SetActive(SelectedCell != null && SelectedCell.cell.pipeCellType == CellType.Start);
chooseColorEnd.gameObject.SetActive(SelectedCell != null && SelectedCell.cell.pipeCellType == CellType.End);
UpdatePipes();
}
public void OnCRotSilider(float t)
{
int num = (int)t;
if (SelectedCell != null)
{
SelectedCell.cellData.RightRotationValue = num;
SelectedCell.cell.RotationValue = num;
SelectedCell.cell.ApplyRotationOnImage();
UpdatePipes();
}
}
public void OnColorChosen(int v)
{
Text text = pipeColorLbl;
PipeColor pipeColor = (PipeColor)v;
text.text = "Color : " + pipeColor.ToString();
SelectedCell.cellData.DefaultColor = (PipeColor)v;
SelectedCell.cell.defaultColor = (PipeColor)v;
UpdatePipes();
}
public void OnButtonClick(LevelDesignCell c)
{
SelectedCell = c;
}
private void UpdatePipes()
{
allCellList.ForEach(delegate(LevelDesignCell obj)
{
obj.RemoveAllPipeColor();
});
allCellList.ForEach(delegate(LevelDesignCell designCell)
{
Cell cell = designCell.cell;
if (cell.pipeCellType == CellType.Start)
{
LevelDesignCell levelDesignCell = cell.pipes[0].T ? designCell.TopCell : (cell.pipes[0].B ? designCell.BottomCell : ((!cell.pipes[0].L) ? designCell.RightCell : designCell.LeftCell));
Side sourceSide = cell.pipes[0].T ? Side.T : (cell.pipes[0].R ? Side.R : (cell.pipes[0].B ? Side.B : Side.L));
if (levelDesignCell != null)
{
levelDesignCell.FillColor(new List<PipeColor>
{
cell.defaultColor
}, designCell, sourceSide);
}
}
});
allCellList.ForEach(delegate(LevelDesignCell obj)
{
obj.cell.UpdatePipeColor();
});
saveBtn.interactable = IsGameOver();
}
public bool IsGameOver()
{
List<LevelDesignCell> list = allCellList.FindAll((LevelDesignCell obj) => obj.cell.pipeCellType == CellType.End);
List<LevelDesignCell> list2 = allCellList.FindAll((LevelDesignCell obj) => obj.cell.pipeCellType == CellType.Start);
List<LevelDesignCell> list3 = list.FindAll((LevelDesignCell x) => x.cell.defaultColor == PipeColor.None);
List<LevelDesignCell> list4 = list2.FindAll((LevelDesignCell x) => x.cell.defaultColor == PipeColor.None);
if (list.Count == 0 || list2.Count == 0 || list3.Count != 0 || list4.Count != 0)
{
return false;
}
foreach (LevelDesignCell item in list)
{
if (item.cell.defaultColor != ColorManager.MixPipeColor(item.cell.pipes[0].fillColor))
{
return false;
}
}
foreach (LevelDesignCell allCell in allCellList)
{
Cell cell = allCell.cell;
foreach (Pipe pipe in cell.pipes)
{
if (((cell.pipeCellType != CellType.Start && cell.pipeCellType != CellType.End) ? ColorManager.MixPipeColor(pipe.fillColor) : cell.defaultColor) != 0)
{
if ((pipe.L && allCell.LeftCell == null) || (pipe.R && allCell.RightCell == null) || (pipe.T && allCell.TopCell == null) || (pipe.B && allCell.BottomCell == null))
{
return false;
}
if ((pipe.L && !allCell.LeftCell.HasSide(Side.R)) || (pipe.R && !allCell.RightCell.HasSide(Side.L)) || (pipe.T && !allCell.TopCell.HasSide(Side.B)) || (pipe.B && !allCell.BottomCell.HasSide(Side.T)))
{
return false;
}
}
}
}
return true;
}
}