//==============================[ client fabric ]================================ bool checkOnWinCF(TicketCell newCell) // (отключено, недоделано и неактуально) { /*List<Template> templates = main.templatesHolder.templates; * for(int i=0; i< templates.Count; i++) { * Template template = templates[i]; * for(int j=0; j<template.variables.Length; j++) { * //xy[] coordsCells = getCoordsByTicketCell(newCell); * //getVariableCellsByCell( new xy(newCell) ) * //Template win = template() * } * }*/ return(false); }
public TicketCell getCellByNum(int num) // получить клетку за её индексом в масиве ( 0..24 ) { //print(transform.childCount); for (int i = 0; i < cellsHolder.childCount; i++) { TicketCell tC = cellsHolder.GetChild(i).GetComponent <TicketCell>(); if (tC.numValue == num) { return(tC); } } return(null); }
// Калбэк приходящий непосредственно от самих шаров, при их столкновении с другими шарами, порождает звёзды, а сам шар переводит в состояние "остановлен" public void onNewBallStop(Ball newBall) { main.receivingTray.setBallToStopingBalls(newBall.gameObject); Ticket[] tickets = main.ticketHolder.getTickets(); var rbB = newBall.GetComponent <Rigidbody2D>(); for (int i = 0; (i < main.ticketHolder.transform.childCount && tickets[i] != null); i++) { TicketCell tC = tickets[i].getCellByNum(newBall.number); if (tC) { GameObject flyBall; if (flyingBallsPrefab != null && flyingBallsPrefab.GetComponent <SpriteRenderer>().sprite != null) { flyBall = Instantiate(flyingBallsPrefab); } else { flyBall = Instantiate(newBall.gameObject); } flyBall.transform.parent = flingBalls; Flying f = flyBall.AddComponent <Flying>(); f.destroyOnArrive = false; f.slowdown(3.0f, 0.02f, 0.9f); // #V здесь торможение звёзд: 1 - дистанция с которой начинается торможение, 2 - до скорости, 3 - сила торможения(если 1 то нулевая сила, если 0 то мгновеная остановка, если больше одного наоборот ускорение) flyBall.transform.position = newBall.transform.position; var b = flyBall.GetComponent <Ball>(); if (b != null) { flyBall.name = "flingBall_" + b.number; b.setOrderLayer(9); } var circleCollider = flyBall.GetComponent <CircleCollider2D>(); if (circleCollider != null) { circleCollider.enabled = false; } var rb = flyBall.GetComponent <Rigidbody2D>(); if (rb != null) { Destroy(rb); } var rotating = Rotating.set(flyBall, rbB.angularVelocity); rotating.slowdown(0.1f, 0.96f); // #V замедление вращение звёздочек f.init(tC.transform.position, 0.02f, newBall.prevVelocity[0] * 0.005f); f.subscribe(onBallArrive, tC.gameObject, newBall.gameObject); // #V эффекты на звёздочках: Flickering.set(flyBall, 0.15f); Scaling.set(flyBall, 0.5f, 0.15f); } } }
public bool checkOnWin(TicketCell newCell) // ( недоделано и не актуально ) старая проверка на выиграшь при новом шаре, проверка выполняется, но нет никаких сообщений { /*switch (main.templetesFrom) { * case TemplatesFrom.CLIENT_OLD: return checkOnWinOld(newCell); * case TemplatesFrom.CLIENT_FABRIC: return checkOnWinCF(newCell); * //case TemplatesFrom.SERVER: return checkNewBall(); * }*/ if (main.gameMode == GameMode.SERVER) { return(false); } return(checkOnWinOld(newCell)); // старая логика //print("Error! [checkOnWin] unknown TemplatesFrom:" + main.templetesFrom); //return false; }
xy getCoordsByTicketCell(TicketCell tCell) // Возвращает позиции клекти { for (int i = 0; i < MAIN.ticketCountRows; i++) { for (int j = 0; j < MAIN.ticketCountColumns; j++) { if (cells[i, j] == tCell) { return(new global::xy(i, j)); } } } print("Error! [getCoordsByTicketCell] coords cell#" + tCell.name + " not find!!!"); return(new global::xy(-1, -1)); }
public void onBornNewBall(Ball newBall) { //print("onBornNewBall:" + newBall.number + "main.ticketHolder.transform.childCount = "+ main.ticketHolder.transform.childCount); newBall.subscribeOnBallStop(onNewBallStop); Ticket[] tickets = main.ticketHolder.getTickets(); for (int i = 0; (i < main.ticketHolder.transform.childCount); i++) { if (tickets[i] == null) { Errors.showTest("Ошибка! Билетов ещё нет, а шары уже сыпятся"); } //print("bornBall:"+ newBall.number+ ", tickets:" +tickets[i]); TicketCell tC = tickets[i].getCellByNum(newBall.number); //print(newBall.number); if (tC != null) { newBall.setGreen(); return; } } } // проверка всех билетов
public bool initWithJsonStruct(JsonHandler.TicketJSON jsonTicket) // Преобразование JSON структуры, и инициализация полученных данных { Start(); if (!beforeGenerateInit()) { return(false); } int currentCell = 0; number = jsonTicket.N; if (jsonTicket.B == null) { print("Error! [] in jsonTicket:" + jsonTicket.N + " not init cells!"); return(false); } int countCells = jsonTicket.B.Length; if (countCells != totalCellsCount) { print("Error![initWithJsonStruct] rows(" + MAIN.ticketCountRows + ") and columns(" + MAIN.ticketCountColumns + ") do not coincide with count cells in json ticket(" + countCells + ")"); return(false); } for (int j = MAIN.ticketCountColumns - 1; j >= 0; j--) { for (int i = 0; i < MAIN.ticketCountRows; i++) { TicketCell newCell = Instantiate(tiledCell); newCell.transform.parent = cellsHolder.transform; newCell.transform.localPosition = new Vector3(p.x + i * indent.x, p.y + j * indent.y); newCell.numValue = takeAwayCellNumber(i, jsonTicket.B[currentCell++]); cells[i, j] = newCell; } } isInit = true; return(true); }
//=============================[ Old client check ]================================ public bool checkOnWinOld(TicketCell newCell) // (отключено и неактуально) старая логика протоипа игры, проверка на наличие простых захаркодженных шаблонов { int ii = 0; int jj = 0; bool res = false; for (int i = 0; i < MAIN.ticketCountRows; i++) { for (int j = 0; j < MAIN.ticketCountColumns; j++) { if (cells[i, j] == newCell) { ii = i; jj = j; break; } } } bool line = true; for (int i = 0; i < MAIN.ticketCountRows; i++) { if (!cells[i, jj].isMarked) { line = false; break; } } if (line) { newWinLine(); res = true; } line = true; for (int j = 0; j < MAIN.ticketCountColumns; j++) { if (!cells[ii, j].isMarked) { line = false; break; } } if (line) { newWinLine(); res = true; } line = true; if (MAIN.ticketCountColumns == MAIN.ticketCountRows && ii == jj) { for (int i = 0; i < MAIN.ticketCountColumns; i++) { if (!cells[i, i].isMarked) { line = false; } } if (line) { newWinLine(); res = true; } } line = true; if (MAIN.ticketCountColumns == MAIN.ticketCountRows && ii == (MAIN.ticketCountRows - 1) - jj) { for (int i = 0; i < MAIN.ticketCountColumns; i++) { if (!cells[i, (MAIN.ticketCountRows - 1) - i].isMarked) { line = false; break; } int a = (MAIN.ticketCountRows - 1) - i; //print("i:" + i + ", j:" + a); } if (line) { newWinLine(); res = true; } } return(res); }