|
|
|
|
/*
|
|
|
|
|
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 System.Collections.Generic;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
using UnityEngine.UI;
|
|
|
|
|
|
|
|
|
|
public class Cell : MonoBehaviour
|
|
|
|
|
{
|
|
|
|
|
public Vector2Int pos;
|
|
|
|
|
|
|
|
|
|
public PipeColor defaultColor;
|
|
|
|
|
|
|
|
|
|
public int rightRotationValue;
|
|
|
|
|
|
|
|
|
|
[Header("PipeDetail")]
|
|
|
|
|
public RectTransform pipeParent;
|
|
|
|
|
|
|
|
|
|
public CellType pipeCellType;
|
|
|
|
|
|
|
|
|
|
public List<Pipe> pipes;
|
|
|
|
|
|
|
|
|
|
public List<Sprite> pipeSprites;
|
|
|
|
|
|
|
|
|
|
public int correctRotateDelta = 4;
|
|
|
|
|
|
|
|
|
|
[HideInInspector]
|
|
|
|
|
public bool redundant;
|
|
|
|
|
|
|
|
|
|
private bool _isHint;
|
|
|
|
|
|
|
|
|
|
public int _rotationValue;
|
|
|
|
|
private object pipe;
|
|
|
|
|
public CellKind cellKind;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public bool IsHint
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
return _isHint;
|
|
|
|
|
}
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
if (value)
|
|
|
|
|
{
|
|
|
|
|
RotationValue = rightRotationValue;
|
|
|
|
|
ApplyRotationOnImage(0.05f);
|
|
|
|
|
GetComponent<Image>().color = ColorManager.intance.hintCellBGColor;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
GetComponent<Image>().color = ColorManager.intance.normalCellBGColor;
|
|
|
|
|
}
|
|
|
|
|
_isHint = value;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public int RotationValue
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
return _rotationValue;
|
|
|
|
|
}
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
if (!IsHint)
|
|
|
|
|
{
|
|
|
|
|
int num = (value < 4) ? value : 0;
|
|
|
|
|
num = (_rotationValue = ((num >= 0) ? num : 3));
|
|
|
|
|
pipes.ForEach(delegate (Pipe obj)
|
|
|
|
|
{
|
|
|
|
|
obj.SetPipeRotation(_rotationValue);
|
|
|
|
|
SetCellFlowSide(cellKind);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Cell RightCell
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
Vector2Int v = pos + Vector2Int.right;
|
|
|
|
|
if (!IsValidIndex(v))
|
|
|
|
|
{
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
return GetCellFromVector(v);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Cell LeftCell
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
Vector2Int v = pos + Vector2Int.left;
|
|
|
|
|
if (!IsValidIndex(v))
|
|
|
|
|
{
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
return GetCellFromVector(v);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Cell TopCell
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
Vector2Int v = pos + Vector2Int.down;
|
|
|
|
|
if (!IsValidIndex(v))
|
|
|
|
|
{
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
return GetCellFromVector(v);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Cell BottomCell
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
Vector2Int v = pos + Vector2Int.up;
|
|
|
|
|
if (!IsValidIndex(v))
|
|
|
|
|
{
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
return GetCellFromVector(v);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SetLevelData(LevelCellData lcd)
|
|
|
|
|
{
|
|
|
|
|
defaultColor = lcd.DefaultColor;
|
|
|
|
|
if (pipeCellType != 0)
|
|
|
|
|
{
|
|
|
|
|
GetComponent<Button>().onClick.AddListener(delegate
|
|
|
|
|
{
|
|
|
|
|
if (GamePlayManager.instance != null)
|
|
|
|
|
{
|
|
|
|
|
GamePlayManager.instance.OnButtonClick(this);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
rightRotationValue = lcd.RightRotationValue;
|
|
|
|
|
RotationValue = lcd.CurrentRotationValue;
|
|
|
|
|
ApplyRotationOnImage();
|
|
|
|
|
UpdatePipeColor();
|
|
|
|
|
IsHint = false;
|
|
|
|
|
redundant = lcd.Redundant;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void UpdatePipeColor()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (pipeCellType == CellType.Start)
|
|
|
|
|
{
|
|
|
|
|
pipes.ForEach(delegate (Pipe p)
|
|
|
|
|
{
|
|
|
|
|
switch (defaultColor)
|
|
|
|
|
{
|
|
|
|
|
case PipeColor.None:
|
|
|
|
|
pipes.ForEach(delegate (Pipe obj)
|
|
|
|
|
{
|
|
|
|
|
obj.Img_1.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.None;
|
|
|
|
|
obj.Img_2.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.None;
|
|
|
|
|
obj.Img_3.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.None;
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
case PipeColor.A:
|
|
|
|
|
pipes.ForEach(delegate (Pipe obj)
|
|
|
|
|
{
|
|
|
|
|
obj.Img_1.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Red;
|
|
|
|
|
obj.Img_2.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Red;
|
|
|
|
|
obj.Img_3.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Red;
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
case PipeColor.B:
|
|
|
|
|
pipes.ForEach(delegate (Pipe obj)
|
|
|
|
|
{
|
|
|
|
|
obj.Img_1.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Blue;
|
|
|
|
|
obj.Img_2.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Blue;
|
|
|
|
|
obj.Img_3.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Blue;
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
case PipeColor.C:
|
|
|
|
|
pipes.ForEach(delegate (Pipe obj)
|
|
|
|
|
{
|
|
|
|
|
obj.Img_1.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Yellow;
|
|
|
|
|
obj.Img_2.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Yellow;
|
|
|
|
|
obj.Img_3.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Yellow;
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
case PipeColor.AB:
|
|
|
|
|
pipes.ForEach(delegate (Pipe obj)
|
|
|
|
|
{
|
|
|
|
|
obj.Img_1.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Purple;
|
|
|
|
|
obj.Img_2.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Purple;
|
|
|
|
|
obj.Img_3.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Purple;
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
case PipeColor.AC:
|
|
|
|
|
pipes.ForEach(delegate (Pipe obj)
|
|
|
|
|
{
|
|
|
|
|
obj.Img_1.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Orange;
|
|
|
|
|
obj.Img_2.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Orange;
|
|
|
|
|
obj.Img_3.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Orange;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
case PipeColor.BC:
|
|
|
|
|
pipes.ForEach(delegate (Pipe obj)
|
|
|
|
|
{
|
|
|
|
|
obj.Img_1.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Green;
|
|
|
|
|
obj.Img_2.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Green;
|
|
|
|
|
obj.Img_3.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Green;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
case PipeColor.ABC:
|
|
|
|
|
pipes.ForEach(delegate (Pipe obj)
|
|
|
|
|
{
|
|
|
|
|
obj.Img_1.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Brown;
|
|
|
|
|
obj.Img_2.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Brown;
|
|
|
|
|
obj.Img_3.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Brown;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (pipeCellType == CellType.Middle)
|
|
|
|
|
{
|
|
|
|
|
pipes.ForEach(delegate (Pipe p)
|
|
|
|
|
{
|
|
|
|
|
p.pipeImage.sprite = pipeSprites[(int)ColorManager.MixPipeColor(p.fillColor)];
|
|
|
|
|
|
|
|
|
|
switch (ColorManager.MixPipeColor(p.fillColor))
|
|
|
|
|
{
|
|
|
|
|
case PipeColor.None:
|
|
|
|
|
pipes.ForEach(delegate (Pipe obj)
|
|
|
|
|
{
|
|
|
|
|
obj.Img_1.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.None;
|
|
|
|
|
obj.Img_2.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.None;
|
|
|
|
|
obj.Img_3.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.None;
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
case PipeColor.A:
|
|
|
|
|
pipes.ForEach(delegate (Pipe obj)
|
|
|
|
|
{
|
|
|
|
|
obj.Img_1.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Red;
|
|
|
|
|
obj.Img_2.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Red;
|
|
|
|
|
obj.Img_3.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Red;
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
case PipeColor.B:
|
|
|
|
|
pipes.ForEach(delegate (Pipe obj)
|
|
|
|
|
{
|
|
|
|
|
obj.Img_1.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Blue;
|
|
|
|
|
obj.Img_2.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Blue;
|
|
|
|
|
obj.Img_3.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Blue;
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
case PipeColor.C:
|
|
|
|
|
pipes.ForEach(delegate (Pipe obj)
|
|
|
|
|
{
|
|
|
|
|
obj.Img_1.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Yellow;
|
|
|
|
|
obj.Img_2.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Yellow;
|
|
|
|
|
obj.Img_3.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Yellow;
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
case PipeColor.AB:
|
|
|
|
|
pipes.ForEach(delegate (Pipe obj)
|
|
|
|
|
{
|
|
|
|
|
obj.Img_1.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Purple;
|
|
|
|
|
obj.Img_2.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Purple;
|
|
|
|
|
obj.Img_3.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Purple;
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
case PipeColor.AC:
|
|
|
|
|
pipes.ForEach(delegate (Pipe obj)
|
|
|
|
|
{
|
|
|
|
|
obj.Img_1.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Orange;
|
|
|
|
|
obj.Img_2.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Orange;
|
|
|
|
|
obj.Img_3.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Orange;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
case PipeColor.BC:
|
|
|
|
|
pipes.ForEach(delegate (Pipe obj)
|
|
|
|
|
{
|
|
|
|
|
obj.Img_1.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Green;
|
|
|
|
|
obj.Img_2.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Green;
|
|
|
|
|
obj.Img_3.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Green;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
case PipeColor.ABC:
|
|
|
|
|
pipes.ForEach(delegate (Pipe obj)
|
|
|
|
|
{
|
|
|
|
|
obj.Img_1.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Brown;
|
|
|
|
|
obj.Img_2.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Brown;
|
|
|
|
|
obj.Img_3.transform.GetChild(0).GetComponent<SpriteRenderer>().color = ColorManager.intance.Brown;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
pipes.ForEach(delegate (Pipe p)
|
|
|
|
|
{
|
|
|
|
|
p.pipeImage.sprite = pipeSprites[(int)defaultColor];
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void ApplyRotationOnImage(float t = 0f)
|
|
|
|
|
{
|
|
|
|
|
LeanTween.rotateZ(pipeParent.gameObject, (float)_rotationValue * -90f, t);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private bool IsValidIndex(Vector2Int v)
|
|
|
|
|
{
|
|
|
|
|
if (v.x < 0 || v.y < 0 || v.x >= GameManager.currentLevel.column || v.y >= GameManager.currentLevel.row)
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
Cell cellFromVector = GetCellFromVector(v);
|
|
|
|
|
if (cellFromVector.pipeCellType == CellType.Blank)
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Cell GetCellFromVector(Vector2Int v)
|
|
|
|
|
{
|
|
|
|
|
int index = v.y * GameManager.currentLevel.column + v.x;
|
|
|
|
|
return GamePlayManager.instance.allCellList[index];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool HasSide(Side side)
|
|
|
|
|
{
|
|
|
|
|
foreach (Pipe pipe in pipes)
|
|
|
|
|
{
|
|
|
|
|
if (pipe.R && side == Side.R)
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
if (pipe.L && side == Side.L)
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
if (pipe.T && side == Side.T)
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
if (pipe.B && side == Side.B)
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool HasAnyColor()
|
|
|
|
|
{
|
|
|
|
|
foreach (Pipe pipe in pipes)
|
|
|
|
|
{
|
|
|
|
|
if (pipe.fillColor.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool IsInRighRotation()
|
|
|
|
|
{
|
|
|
|
|
return (Mathf.Max(RotationValue, rightRotationValue) - Mathf.Min(RotationValue, rightRotationValue)) % correctRotateDelta == 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void RemoveAllPipeColor()
|
|
|
|
|
{
|
|
|
|
|
pipes.ForEach(delegate (Pipe obj)
|
|
|
|
|
{
|
|
|
|
|
obj.RemoveAll();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Reset Pipe Leaking
|
|
|
|
|
pipes.ForEach(delegate (Pipe obj)
|
|
|
|
|
{
|
|
|
|
|
obj.BottomLeak = false;
|
|
|
|
|
obj.LeftLeak = false;
|
|
|
|
|
obj.RightLeak = false;
|
|
|
|
|
obj.TopLeak = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(obj.Img_1)
|
|
|
|
|
obj.Img_1.gameObject.SetActive(false);
|
|
|
|
|
if(obj.Img_2)
|
|
|
|
|
obj.Img_2.gameObject.SetActive(false);
|
|
|
|
|
if(obj.Img_3)
|
|
|
|
|
obj.Img_3.gameObject.SetActive(false);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void FillColor(List<PipeColor> c, Cell source, Side sourceSide)
|
|
|
|
|
{
|
|
|
|
|
if (pipeCellType != CellType.Start)
|
|
|
|
|
{
|
|
|
|
|
foreach (Pipe pipe in pipes)
|
|
|
|
|
{
|
|
|
|
|
if ((pipe.L && sourceSide == Side.R) || (pipe.R && sourceSide == Side.L) || (pipe.T && sourceSide == Side.B) || (pipe.B && sourceSide == Side.T))
|
|
|
|
|
{
|
|
|
|
|
if (pipe.AddColor(c) == 0)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
if (pipe.L && LeftCell != null && LeftCell != source)
|
|
|
|
|
{
|
|
|
|
|
LeftCell.FillColor(c, this, Side.L);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (pipe.L)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (LeftCell != null)
|
|
|
|
|
{
|
|
|
|
|
foreach (Pipe leftCellPipe in LeftCell.pipes)
|
|
|
|
|
{
|
|
|
|
|
if (leftCellPipe.R)
|
|
|
|
|
{
|
|
|
|
|
pipe.LeftLeak = false;
|
|
|
|
|
|
|
|
|
|
if (pipe.leakL != null)
|
|
|
|
|
{
|
|
|
|
|
pipe.leakL.gameObject.SetActive(false);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
pipe.LeftLeak = true;
|
|
|
|
|
if (pipe.leakL != null)
|
|
|
|
|
{
|
|
|
|
|
pipe.leakL.gameObject.SetActive(true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
pipe.LeftLeak = true;
|
|
|
|
|
if (pipe.leakL != null)
|
|
|
|
|
{
|
|
|
|
|
pipe.leakL.gameObject.SetActive(true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//if (LeftCell == null)
|
|
|
|
|
//{
|
|
|
|
|
// pipe.LeftLeak = true;
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
//else if (LeftCell.pipes[0].R)
|
|
|
|
|
//{
|
|
|
|
|
// pipe.LeftLeak = false;
|
|
|
|
|
//}
|
|
|
|
|
//else
|
|
|
|
|
//{
|
|
|
|
|
// pipe.LeftLeak = true;
|
|
|
|
|
//}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (pipe.R && RightCell != null && RightCell != source)
|
|
|
|
|
{
|
|
|
|
|
RightCell.FillColor(c, this, Side.R);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (pipe.R)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (RightCell != null)
|
|
|
|
|
{
|
|
|
|
|
foreach (Pipe rightCellPipe in RightCell.pipes)
|
|
|
|
|
{
|
|
|
|
|
if (rightCellPipe.L)
|
|
|
|
|
{
|
|
|
|
|
pipe.RightLeak = false;
|
|
|
|
|
if (pipe.leakR != null)
|
|
|
|
|
{
|
|
|
|
|
pipe.leakR.gameObject.SetActive(false);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
pipe.RightLeak = true;
|
|
|
|
|
if (pipe.leakR != null)
|
|
|
|
|
{
|
|
|
|
|
pipe.leakR.gameObject.SetActive(true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
pipe.RightLeak = true;
|
|
|
|
|
if (pipe.leakR != null)
|
|
|
|
|
{
|
|
|
|
|
pipe.leakR.gameObject.SetActive(true);
|
|
|
|
|
}
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (pipe.T && TopCell != null && TopCell != source)
|
|
|
|
|
{
|
|
|
|
|
TopCell.FillColor(c, this, Side.T);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (pipe.T)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (TopCell != null)
|
|
|
|
|
{
|
|
|
|
|
foreach (Pipe topCellPipe in TopCell.pipes)
|
|
|
|
|
{
|
|
|
|
|
if (topCellPipe.B)
|
|
|
|
|
{
|
|
|
|
|
pipe.TopLeak = false;
|
|
|
|
|
if (pipe.leakT != null)
|
|
|
|
|
{
|
|
|
|
|
pipe.leakT.gameObject.SetActive(false);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
pipe.TopLeak = true;
|
|
|
|
|
if (pipe.leakT != null)
|
|
|
|
|
{
|
|
|
|
|
pipe.leakT.gameObject.SetActive(true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
pipe.TopLeak = true;
|
|
|
|
|
if (pipe.leakT != null)
|
|
|
|
|
{
|
|
|
|
|
pipe.leakT.gameObject.SetActive(true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (pipe.B && BottomCell != null && BottomCell != source)
|
|
|
|
|
{
|
|
|
|
|
BottomCell.FillColor(c, this, Side.B);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (pipe.B)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if (BottomCell != null)
|
|
|
|
|
{
|
|
|
|
|
foreach (Pipe bottomCellPipe in BottomCell.pipes)
|
|
|
|
|
{
|
|
|
|
|
if (bottomCellPipe.T)
|
|
|
|
|
{
|
|
|
|
|
pipe.BottomLeak = false;
|
|
|
|
|
if (pipe.leakB != null)
|
|
|
|
|
{
|
|
|
|
|
pipe.leakB.gameObject.SetActive(false);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
pipe.BottomLeak = true;
|
|
|
|
|
if (pipe.leakB != null)
|
|
|
|
|
{
|
|
|
|
|
pipe.leakB.gameObject.SetActive(true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
pipe.BottomLeak = true;
|
|
|
|
|
if (pipe.leakB != null)
|
|
|
|
|
{
|
|
|
|
|
pipe.leakB.gameObject.SetActive(true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void SetCellFlowSide(CellKind cellKind)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
switch (cellKind)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case CellKind.Single:
|
|
|
|
|
|
|
|
|
|
if (_rotationValue ==0)
|
|
|
|
|
{
|
|
|
|
|
pipes[0].leakB = pipes[0].Img_1.gameObject;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (_rotationValue == 1)
|
|
|
|
|
{
|
|
|
|
|
pipes[0].leakL = pipes[0].Img_1.gameObject;
|
|
|
|
|
}
|
|
|
|
|
else if (_rotationValue == 2)
|
|
|
|
|
{
|
|
|
|
|
pipes[0].leakT = pipes[0].Img_1.gameObject;
|
|
|
|
|
}
|
|
|
|
|
else if (_rotationValue == 3)
|
|
|
|
|
{
|
|
|
|
|
pipes[0].leakR = pipes[0].Img_1.gameObject;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case CellKind.StraightTwoFace:
|
|
|
|
|
|
|
|
|
|
if (_rotationValue == 0)
|
|
|
|
|
{
|
|
|
|
|
pipes[0].leakB = pipes[0].Img_1.gameObject;
|
|
|
|
|
pipes[0].leakT = pipes[0].Img_2.gameObject;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (_rotationValue == 1)
|
|
|
|
|
{
|
|
|
|
|
pipes[0].leakL = pipes[0].Img_1.gameObject;
|
|
|
|
|
pipes[0].leakR = pipes[0].Img_2.gameObject;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (_rotationValue == 2)
|
|
|
|
|
{
|
|
|
|
|
pipes[0].leakT = pipes[0].Img_1.gameObject;
|
|
|
|
|
pipes[0].leakB = pipes[0].Img_2.gameObject;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (_rotationValue == 3)
|
|
|
|
|
{
|
|
|
|
|
pipes[0].leakR = pipes[0].Img_1.gameObject;
|
|
|
|
|
pipes[0].leakL = pipes[0].Img_2.gameObject;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case CellKind.CurvedTwoFace:
|
|
|
|
|
|
|
|
|
|
if (_rotationValue == 0)
|
|
|
|
|
{
|
|
|
|
|
pipes[0].leakB = pipes[0].Img_1.gameObject;
|
|
|
|
|
pipes[0].leakR = pipes[0].Img_2.gameObject;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (_rotationValue == 1)
|
|
|
|
|
{
|
|
|
|
|
pipes[0].leakL = pipes[0].Img_1.gameObject;
|
|
|
|
|
pipes[0].leakB = pipes[0].Img_2.gameObject;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (_rotationValue == 2)
|
|
|
|
|
{
|
|
|
|
|
pipes[0].leakT = pipes[0].Img_1.gameObject;
|
|
|
|
|
pipes[0].leakL = pipes[0].Img_2.gameObject;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (_rotationValue == 3)
|
|
|
|
|
{
|
|
|
|
|
pipes[0].leakR = pipes[0].Img_1.gameObject;
|
|
|
|
|
pipes[0].leakT = pipes[0].Img_2.gameObject;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case CellKind.ThreeFace:
|
|
|
|
|
|
|
|
|
|
if (_rotationValue == 0)
|
|
|
|
|
{
|
|
|
|
|
pipes[0].leakB = pipes[0].Img_1.gameObject;
|
|
|
|
|
pipes[0].leakL = pipes[0].Img_2.gameObject;
|
|
|
|
|
pipes[0].leakR = pipes[0].Img_3.gameObject;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (_rotationValue == 1)
|
|
|
|
|
{
|
|
|
|
|
pipes[0].leakL = pipes[0].Img_1.gameObject;
|
|
|
|
|
pipes[0].leakB = pipes[0].Img_3.gameObject;
|
|
|
|
|
pipes[0].leakT = pipes[0].Img_2.gameObject;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (_rotationValue == 2)
|
|
|
|
|
{
|
|
|
|
|
pipes[0].leakT = pipes[0].Img_1.gameObject;
|
|
|
|
|
pipes[0].leakL = pipes[0].Img_3.gameObject;
|
|
|
|
|
pipes[0].leakR = pipes[0].Img_2.gameObject;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (_rotationValue == 3)
|
|
|
|
|
{
|
|
|
|
|
pipes[0].leakR = pipes[0].Img_1.gameObject;
|
|
|
|
|
pipes[0].leakB = pipes[0].Img_2.gameObject;
|
|
|
|
|
pipes[0].leakT = pipes[0].Img_3.gameObject;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case CellKind.StraightDualTwoFace:
|
|
|
|
|
|
|
|
|
|
if (_rotationValue == 0)
|
|
|
|
|
{
|
|
|
|
|
pipes[0].leakB = pipes[0].Img_1.gameObject;
|
|
|
|
|
pipes[0].leakT = pipes[0].Img_2.gameObject;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (_rotationValue == 1)
|
|
|
|
|
{
|
|
|
|
|
pipes[0].leakL = pipes[0].Img_1.gameObject;
|
|
|
|
|
pipes[0].leakR = pipes[0].Img_2.gameObject;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (_rotationValue == 2)
|
|
|
|
|
{
|
|
|
|
|
pipes[0].leakT = pipes[0].Img_1.gameObject;
|
|
|
|
|
pipes[0].leakB = pipes[0].Img_2.gameObject;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (_rotationValue == 3)
|
|
|
|
|
{
|
|
|
|
|
pipes[0].leakR = pipes[0].Img_1.gameObject;
|
|
|
|
|
pipes[0].leakL = pipes[0].Img_2.gameObject;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
if (_rotationValue == 0)
|
|
|
|
|
{
|
|
|
|
|
pipes[1].leakL = pipes[1].Img_1.gameObject;
|
|
|
|
|
pipes[1].leakR = pipes[1].Img_2.gameObject;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (_rotationValue == 1)
|
|
|
|
|
{
|
|
|
|
|
pipes[1].leakT = pipes[1].Img_1.gameObject;
|
|
|
|
|
pipes[1].leakB = pipes[1].Img_2.gameObject;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (_rotationValue == 2)
|
|
|
|
|
{
|
|
|
|
|
pipes[1].leakL = pipes[1].Img_2.gameObject;
|
|
|
|
|
pipes[1].leakR = pipes[1].Img_1.gameObject;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (_rotationValue == 3)
|
|
|
|
|
{
|
|
|
|
|
pipes[1].leakT = pipes[1].Img_2.gameObject;
|
|
|
|
|
pipes[1].leakB = pipes[1].Img_1.gameObject;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case CellKind.CurvedDualTwoFace:
|
|
|
|
|
|
|
|
|
|
if (_rotationValue == 0)
|
|
|
|
|
{
|
|
|
|
|
pipes[0].leakR = pipes[0].Img_1.gameObject;
|
|
|
|
|
pipes[0].leakB = pipes[0].Img_2.gameObject;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (_rotationValue == 1)
|
|
|
|
|
{
|
|
|
|
|
pipes[0].leakB = pipes[0].Img_1.gameObject;
|
|
|
|
|
pipes[0].leakL = pipes[0].Img_2.gameObject;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (_rotationValue == 2)
|
|
|
|
|
{
|
|
|
|
|
pipes[0].leakL = pipes[0].Img_1.gameObject;
|
|
|
|
|
pipes[0].leakT = pipes[0].Img_2.gameObject;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (_rotationValue == 3)
|
|
|
|
|
{
|
|
|
|
|
pipes[0].leakT = pipes[0].Img_1.gameObject;
|
|
|
|
|
pipes[0].leakR = pipes[0].Img_2.gameObject;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////
|
|
|
|
|
if (_rotationValue == 0)
|
|
|
|
|
{
|
|
|
|
|
pipes[1].leakT = pipes[1].Img_1.gameObject;
|
|
|
|
|
pipes[1].leakL = pipes[1].Img_2.gameObject;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (_rotationValue == 1)
|
|
|
|
|
{
|
|
|
|
|
pipes[1].leakR = pipes[1].Img_1.gameObject;
|
|
|
|
|
pipes[1].leakT = pipes[1].Img_2.gameObject;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (_rotationValue == 2)
|
|
|
|
|
{
|
|
|
|
|
pipes[1].leakB = pipes[1].Img_1.gameObject;
|
|
|
|
|
pipes[1].leakR = pipes[1].Img_2.gameObject;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if (_rotationValue == 3)
|
|
|
|
|
{
|
|
|
|
|
pipes[1].leakL = pipes[1].Img_1.gameObject;
|
|
|
|
|
pipes[1].leakB = pipes[1].Img_2.gameObject;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|