コード例 #1
0
 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
 }
コード例 #2
0
ファイル: MAIN.cs プロジェクト: lunice/bgo
    // В момент покупки билетов, и перед началом розыгрыша

    /*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;
        }
    }
コード例 #3
0
    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);
    }
コード例 #4
0
 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);
 }
コード例 #5
0
    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);
    }
コード例 #6
0
    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);
    }
コード例 #7
0
    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));
            }
        }
    }
コード例 #8
0
    /// 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);
    }
コード例 #9
0
    /// <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);
    }
コード例 #10
0
    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);
        }
    }
コード例 #11
0
    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();
    }
コード例 #12
0
 public Ball(GameObject ball, BallEvent ballEvent)
 {
     _ball      = ball;
     _ballEvent = ballEvent;
 }