public static int BM_get_ball_out(int nr) { for (int i = 0; i < _EventList.Count; i++) { BallEvent be = (BallEvent)_EventList[i]; if (be._event == EventType0.BALL_OUT && be.ballnr == nr) { return(be.ballnr2); //-1: Ok. 0~5: wrong pocket } } return(-2); //no out }
// В момент покупки билетов, и перед началом розыгрыша /*public void onBuyTickets() { * var raffleScene = GameObject.Find("RaffleScene"); * var buyTickets = GameObject.Find("BuyTickets"); * buyTickets.SetActive(false); * raffleScene.SetActive(true); * }*/ // При нажатиях различных кнопок BaseController или унаследованных от них. public void onButtonClick(BaseController btn, BaseController.TypeEvent type) { if (type != BaseController.TypeEvent.ON_MOUSE_CLICK) { return; } string name = btn.name; //Debug.Log(name); switch (name) { //case "BuyTicket": { onBuyTicket(); } break; //case "BuyTickets":{ onBuyTickets(); } break; case "moneyBtn": WindowController.showPopUpWindow(WindowController.TypePopUpWindow.GOLD_EXCHANGE, true); break; case "rubinsBtn": WindowController.showPopUpWindow(WindowController.TypePopUpWindow.CRYSTALS_BUY, true); break; case "settingsBtn": WindowController.showPopUpWindow(WindowController.TypePopUpWindow.SETTINGS, true); break; case "expBtn": /* ---------[ TODO exp ]---------- */ break; case "backBtn": ScenesController.onBackBtn(); break; case "buyBallBtn": { if (gameMode == GameMode.SERVER) { if (handlerServerData.isAvailableNextBall) { if (money.getValue() >= handlerServerData.costNextBall) { BallEvent.getBall(); HUD.setEnableBackButton(false); HUD.hideBuyBallBtn(); } else { HUD.playAnimNeedMoreMoney(); } } //addToMyMoney(-costNextBall.getValue()); } else { receivingTray.buyBall(); } } break; case "Exit": { ScenesController.showWindowExit(); } break; } }
public static int BM_get_min_ball_out() { int minnr = 100; for (int i = 0; i < _EventList.Count; i++) { BallEvent be = (BallEvent)_EventList[i]; if (be._event == EventType0.BALL_OUT && be.ballnr < minnr) { minnr = be.ballnr; } } return(minnr); }
public static int GetOutPocket(int n) { for (int i = 0; i < _EventList.Count && n != 0; i++) { BallEvent be = (BallEvent)_EventList[i]; if (be._event == EventType0.BALL_OUT) { n--; if (n == 0) { return(be.ballnr2); } } } return(-2); }
public static int BM_get_balls_hit() { int i, hits = 0; for (i = 0; i < _EventList.Count; i++) { BallEvent be = (BallEvent)_EventList[i]; if (be._event == EventType0.BALL_BALL) { if (be.ballnr == 0 || be.ballnr2 == 0) { hits++; } } } return(hits); }
public static int BM_get_nth_ball_out(int n) { int i, ballout = -1; for (i = 0; i < _EventList.Count && n != 0; i++) { BallEvent be = (BallEvent)_EventList[i]; if (be._event == EventType0.BALL_OUT) { n--; if (n == 0) { ballout = be.ballnr; } } } return(ballout); }
public static void UpLoadBallStatus() { int id, pos; for (int i = 0; i < _EventList.Count; i++) { BallEvent be = (BallEvent)_EventList[i]; if (be._event == EventType0.BALL_OUT && be.ballnr != 0) { if (be.ballnr != 8) // top ball { GamePlayUI.instance.SetBallOut(be.ballnr); } //Tournament Ball if (!GlobalInfo.IsTournament()) { continue; } if (Tournament.IsMatch && Tournament.pos > Tournament.opponentPos) { continue; } if (Player.IsPlayer()) { Tournament.ballNum++; id = Tournament.ballNum; pos = Tournament.pos; } else { Tournament.opponentBallNum++; id = Tournament.opponentBallNum; pos = Tournament.opponentPos; } Net.instance.SendMsg(new Game.SetTournamentBall(pos, id, be.ballnr)); } } }
/// Get the index of first ball hit event public static int BM_get_1st_ball_hit() { int hitball = -1; for (int i = 0; i < _EventList.Count; i++) { BallEvent be = (BallEvent)_EventList[i]; if (be._event == EventType0.BALL_BALL) { if (be.ballnr != 0) { hitball = be.ballnr; } else { hitball = be.ballnr2; } break; } } return(hitball); }
/// <summary> /// Record all the ball event. /// </summary> /// <param name="_event">the type of event</param> /// <param name="nr">number of first ball</param> /// <param name="nr2">number of second ball</param> /// <param name="frame">Frame</param> /// <param name="timeoffs">Timeoffset</param> public static void record_move_log_event(EventType0 _event, int nr, int nr2, Frame frame, float timeoffs) { BallEvent be = new BallEvent(); be._event = _event; be.ballnr = nr; be.ballnr2 = nr2; Ball ball1 = BM_get_ball_by_nr(nr, frame); Ball ball2 = BM_get_ball_by_nr(nr2, frame); if (_event == EventType0.BALL_BALL) { be.pos = ball1.r; be.pos2 = ball2.r; be.v = ball1.v; be.v2 = ball2.v; be.w = ball1.w; be.w2 = ball2.w; } else if (_event == EventType0.BALL_WALL) { be.pos2 = ball2.r; be.v2 = ball2.v; be.w2 = ball2.w; } else if (_event == EventType0.BALL_OUT) { be.pos = ball1.r; } be.timestep_nr = timestep_nr; be.timeoffs = timeoffs; _EventList.Add(be); }
public bool GetEvent(out BallEvent eventId, out Vector3 vecDeltaV, UBasketball ball, UBasket basket, IM.Number fTimeStart, IM.Number fTimeEnd, int iIter) { eventId = BallEvent.eNone; vecDeltaV = new Vector3(); if (fTimeStart > m_fTime) { Debug.LogError("ball shoot solution start time > current time."); return(false); } if (m_bSuccess && //&& (iCurveEvent == m_ShootCurveList.Count - 1)) fTimeEnd > m_fTime) { eventId = BallEvent.eGoal; return(true); } IM.Number fTime = IM.Number.zero, fTimePrev = -new IM.Number(0, 001); SShootCurve pCurve; int iCurve, iCurveStart, iCurveEvent, iCurveEnd; iCurve = 0; iCurveStart = iCurveEvent = iCurveEnd = m_ShootCurveList.Count; foreach (SShootCurve curve in m_ShootCurveList) { pCurve = curve; fTime += pCurve.fTime; if (fTime >= fTimeStart && fTimePrev <= fTimeStart) { iCurveStart = iCurve; } if (fTime > fTimeEnd && fTimePrev <= fTimeEnd) { iCurveEnd = iCurve; break; } iCurve++; fTimePrev = fTime; } if (iIter < iCurveEnd - iCurveStart) { iCurveEvent = iCurveStart + iIter; pCurve = m_ShootCurveList[iCurveEvent]; IM.Vector3 vecInitVel = new IM.Vector3(); IM.Vector3 vecFinVel = new IM.Vector3(); IM.Vector3 vecPos = new IM.Vector3(); vecPos.x = pCurve.fX_a * pCurve.fTime * pCurve.fTime + pCurve.fX_b * pCurve.fTime + pCurve.fX_c; vecPos.y = pCurve.fY_a * pCurve.fTime * pCurve.fTime + pCurve.fY_b * pCurve.fTime + pCurve.fY_c; vecPos.z = pCurve.fZ_a * pCurve.fTime * pCurve.fTime + pCurve.fZ_b * pCurve.fTime + pCurve.fZ_c; vecInitVel.x = IM.Number.two * pCurve.fX_a * pCurve.fTime + pCurve.fX_b; vecInitVel.y = IM.Number.two * pCurve.fY_a * pCurve.fTime + pCurve.fY_b; vecInitVel.z = IM.Number.two * pCurve.fZ_a * pCurve.fTime + pCurve.fZ_b; if (iCurveEvent + 1 >= m_ShootCurveList.Count) { vecFinVel = m_vFinVel; } else { SShootCurve pCurveNext = m_ShootCurveList[iCurveEvent + 1]; vecFinVel.x = pCurveNext.fX_b; vecFinVel.y = pCurveNext.fY_b; vecFinVel.z = pCurveNext.fZ_b; } vecDeltaV = (Vector3)(vecFinVel - vecInitVel); if (IM.Math.Abs(vecPos.z - (basket.m_backboard.center.z - ball.m_ballRadius)) < new IM.Number(0, 020)) { eventId = BallEvent.eCollBoard; } else { eventId = BallEvent.eCollRim; } return(true); } else { return(false); } }
public static void DrawAimLines(Frame frame, Vector3 orient, float force, float X, float Y, bool is_masse) { // X=0.99f; Frame original_frame = new Frame(frame); BallEvents.ClearAllEvents(); Line1.Clear(); Line2.Clear(); CircleLine.Clear(); frame = GetFrameByShot(frame, orient, force, X, Y, is_masse); frame.is_playing = true; int j = 1000; ArrayList _EventList = BallEvents.GetEventList(); Vector3 delta_vec = new Vector3(0, 10.0f, 0.0f); Line1.Add(frame.Balls[0].r + delta_vec); int i = 0; for (i = 0; frame.is_playing && j > 0; i++, j--) { if (_EventList.Count > 0 && j > 1) { j = 1; if (frame.Balls[0].in_game == false || frame.Balls[0].r.y < -frame.Balls[0].d) { is_wall = true; break; } BallEvent be = (BallEvent)_EventList[0]; Line1.Add(be.pos2 + delta_vec); if (be._event != EventType0.BALL_WALL) { is_wall = false; int hit_ball = BallEvents.BM_get_1st_ball_hit(); Line2.Add(original_frame.Balls[hit_ball].r + delta_vec); Line2.Add(be.v + original_frame.Balls[hit_ball].r + delta_vec); collision_pos = be.pos2 + delta_vec; DrawCircle(collision_pos, Constant.BALL_D / 2.0f, 16); } else { collision_pos = be.pos2 + delta_vec; DrawCircle(collision_pos, Constant.BALL_D / 2.0f, 16); if (Player.show_wallline) { Line1.Add(frame.Balls[0].r + delta_vec); } is_wall = true; break; } } if (i > 0) { Line1.Add(frame.Balls[0].r + delta_vec); } else { Line1.Add(frame.Balls[0].r + delta_vec); } frame = frame.GetNextFrame(); if (frame.is_playing == false && is_masse == true) { Vector3 lastSpeed = Vector3.zero; i = Line1.Count - 1; lastSpeed = (Vector3)Line1[i] - (Vector3)Line1[i - 1]; frame.Balls[0].v = Maths.vec_unit(lastSpeed) * 100.0f; frame.is_playing = true; is_masse = false; // Debug.Log("is_masse=fales"); } } // if(i==1) // MonoBehaviour.print ("error"); DrawLines(); }
public Ball(GameObject ball, BallEvent ballEvent) { _ball = ball; _ballEvent = ballEvent; }