public override IEnumerator Main() { Machine.ChangeSideEvent.Invoke(); var board = SceneSingleton.Get <Board>(); var client = Machine.GetComponent <TcpClientProxy>(); client.Send("change_side"); board.Enable = false; RegisterStateOnlyEvent(client.ReceiveEvent, (s) => { { var rx = new Regex(@"ai_move (\d+) (\d+)"); var match = rx.Match(s); if (match.Success) { var groups = match.Groups; board.AIMove(new Vector2Int(int.Parse(groups[1].Value), int.Parse(groups[2].Value))); var winrx = new Regex(@"win"); if (winrx.Match(s).Success) { Machine.AIWinEvent.Invoke(); } else { Machine.ChangeState(new WaitPlayerMove()); } } } }); yield break; }
public override IEnumerator Main() { Machine.WaitPlayerEvent.Invoke(); var board = SceneSingleton.Get <Board>(); board.Enable = true; RegisterStateOnlyEvent(board.PlayerMove, (pos) => { var client = Machine.GetComponent <TcpClientProxy>(); client.Send(string.Format("move {0} {1}", pos.x, pos.y)); Machine.ChangeState(new WaitPlayerMoveAnswer()); }); yield break; }
private void Start() { board = SceneSingleton.Get <Board>(); board.Elems[Position.x, Position.y] = this; var rectTransform = GetComponent <RectTransform>(); Vector2 pos = Position; pos -= new Vector2(board.Size.x - 1, board.Size.y - 1) / 2; pos.Scale(board.Stride); rectTransform.localPosition = pos; gameObject.name = string.Format("BoardElem[{0}, {1}]", Position.x, Position.y); button = GetComponent <Button>(); button.onClick.AddListener(OnClick); text = GetComponentInChildren <Text>(); }
void FixedUpdate() { var light = GetComponent <Light2D>(); if (light.lightType == Light2D.LightType.Point) { Vector2 origin = transform.position; var player = SceneSingleton.Get <Player>(); Vector2 target = player.transform.position; Vector2 dir = target - origin; if (!Physics2D.Raycast(origin, dir.normalized, dir.magnitude, blockLayer) && dir.magnitude < light.pointLightOuterRadius) { Vector2 localDir = transform.InverseTransformDirection(dir); var angle = Vector2.Angle(Vector2.up, localDir); if (angle * 2 < light.pointLightOuterAngle) { player.UpdateInLights(this, true); return; } } player.UpdateInLights(this, false); } }