public AISystem_ReboundStorm(GameMatch match, Player player, AIState.Type initialState = AIState.Type.eInit, uint AIID = 0u) : base(match, player, initialState, AIID) { }
public AISystem_PractiseLayupDunk(GameMatch match, Player player, AIState.Type initialState = AIState.Type.eInit) : base(match, player, initialState) { }
public static void PositionAndShoot(AIState.Type positionState, AIState.Type shootState, GameMatch match, Player player) { PlayGround ground = match.mCurScene.mGround; Area currArea = ground.GetArea(player); bool outside = false; if (currArea == Area.eFar) { outside = !ground.In3PointRange(player.position.xz, ground.mDist3PtOutside); } Area bestArea = GetBestShootArea(player); if (currArea == bestArea && !outside) { player.m_aiMgr.SetTransaction(shootState); } else { IM.Vector2 v3PtCenter = new IM.Vector2(ground.mCenter.x + ground.m3PointCenter.x, ground.mCenter.z + ground.m3PointCenter.y); IM.Vector2 playerPos = player.position.xz; IM.Vector2 basketPos = match.mCurScene.mBasket.m_vShootTarget.xz; IM.Number fDistanceToNet = IM.Vector2.Distance(playerPos, basketPos); IM.Number fDistTo3PtCenter = IM.Vector2.Distance(playerPos, v3PtCenter); IM.Vector2 dirOut = (playerPos - v3PtCenter).normalized; IM.Number angle = IM.Vector2.Angle(dirOut, -IM.Vector2.up); IM.Number dist = IM.Number.zero; IM.Vector2 dir = IM.Vector2.up; if (bestArea == Area.eNear) { dist = fDistanceToNet - match.mCurScene.mGround.mFreeThrowLane; dir = (basketPos - playerPos).normalized; } else if (bestArea == Area.eMiddle) { if (currArea == Area.eNear) { dist = match.mCurScene.mGround.mFreeThrowLane - dist; dir = (playerPos - basketPos).normalized; } else { if (angle > ground.m3PointMaxAngle) { dist = IM.Math.Abs(playerPos.x) - ground.m3PointBaseLine; dir = playerPos.x > IM.Number.zero ? -IM.Vector2.right : IM.Vector2.right; } else { dist = fDistTo3PtCenter - ground.m3PointRadius; dir = -dirOut; } } } else if (bestArea == Area.eFar) { if (outside) { if (angle > ground.m3PointMaxAngle) { dist = IM.Math.Abs(playerPos.x) - (ground.m3PointBaseLine + ground.mDist3PtOutside); dir = playerPos.x > IM.Number.zero ? -IM.Vector2.right : IM.Vector2.right; } else { dist = fDistTo3PtCenter - (ground.m3PointRadius + ground.mDist3PtOutside); dir = -dirOut; } } else { if (angle > ground.m3PointMaxAngle) { dist = ground.m3PointBaseLine - IM.Math.Abs(playerPos.x); dir = playerPos.x > IM.Number.zero ? IM.Vector2.right : -IM.Vector2.right; } else { dist = ground.m3PointRadius - fDistTo3PtCenter; dir = dirOut; } } } if (dist < match.gameMode.repositionDist) { AIState state = player.m_aiMgr.GetState(positionState); state.m_moveTarget = player.position + new IM.Vector3(dir.x, IM.Number.zero, dir.y) * dist; player.m_aiMgr.SetTransaction(state); } else { player.m_aiMgr.SetTransaction(shootState); } } }
public AISystem_PVP(GameMatch match, Player player, AIState.Type initialState = AIState.Type.eInit) : base(match, player, initialState) { }
public AISystem_MassBall(GameMatch match, Player player, AIState.Type initialState = AIState.Type.eInit, uint AIID = 0u) : base(match, player, initialState, AIID) { }
public AISystem_Basic(GameMatch match, Player player, AIState.Type initialState = AIState.Type.eInit, uint AIID = 0u) : base(match, player, initialState, AIID) { m_enableColliding = true; m_player.m_StateMachine.onStateChanged += OnPlayerStateChanged; }
public void Enable(AIState.Type state) { stateInit.nextState = state; m_player.m_aiAssist = this; m_enable = true; }