📄 player.java
字号:
int GetDistBasket()
{
return m_iManhattanShotDist;
}
void SetTargetForPass(Player pPlayer)
{
m_pTarget = pPlayer;
pPlayer.SetPassTarget(true, this);
}
void SetTippoffPos()
{
m_fPos[0]= TIPOFF_POS[m_iPlayerType][0]<< 10;
m_fPos[1]= m_iOffenseDir * TIPOFF_POS[m_iPlayerType][1]<< 10;
m_fNextPos[0]= m_fPos[0];
m_fNextPos[1]= m_fPos[1];
m_fTargetPos[0]= m_fPos[0];
m_fTargetPos[1]= m_fPos[1];
}
void SetPosition(int x, int y, int z)
{
m_fPos[0]= x;
m_fPos[1]= y;
m_fPos[2]= z;
}
void SetDir(int iDir, boolean bImmediate)
{
if(m_bUser == true || bImmediate == true)
{
m_iDir = iDir;
m_iMoveDir = iDir;
m_iDirCount = 8;
m_bDirLock = false;
}
else
{
m_iMoveDir = iDir;
if(m_bDirLock == false)
{
m_iDirCount = 8;
m_iDir = iDir;
}
}
}
void SetOffenseDir(int iOffenseDir)
{
m_iOffenseDir = iOffenseDir;
}
void SetAnimState(int iState)
{
m_iAnimState = iState;
}
RenderObj GetObj()
{
return m_pPlayerObj;
}
int GetOffenseModifier()
{
return m_iDribPassRating;
}
int GetDefModifier()
{
return(m_iDribPassRating + m_iBlockRating)/ 2;
}
private static final String STARNAMES[]=
{
"Yao",
"Shaq",
"Kobe",
"Le Bron",
"Rasheed",
};
String GetFamousName()
{
for(int i = 0; i < 5; i++)
{
if(STARNAMES[i]== m_pFirstName)
return m_pFirstName;
}
return m_pLastName;
}
void PreUpdate(int iDeltaT)
{
CalcManhattanShotDistAI();
m_iAssistCounter =(m_bHasBall && m_iAssistCounter > 0)? m_iAssistCounter - 1 : 0;
if(m_bUser == false || ChkUserLockPlay()== true)
{
updateAI();
}
else
{
updateUser();
}
if(m_bPassTarget == true)
{
m_iAnimState = 0;
}
if(m_iAnimState == 1 || m_iAnimState == 14)
{
CalcVelocityAI(m_iMoveDir, m_fVel);
}
else if(m_iAnimState != 9 && m_iAnimState != 10 && m_iAnimState != 7)
{
ReduceVelocityXY();
}
PreMovePlayer(iDeltaT);
}
void PostUpdate()
{
PostMovePlayer();
UpdateAnimation();
if(m_iAnimState == 1 || m_iAnimState == 0)
{
if(m_bHasBall)
m_iAnimState = 3;
else
m_iAnimState = 0;
}
}
void UpdateAnimation()
{
int iAnimState = m_iAnimState;
final int pAnim[]= PLAYER_ANIM[iAnimState];
int iNumFrames = pAnim[0];
int iNumDirs = pAnim[1];
int iOffFrames = pAnim[2];
int iAnimDir = m_iDir /(8 / iNumDirs);
if(m_iAnimState == 1)
{
if(m_iDir == 0)
iAnimDir = 1;
else if(m_iDir == 4)
iAnimDir = 0;
}
if(m_iAnimState == 14)
{
iAnimDir = m_iJukeDir /(8 / iNumDirs);
m_iJukeDir =(m_iJukeDir + 1)% 8;
if(m_iJukeDir == m_iDir)
{
m_iAnimState = 0;
m_bAnimLock = false;
}
}
UpdateSpecialIcon();
if(m_iAnimNum >= iNumFrames)
{
m_iAnimNum = 0;
}
FrameTrigger(m_iAnimNum);
m_iFrame = pAnim[2 + 1 + m_iAnimNum]+(iOffFrames * iAnimDir);
m_iBallHandleX = PLAYER_FRAMES[m_iFrame][6];
m_iBallHandleY = PLAYER_FRAMES[m_iFrame][7];
m_pPlayerObj.SetFrame(PLAYER_FRAMES[m_iFrame][0], PLAYER_FRAMES[m_iFrame][1], PLAYER_FRAMES[m_iFrame][2], PLAYER_FRAMES[m_iFrame][3], PLAYER_FRAMES[m_iFrame][4], PLAYER_FRAMES[m_iFrame][5], m_iDir);
m_pPlayerObj.Transform(m_fPos[0], m_fPos[1], m_fPos[2]);
if(m_iAnimState == 12)
{
if(m_bQueShot)
{
m_bQueShot = false;
AttemptShot();
}
}
if(m_iAnimNum < iNumFrames - 1)
{
m_iAnimNum++;
}
else
{
if(m_bAnimLock)
m_iAnimState = 0;
if(m_iAnimState == 12)
m_iAnimState = 0;
m_bAnimLock = false;
m_iAnimNum = 0;
m_bDirLock = false;
}
if(m_iDirCount <= 0)
{
m_bDirLock = false;
m_iDir = m_iMoveDir;
}
}
void UpdateSpecialIcon()
{
if(m_bUser == true)
{
if(m_bHasBall)
m_pPlayerObj.SetIcon(5);
else
m_pPlayerObj.SetIcon(0);
}
else if(m_bCallForPass == true)
{
m_pPlayerObj.SetIcon(3);
}
else
{
m_pPlayerObj.SetIcon(- 99);
}
}
void ReduceVelocityXY()
{
m_fVel[0]= 0;
m_fVel[1]= 0;
}
void PreMovePlayer(int iDeltaT)
{
if(m_bSlowDown == true)
{
for(int i = 0; i < 2; i++)
{
m_fNextPos[i]= m_fPos[i]+(((m_fVel[i]* iDeltaT)/ 2)>> 10);
}
m_iSlowDownTimer -= iDeltaT;
if(m_iSlowDownTimer <= 0)
{
m_iSlowDownTimer = 0;
m_bSlowDown = false;
}
}
else
{
for(int i = 0; i < 2; i++)
{
m_fNextPos[i]= m_fPos[i]+((m_fVel[i]* iDeltaT)>> 10);
}
}
if(m_iAnimState != 13)
{
m_fNextPos[2]= m_fPos[2]+((m_fVel[2]* iDeltaT)>> 10);
int iGravity =(m_iAnimState == 9)? 11000 : 11000;
if(m_fPos[2]> 0)
{
if(m_iAnimState == 1)
{
m_iAnimState = 13;
m_iAnimNum = 0;
m_fNextPos[0]= m_fPos[0];
m_fNextPos[1]= m_fPos[1];
}
m_fVel[2]-=((iGravity * 8)* iDeltaT)>> 10;
}
}
else
{
}
}
void PostMovePlayer()
{
for(int i = 0; i < 3; i++)
{
m_fPos[i]= m_fNextPos[i];
}
ChkCourtBounds();
}
void FrameTrigger(int iFrame)
{
switch(m_iAnimState)
{
case 2 :
if(iFrame == 4)
EndShot();
break;
case 7 :
if(iFrame == 6)
EndLayup();
break;
case 8 :
if(iFrame == 4)
EndPass();
break;
case 10 :
case 9 :
if(iFrame == 9)
EndDunk();
break;
case 16 :
if(iFrame == 4)
EndAllyOOP();
break;
case 1 :
default :
break;
}
}
void updateUser()
{
if(m_bTeamHasBall == true)
return;
Player pBallHandler = Basketball.hGameWnd.GetControlPlayer();
if(pBallHandler != null)
{
int iGuardState = pBallHandler.GetAnimState();
if(iGuardState != 2 && 5 != 7)
{
if(pBallHandler.GetDistBasket()> m_iManhattanShotDist)
{
int fGuardX = pBallHandler.GetPosX();
int fGuardY = pBallHandler.GetPosY();
int iDistX = Basketball.ABS((fGuardX - m_fPos[0])>> 10);
int iDistY = Basketball.ABS((fGuardY - m_fPos[1])>> 10);
int iDist =(iDistX * iDistX)+(iDistY * iDistY);
if(iDist < 16)
{
if(m_bAnimLock == false)
m_iAnimState = 4;
}
}
}
}
}
void updateAI()
{
if(m_bAnimLock == true)
{
m_iAIDelayCounter = 2;
return;
}
if(m_iJukeDelay > 0)
{
if(m_bTeamHasBall == true && m_bHasBall == false)
m_iJukeDelay = 0;
else
m_iJukeDelay--;
ChkStopped();
return;
}
switch(Basketball.hGameWnd.GetState())
{
case 0 :
updateLooseBallAI();
break;
case 1 :
case 7 :
updateReboundAI();
break;
case 8 :
case 5 :
case 3 :
if(m_bTeamHasBall)
updateOffenseAI();
else
updateDefenseAI();
break;
case 2 :
FaceDir((0 << 10),(42 << 10)* -m_iOffenseDir, false);
break;
case 4 :
default :
break;
}
int iTargetDistX = Basketball.ABS(m_fTargetPos[0]- m_fPos[0])>> 10;
int iTargetDistY = Basketball.ABS(m_fTargetPos[1]- m_fPos[1])>> 10;
if(((iTargetDistX > 1)||(iTargetDistY > 1))&& m_bAnimLock == false)
{
m_iAnimState = 1;
FaceDir(m_fTargetPos[0], m_fTargetPos[1], false);
int iDist =(iTargetDistX * iTargetDistX)+(iTargetDistY * iTargetDistY);
if(iDist < m_iInPosDelta)
{
if(m_iAIDelayCounter <= 0 && !m_bHasBall)
m_bInPlayPos = true;
}
}
else
{
if(m_iAIDelayCounter <= 0)
m_bInPlayPos = true;
}
}
void updateOffenseAI()
{
m_iAIDelayCounter--;
if(m_iAIDelayCounter > 0)
{
m_bInPlayPos = false;
}
if(m_iAIPlayState != m_iAIPlayerState)
{
updateOffenseNextPlayPosAI();
}
if(m_bAnimLock == false)
{
updateScriptedActionAI();
updateSituationalAI();
}
if(m_iAnimState == 0)
FaceDir(Basketball.hGameWnd.GetPosX(), Basketball.hGameWnd.GetPosY(), false);
}
void updateScriptedActionAI()
{
switch(m_iAIScriptedSpecial)
{
case 3 :
if(m_bInPlayPos == true)
m_iAnimState = 4;
break;
case 1 :
if(m_bHasBall == true)
AttemptShot();
break;
case 2 :
if(m_bHasBall == true)
{
AttemptPass(m_iAIScriptedTarget);
}
break;
case 4 :
if(m_bHasBall == false)
{
if(m_bUserTeam == false)
m_iAIDelayCounter = 2;
CallForBall();
}
break;
case 6 :
if(m_bHasBall == true)
{
if(CalcGoodShotAI())
{
AttemptShot();
}
else
{
AttemptPass(m_iAIScriptedTarget);
}
}
break;
case 5 :
if(m_bHasBall == true)
{
if(CalcGoodShotAI())
{
AttemptShot();
}
}
break;
case 7 :
if(m_bHasBall == true)
{
m_iAIDelayCounter = 2;
m_bInPlayPos = false;
}
else
{
m_bInPlayPos = true;
}
break;
case 0 :
break;
}
}
void updateSituationalAI()
{
if(m_bHasBall == true && Basketball.hGameWnd.ChkOBPlay(m_iTeamIndex)== false)
{
if(ChkHighPrioritySituationAI()== true)
return;
if(m_iAIScriptedSpecial == 0)
{
if(ChkMedPrioritySituationAI()== true)
return;
if(m_bInPlayPos == true)
{
if(ChkLowPrioritySituationAI()== true)
return;
}
}
}
else
{
if(ChkUnguarded()== true)
SetCallForPass(true);
}
}
boolean ChkHighPrioritySituationAI()
{
if(ChkShotClockAI()== true)
return true;
if(ChkReallyCloseToBasket()== true)
return true;
return false;
}
boolean ChkMedPrioritySituationAI()
{
if(ChkBreakAway()== true)
return true;
if(ChkWideAssOpen()== true)
return true;
return false;
}
boolean ChkLowPrioritySituationAI()
{
int iRand = Basketball.GetRand()% 20;
switch(iRand)
{
case 0 :
case 1 :
case 2 :
case 3 :
case 4 :
DriveToHole();
return true;
case 5 :
case 6 :
case 7 :
case 8 :
if(m_iPlayerType != 0)
{
AttemptShot();
return true;
}
default :
if(ChkPassToOpenMan())
return true;
break;
}
return false;
}
boolean ChkBeatDefender()
{
if(m_pGuard.GetJukeDelay()> 0)
{
DriveToHole();
return true;
}
return false;
}
boolean ChkStopped()
{
if(m_bHasBall == true && m_iJukeDelay > 0 && Basketball.hGameWnd.ChkOBPlay(m_iTeamIndex)== false)
{
int iRand = Basketball.GetRand()& 0x0003;
if(iRand == 0)
{
ChkPassToOpenMan();
return true;
}
}
return false;
}
boolean ChkBreakAway()
{
int iDefendersBack = 0;
int fPosY = m_fPos[1]* m_iOffenseDir;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -