📄 human.java
字号:
if(Room.IsCornerWallId(leftRoomData))
return leftDisY > moveTo ? moveOffset : leftDisY - curPosY - 1;
if(Room.IsCornerWallId(rightRoomData))
return rightDisY > moveTo ? moveOffset : rightDisY - curPosY - 1;
if(rightRoomData != -1)
{
int objPosX = Room.GetObstructionDistance(rightRoomData, 3);
int lWidth = 30 - Room.GetObstructionDistance(rightRoomData, 2);
int rWidth = objPosX;
int width = lWidth - rWidth;
if(width > 0)
{
objPosX += rightPosX * 30;
int leftBound = objPosX;
int rightBound = objPosX + width;
if(minX < rightBound && maxX > leftBound || minX > leftBound && maxX < rightBound || minX < leftBound && maxX > leftBound || minX < rightBound && maxX > rightBound)
if(moveTo >= rightDisY)
{
if(changeRoomData && (GetType() == 20 || GetType() == 21) && leftPosX == rightPosX && Room.IsCloseDoorYId(rightRoomData))
OpenTheDoor(rightRoomData + 1, leftPosX, posY1);
return rightDisY - curPosY - 1;
} else
{
return moveOffset;
}
}
}
if(leftPosX != rightPosX && leftRoomData != -1)
{
int objPosX = Room.GetObstructionDistance(leftRoomData, 3);
int lWidth = Room.GetObstructionDistance(leftRoomData, 2);
int rWidth = 30 - objPosX;
int width = rWidth - lWidth;
if(width > 0)
{
objPosX += leftPosX * 30;
int leftBound = objPosX;
int rightBound = objPosX + width;
if(minX < rightBound && maxX > leftBound || minX > leftBound && maxX < rightBound || minX < leftBound && maxX > leftBound || minX < rightBound && maxX > rightBound)
if(moveTo >= leftDisY)
return leftDisY - curPosY - 1;
else
return moveOffset;
}
}
int posY2 = moveTo / 30;
if(posY1 == posY2)
break;
while(++posY1 <= posY2)
{
leftRoomData = Room.GetObjectId(leftPosX, posY1);
rightRoomData = Room.GetObjectId(rightPosX, posY1);
leftDisY = (objPosY += 30) + Room.GetObstructionDistance(leftRoomData, direct);
rightDisY = objPosY + Room.GetObstructionDistance(rightRoomData, direct);
if(rightRoomData != -1)
{
int objPosX = Room.GetObstructionDistance(rightRoomData, 3);
int lWidth = 30 - Room.GetObstructionDistance(rightRoomData, 2);
int rWidth = objPosX;
int width = lWidth - rWidth;
if(width > 0)
{
objPosX += rightPosX * 30;
int leftBound = objPosX;
int rightBound = objPosX + width;
if(minX < rightBound && maxX > leftBound || minX > leftBound && maxX < rightBound || minX < leftBound && maxX > leftBound || minX < rightBound && maxX > rightBound)
return moveTo < rightDisY ? moveOffset : rightDisY - curPosY - 1;
}
}
if(leftPosX != rightPosX && leftRoomData != -1)
{
int objPosX = Room.GetObstructionDistance(leftRoomData, 3);
int lWidth = Room.GetObstructionDistance(leftRoomData, 2);
int rWidth = 30 - objPosX;
int width = rWidth - lWidth;
if(width > 0)
{
objPosX += leftPosX * 30;
int leftBound = objPosX;
int rightBound = objPosX + width;
if(minX < rightBound && maxX > leftBound || minX > leftBound && maxX < rightBound || minX < leftBound && maxX > leftBound || minX < rightBound && maxX > rightBound)
return moveTo < leftDisY ? moveOffset : leftDisY - curPosY - 1;
}
}
}
break;
}
case 2: // '\002'
{
int minX = curPosX - widthOffset;
int leftPosX1 = minX / 30;
int posY = curPosY / 30;
int leftRoomData = Room.GetObjectId(leftPosX1, posY);
int objPosX = (leftPosX1 + 1) * 30;
int leftDisX = objPosX - Room.GetObstructionDistance(leftRoomData, direct);
int moveTo = minX - moveOffset;
if(leftRoomData != -1 && leftDisX <= minX)
{
int objPosY;
int upDisY;
int downDisY;
if(leftDisX >= moveTo)
{
if(!Room.IsCornerWallId(leftRoomData))
{
objPosY = posY * 30;
int objDis = Room.GetObstructionDistance(leftRoomData, 0);
if(objDis < 30)
{
upDisY = (objPosY + 30) - objDis;
if(curPosY > upDisY)
return moveOffset;
}
objDis = Room.GetObstructionDistance(leftRoomData, 1);
if(objDis < 30)
{
downDisY = objPosY + Room.GetObstructionDistance(leftRoomData, 1);
if(curPosY < downDisY)
return moveOffset;
}
}
if(changeRoomData && (GetType() == 20 || GetType() == 21) && Room.IsCloseDoorXId(leftRoomData))
OpenTheDoor(-1, leftPosX1, posY);
return minX - leftDisX;
}
objPosY = posY * 30;
upDisY = (objPosY + 30) - Room.GetObstructionDistance(leftRoomData, 0);
downDisY = objPosY + Room.GetObstructionDistance(leftRoomData, 1);
if(curPosY < upDisY && curPosY > downDisY)
return minX - leftDisX <= moveOffset ? minX - leftDisX : moveOffset;
}
int leftPosX2 = moveTo / 30;
if(leftPosX1 == leftPosX2)
break;
while(--leftPosX1 >= leftPosX2)
{
leftRoomData = Room.GetObjectId(leftPosX1, posY);
leftDisX = (objPosX -= 30) - Room.GetObstructionDistance(leftRoomData, direct);
if(leftRoomData != -1 && leftDisX <= minX)
{
int objPosY;
int upDisY;
int downDisY;
if(leftDisX >= moveTo)
{
if(!Room.IsCornerWallId(leftRoomData))
{
objPosY = posY * 30;
int objDis = Room.GetObstructionDistance(leftRoomData, 0);
if(objDis < 30)
{
upDisY = (objPosY + 30) - objDis;
if(curPosY > upDisY)
return moveOffset;
}
objDis = Room.GetObstructionDistance(leftRoomData, 1);
if(objDis < 30)
{
downDisY = objPosY + Room.GetObstructionDistance(leftRoomData, 1);
if(curPosY < downDisY)
return moveOffset;
}
}
if(changeRoomData && (GetType() == 20 || GetType() == 21) && Room.IsCloseDoorXId(leftRoomData))
OpenTheDoor(-1, leftPosX1, posY);
return minX - leftDisX;
}
objPosY = posY * 30;
upDisY = (objPosY + 30) - Room.GetObstructionDistance(leftRoomData, 0);
downDisY = objPosY + Room.GetObstructionDistance(leftRoomData, 1);
if(curPosY < upDisY && curPosY > downDisY)
return minX - leftDisX <= moveOffset ? minX - leftDisX : moveOffset;
}
}
break;
}
case 3: // '\003'
{
int maxX = curPosX + widthOffset;
int rightPosX1 = maxX / 30;
int posY = curPosY / 30;
int rightRoomData = Room.GetObjectId(rightPosX1, posY);
int objPosX = rightPosX1 * 30;
int rightDisX = objPosX + Room.GetObstructionDistance(rightRoomData, direct);
int moveTo = maxX + moveOffset;
if(rightRoomData != -1 && rightDisX >= maxX)
{
int objPosY;
int upDisY;
int downDisY;
if(rightDisX <= moveTo)
{
if(!Room.IsCornerWallId(rightRoomData))
{
objPosY = posY * 30;
int objDis = Room.GetObstructionDistance(rightRoomData, 0);
if(objDis < 30)
{
upDisY = (objPosY + 30) - objDis;
if(curPosY > upDisY)
return moveOffset;
}
objDis = Room.GetObstructionDistance(rightRoomData, 1);
if(objDis < 30)
{
downDisY = objPosY + Room.GetObstructionDistance(rightRoomData, 1);
if(curPosY < downDisY)
return moveOffset;
}
}
if(changeRoomData && (GetType() == 20 || GetType() == 21) && Room.IsCloseDoorXId(rightRoomData))
OpenTheDoor(-1, rightPosX1, posY);
return rightDisX - maxX - 1;
}
objPosY = posY * 30;
upDisY = (objPosY + 30) - Room.GetObstructionDistance(rightRoomData, 0);
downDisY = objPosY + Room.GetObstructionDistance(rightRoomData, 1);
if(curPosY < upDisY && curPosY > downDisY)
return rightDisX - maxX - 1 <= moveOffset ? rightDisX - maxX - 1 : moveOffset;
}
int rightPosX2 = moveTo / 30;
if(rightPosX1 == rightPosX2)
break;
while(++rightPosX1 <= rightPosX2)
{
rightRoomData = Room.GetObjectId(rightPosX1, posY);
rightDisX = (objPosX += 30) + Room.GetObstructionDistance(rightRoomData, direct);
if(rightRoomData != -1 && rightDisX >= maxX)
{
int objPosY;
int upDisY;
int downDisY;
if(rightDisX <= moveTo)
{
if(!Room.IsCornerWallId(rightRoomData))
{
objPosY = posY * 30;
int objDis = Room.GetObstructionDistance(rightRoomData, 0);
if(objDis < 30)
{
upDisY = (objPosY + 30) - objDis;
if(curPosY > upDisY)
return moveOffset;
}
objDis = Room.GetObstructionDistance(rightRoomData, 1);
if(objDis < 30)
{
downDisY = objPosY + Room.GetObstructionDistance(rightRoomData, 1);
if(curPosY < downDisY)
return moveOffset;
}
}
if(changeRoomData && (GetType() == 20 || GetType() == 21) && Room.IsCloseDoorXId(rightRoomData))
OpenTheDoor(-1, rightPosX1, posY);
return rightDisX - maxX - 1;
}
objPosY = posY * 30;
upDisY = (objPosY + 30) - Room.GetObstructionDistance(rightRoomData, 0);
downDisY = objPosY + Room.GetObstructionDistance(rightRoomData, 1);
if(curPosY < upDisY && curPosY > downDisY)
return rightDisX - maxX - 1 <= moveOffset ? rightDisX - maxX - 1 : moveOffset;
}
}
break;
}
}
}
catch(Exception e) { }
return moveOffset;
}
public void SetMessage(String newMsg[], int timer)
{
msgTimer = timer;
msg = newMsg;
}
public int GetMessageTimer()
{
return msgTimer;
}
public int GetMessageHeight(Image img, String msg[], int imgHeight, int gap)
{
if(msg == null)
{
return 0;
} else
{
int strHeight = GameManager.font1.getHeight();
strHeight = gap * 2 + (imgHeight <= strHeight * msg.length ? strHeight * msg.length : imgHeight);
return strHeight;
}
}
public void DrawMessage(Graphics g)
{
int msgHeight = GetMessageHeight(img, msg, 24, 4);
DrawMessage(g, msg, 0, 208 - msgHeight, 24, 24, 4, 0xff0000, 0xffffff);
}
public void DrawMessage(Graphics g, String msg[], int topPosX, int topPosY, int imgWidth, int imgHeight, int gap,
int msgColor, int backColor)
{
if(msgTimer > 0)
msgTimer--;
if(msg == null)
return;
int strHeight = GameManager.font1.getHeight();
int msgWidth = 176;
int msgHeight = GetMessageHeight(img, msg, imgHeight, gap);
g.setClip(topPosX, topPosY, msgWidth, msgHeight);
g.setColor(255);
g.fillRect(topPosX, topPosY, msgWidth, msgHeight);
g.setColor(backColor);
g.fillRect(topPosX + 2, topPosY + 2, msgWidth - 4, msgHeight - 4);
g.setColor(msgColor);
for(int i = 0; i < msg.length; i++)
g.drawString(msg[i], topPosX + gap * 2 + imgWidth, topPosY + gap + strHeight * i, 20);
g.setClip(topPosX + gap, topPosY + gap, imgWidth, imgHeight);
g.drawImage(img, (topPosX - 192) + gap, (topPosY - 72) + gap, 20);
}
public void DrawItem(Graphics g, int itemId, int posX, int posY)
{
int pType = GetType();
if(itemId == 10 || itemId == 11 || itemId == 12 || itemId == 13)
itemId = 3;
else
if(itemId == 7 || itemId == 8 || itemId == 9)
itemId = 7;
else
if(itemId == 14 || itemId == 15 || itemId == 16)
itemId = 8;
else
if(itemId == 17 || itemId == 18)
itemId = 5;
else
if(itemId == 19)
{
itemId = 0;
pType = 20;
}
g.setClip(posX, posY, 21, 21);
g.drawImage(MovingObject.weaponImg, posX - itemId * 21, pType != 20 || itemId >= 3 ? posY - 363 : posY - 342, 20);
}
public void DrawMenu(Graphics g, int posX, int posY)
{
g.setClip(posX, posY, 176, 30);
g.setColor(0);
g.fillRect(posX + 96, posY + 16, 38, 5);
g.setColor(255);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -