void OnEnable() { instance = this; if (Selection.activeGameObject == null) { return; } mBall = Selection.activeGameObject.GetComponent <UBasketball>(); if (mBall == null) { EditorUtility.DisplayDialog("ShootSolutionEditor", "请选择篮球", "ok"); } GameObject goBasket = GameObject.FindGameObjectWithTag("basketStand"); if (goBasket == null) { EditorUtility.DisplayDialog("ShootSolutionEditor", "请先创建篮板", "ok"); } mBasket = goBasket.GetComponent <UBasket>(); mDistanceCount = GameSystem.Instance.shootSolutionManager.m_DistanceList.Count; mAngleCount = GameSystem.Instance.shootSolutionManager.m_AngleList.Count; }
private void OnGoal(UBasket basket, UBasketball ball) { if (step == Step.Play && jumpedInRightArea) { Step_Praise(); } }
public bool InFreeThrowLane(IM.Vector2 pos) { UBasket basket = mScene.mBasket; IM.Number fDistanceToNet = IM.Vector2.Distance(pos, basket.m_vShootTarget.xz); return(fDistanceToNet < mFreeThrowLane); }
void Awake() { m_Shake = GetComponent <UCamShakeMgr>(); m_Zoom = GetComponent <UCamZoomMgr>(); m_curMatch = GameSystem.Instance.mClient.mCurMatch; m_playGround = m_curMatch.mCurScene.mGround; m_basket = m_curMatch.mCurScene.mBasket; }
static int Build(IntPtr L) { LuaScriptMgr.CheckArgsCount(L, 2); UBasket obj = (UBasket)LuaScriptMgr.GetUnityObjectSelf(L, 1, "UBasket"); IM.Vector3 arg0 = (IM.Vector3)LuaScriptMgr.GetNetObject(L, 2, typeof(IM.Vector3)); obj.Build(arg0); return(0); }
static int OnRimCollision(IntPtr L) { LuaScriptMgr.CheckArgsCount(L, 2); UBasket obj = (UBasket)LuaScriptMgr.GetUnityObjectSelf(L, 1, "UBasket"); UBasketball arg0 = (UBasketball)LuaScriptMgr.GetUnityObject(L, 2, typeof(UBasketball)); obj.OnRimCollision(arg0); return(0); }
public PlayerState(PlayerStateMachine owner, GameMatch match) { m_stateMachine = owner; m_player = m_stateMachine.m_owner; m_match = match; m_basket = match.mCurScene.mBasket; m_curExecSkill = null; }
static int SetEffect(IntPtr L) { LuaScriptMgr.CheckArgsCount(L, 3); UBasket obj = (UBasket)LuaScriptMgr.GetUnityObjectSelf(L, 1, "UBasket"); BasketState arg0 = (BasketState)LuaScriptMgr.GetNetObject(L, 2, typeof(BasketState)); Object arg1 = (Object)LuaScriptMgr.GetUnityObject(L, 3, typeof(Object)); obj.SetEffect(arg0, arg1); return(0); }
static int OnDunk(IntPtr L) { LuaScriptMgr.CheckArgsCount(L, 3); UBasket obj = (UBasket)LuaScriptMgr.GetUnityObjectSelf(L, 1, "UBasket"); UBasketball arg0 = (UBasketball)LuaScriptMgr.GetUnityObject(L, 2, typeof(UBasketball)); bool arg1 = LuaScriptMgr.GetBoolean(L, 3); obj.OnDunk(arg0, arg1); return(0); }
public override ShootSolution GetShootSolution(UBasket basket, Area area, Player shooter, IM.PrecNumber rate) { if (in_tutorial) { return(GameSystem.Instance.shootSolutionManager.GetShootSolution(25, false, 1)); } else { return(null); } }
public override ShootSolution GetShootSolution(UBasket basket, Area area, Player shooter, IM.PrecNumber rate) { if (curStep.mustGoal || curStep.cantGoal) { if (curStep.shootSolution.Key != 0 || curStep.shootSolution.Value != 0) { return(GameSystem.Instance.shootSolutionManager.GetShootSolution(curStep.shootSolution.Key, curStep.mustGoal, curStep.shootSolution.Value)); } } return(null); }
public override ShootSolution GetShootSolution(UBasket basket, Area area, Player shooter, IM.PrecNumber rate, ShootSolution.Type type) { ShootSolution solution = practise_behaviour.GetShootSolution(basket, area, shooter, rate); if (solution == null) { solution = base.GetShootSolution(basket, area, shooter, rate, type); } Debug.Log("Practise shoot solution: " + solution.m_id); return(solution); }
public AIState(AISystem owner) { m_system = owner; m_player = owner.m_player; m_match = owner.m_curMatch; m_basket = m_match.mCurScene.mBasket; m_timerTick = new GameUtils.Timer(m_system.AI.delay, OnTick); if (m_player == null) { Debug.LogError("AIState: player can not be null."); } }
private bool IsKnock(IM.Vector3 pre, IM.Vector3 now) { UBasket basket = GameSystem.Instance.mClient.mCurMatch.mCurScene.mBasket; IM.Number radius = GameSystem.Instance.mClient.mCurMatch.mCurScene.mBall.m_ballRadius; IM.Number d1 = basket.m_rim.radius - (IM.Vector3.Distance(pre, basket.m_rim.center)) - radius; IM.Number d2 = basket.m_rim.radius - (IM.Vector3.Distance(now, basket.m_rim.center)) - radius; if (d1 >= 0 && d2 < 0) { return(true); } return(false); }
private void OnGoal(UBasket basket, UBasketball ball) { //TODO 针对PVP修改 int score = (ball.m_special ? 2 : 1); if (ball.m_actor == mainRole) { m_homeScore += score; //Debug.Log("Main role score: " + m_homeScore); } else if (ball.m_actor == npc) { m_awayScore += score; //Debug.Log("NPC score: " + m_awayScore); } //碰地删除 ball.onHitGround += (UBasketball b) => { mCurScene.DestroyBall(b); }; ball.m_pickable = false; }
static int set_onDunk(IntPtr L) { object o = LuaScriptMgr.GetLuaObject(L, 1); UBasket obj = (UBasket)o; if (obj == null) { LuaTypes types = LuaDLL.lua_type(L, 1); if (types == LuaTypes.LUA_TTABLE) { LuaDLL.luaL_error(L, "unknown member name onDunk"); } else { LuaDLL.luaL_error(L, "attempt to index onDunk on a nil value"); } } LuaTypes funcType = LuaDLL.lua_type(L, 3); if (funcType != LuaTypes.LUA_TFUNCTION) { obj.onDunk = (UBasket.BasketEventDunkDelegate)LuaScriptMgr.GetNetObject(L, 3, typeof(UBasket.BasketEventDunkDelegate)); } else { LuaFunction func = LuaScriptMgr.ToLuaFunction(L, 3); obj.onDunk = (param0, param1, param2) => { int top = func.BeginPCall(); LuaScriptMgr.Push(L, param0); LuaScriptMgr.Push(L, param1); LuaScriptMgr.Push(L, param2); func.PCall(top, 3); func.EndPCall(top); }; } return(0); }
static int get_m_vShootTarget(IntPtr L) { object o = LuaScriptMgr.GetLuaObject(L, 1); UBasket obj = (UBasket)o; if (obj == null) { LuaTypes types = LuaDLL.lua_type(L, 1); if (types == LuaTypes.LUA_TTABLE) { LuaDLL.luaL_error(L, "unknown member name m_vShootTarget"); } else { LuaDLL.luaL_error(L, "attempt to index m_vShootTarget on a nil value"); } } LuaScriptMgr.PushValue(L, obj.m_vShootTarget); return(1); }
static int get_onNoGoal(IntPtr L) { object o = LuaScriptMgr.GetLuaObject(L, 1); UBasket obj = (UBasket)o; if (obj == null) { LuaTypes types = LuaDLL.lua_type(L, 1); if (types == LuaTypes.LUA_TTABLE) { LuaDLL.luaL_error(L, "unknown member name onNoGoal"); } else { LuaDLL.luaL_error(L, "attempt to index onNoGoal on a nil value"); } } LuaScriptMgr.Push(L, obj.onNoGoal); return(1); }
public bool GetPosition(IM.Number time, out IM.Vector3 res) { int index = 1; if (count % 2 == 0) { index = 1; } else { index = -1; } UBasket basket = GameSystem.Instance.mClient.mCurMatch.mCurScene.mBasket; IM.Number radius = GameSystem.Instance.mClient.mCurMatch.mCurScene.mBall.m_ballRadius; res.y = new IM.Number(3, 100); res.x = x0.x + 2 * dir.x * time * index; res.z = x0.z + 2 * dir.z * time * index; if (count < 4) { if (IsKnock(preVec, res)) { ++count; x0 = preVec; } else { preVec = res; } return(true); } return(false); }
void OnEnable() { m_ball = (UBasketball)target; GameObject goBasket = GameObject.FindGameObjectWithTag("basketStand"); if (goBasket == null) { return; } m_basket = goBasket.GetComponent <UBasket>(); if (m_basket == null) { m_basket = goBasket.AddComponent <UBasket>(); } m_basket.Build(new IM.Vector3(IM.Number.zero, IM.Number.zero, new IM.Number(12, 8))); m_ball.m_ballRadius = new IM.Number(0, 125); m_simulatingShootSolution = new ShootSolution(0); GameSystem.Instance.shootSolutionManager = new ShootSolutionManager(); instance = this; }
public EDirection GetMoveDirection(InputDirType type) { if (!m_enable) { return(EDirection.eNone); } if (m_worldMoveDir == IM.Vector3.zero) { return(EDirection.eNone); } IM.Vector3 vHForward = IM.Vector3.zero; if (type == InputDirType.ePlayer) { vHForward = m_player.forward; } else if (type == InputDirType.eJoyStick) { vHForward = IM.Vector3.forward; } else if (type == InputDirType.eBasket) { UBasket basket = m_match.mCurScene.mBasket; if (basket == null) { vHForward = IM.Vector3.forward; } else { IM.Vector3 dirToBasket = basket.m_vShootTarget - m_player.position; dirToBasket.y = IM.Number.zero; vHForward = dirToBasket.normalized; } } vHForward.y = IM.Number.zero; IM.Vector3 dir = m_worldMoveDir; if (IM.Vector3.Angle(vHForward, dir) > new IM.Number(135)) { return(EDirection.eBack); } else if (IM.Vector3.Angle(vHForward, dir) < new IM.Number(45)) { return(EDirection.eForward); } IM.Number fCW = IM.Vector3.Cross(vHForward, dir).y; if (IM.Math.Abs(fCW) < new IM.Number(0, 001)) { return(EDirection.eNone); } if (fCW < IM.Number.zero) { return(EDirection.eLeft); } else if (fCW > IM.Number.zero) { return(EDirection.eRight); } return(EDirection.eNone); }
private void OnNoGoal(UBasket basket, UBasketball ball) { OnShootOver(ball, false); }
private void OnGoal(UBasket basket, UBasketball ball) { OnShootOver(ball, true); }
private void OnGoal(UBasket basket, UBasketball ball) { OnGoal(ball); }
void _UpdateValidCommand(GameMatch match) { validCmdList.Clear(); if (player == null) { return; } bool bOffense = (player.m_team.m_role == GameMatch.MatchRole.eOffense); UBasketball ball = match.mCurScene.mBall; UBasket basket = match.mCurScene.mBasket; bool hasTeamMate = player.m_team.GetMemberCount() > 1; if (bOffense) { if (player.m_bWithBall) { if (hasTeamMate && match.IsCommandValid(Command.Pass)) { validCmdList.Add(Command.Pass); } if (match.IsCommandValid(Command.Shoot)) { validCmdList.Add(Command.Shoot); } if (player.m_position == PositionType.PT_C || player.m_position == PositionType.PT_PF) { if (match.IsCommandValid(Command.BackToBack)) { validCmdList.Add(Command.BackToBack); } } else { if (match.IsCommandValid(Command.CrossOver)) { validCmdList.Add(Command.CrossOver); } } } else { if (ball != null) { if (ball.m_owner != null || ball.m_ballState == BallState.eUseBall_Pass) { if (match.IsCommandValid(Command.RequireBall)) { validCmdList.Add(Command.RequireBall); } } if (ball.m_owner != null && ball.m_ballState != BallState.eUseBall_Pass) { if (match.IsCommandValid(Command.PickAndRoll)) { validCmdList.Add(Command.PickAndRoll); } } } if (match.IsCommandValid(Command.CutIn)) { validCmdList.Add(Command.CutIn); } } if (ball == null || (ball.m_ballState != BallState.eLoseBall && ball.m_ballState != BallState.eRebound)) { if (match.IsCommandValid(Command.Rush)) { validCmdList.Add(Command.Rush); } } } //defense else { if (ball != null) { if (ball.m_ballState == BallState.eUseBall || ball.m_ballState == BallState.eUseBall_Pass || ball.m_ballState == BallState.eUseBall_Shoot) { if (match.IsCommandValid(Command.Rush) && match.GetMatchType() == GameMatch.Type.ePVP_3On3) { validCmdList.Add(Command.Rush); } if (match.IsCommandValid(Command.Defense)) { validCmdList.Add(Command.Defense); } } if (ball != null && ball.m_owner != null && match.IsCommandValid(Command.Steal) || (ball.m_ballState == BallState.eUseBall_Pass)) { validCmdList.Add(Command.Steal); } if (ball != null && (ball.m_ballState == BallState.eUseBall || ball.m_ballState == BallState.eUseBall_Shoot)) { if (match.IsCommandValid(Command.Block)) { validCmdList.Add(Command.Block); } } } if (hasTeamMate && match.IsCommandValid(Command.Switch)) { validCmdList.Add(Command.Switch); } } if (ball != null && ball.m_ballState == BallState.eLoseBall) { if (match.GetMatchType() == GameMatch.Type.ePVP_3On3) { if (match.IsCommandValid(Command.Rush)) { validCmdList.Add(Command.Rush); } } else { if (match.IsCommandValid(Command.TraceBall)) { validCmdList.Add(Command.TraceBall); } } if (hasTeamMate && match.IsCommandValid(Command.Switch)) { validCmdList.Add(Command.Switch); } if (player.m_position == PositionType.PT_SG || player.m_position == PositionType.PT_PG) { if (match.IsCommandValid(Command.BodyThrowCatch)) { validCmdList.Add(Command.BodyThrowCatch); } } } if (ball != null && (ball.m_ballState == BallState.eLoseBall || ball.m_ballState == BallState.eRebound || ball.m_ballState == BallState.eNone)) { if (hasTeamMate && match.IsCommandValid(Command.Switch)) { validCmdList.Add(Command.Switch); } } MatchState curMatchState = match.m_stateMachine.m_curState; if (!player.m_bWithBall && (ball != null && ball.m_ballState == BallState.eRebound || (curMatchState != null && curMatchState.m_eState == MatchState.State.eTipOff))) { if (match.IsCommandValid(Command.Rebound)) { validCmdList.Add(Command.Rebound); } //float fDist = GameUtils.HorizonalDistance(player.position, basket.m_vShootTarget).ToUnity(); //if( fDist < 3.0f ) // m_validCmdList.Add(Command.JockeyForPosition); } if (match.m_uiController != null) { match.m_uiController.UpdateBtnCmd(); } }
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); } }
protected override void OnRimCollision(UBasket basket, UBasketball ball) { m_count24Time = gameMatchTime; m_count24TimeStop = false; m_b24TimeUp = false; }
private void OnGoal(UBasket basket, UBasketball ball) { match.m_homeScore += 2; }
public virtual ShootSolution GetShootSolution(UBasket basket, Area area, Player shooter, IM.PrecNumber rate) { return(null); }
void OnGoal(UBasket basket, UBasketball ball) { m_homeScore += GetScore(ball.m_pt); }