internal static SquarePoint GetNextStep(int pUserX, int pUserY, double pUserZ, int pUserTargetX, int pUserTargetY, byte[,] pGameMap, Stackmap pHeight, short[,] pHeightmap, int MaxX, int MaxY, bool pUserOverride, bool pDiagonal, Gamemap gamemap) { ModelInfo MapInfo = new ModelInfo(MaxX, MaxY, pGameMap); SquarePoint TargetPoint = new SquarePoint(pUserTargetX, pUserTargetY, pUserZ, pUserTargetX, pUserTargetY, MapInfo.GetState(pUserTargetX, pUserTargetY), pUserOverride, pHeight); if (pUserX == pUserTargetX && pUserY == pUserTargetY) return TargetPoint; SquareInformation SquareOnUser = new SquareInformation(pUserX, pUserY, pUserZ, TargetPoint, MapInfo, pUserOverride, pDiagonal, pHeight); return GetClosetSqare(SquareOnUser, new HeightInfo(MaxX, MaxY, pHeight, pHeightmap), pUserZ, gamemap, pUserOverride); }
internal SquareInformation(int pX, int pY, SquarePoint pTarget, ModelInfo pMap, bool pUserOverride, bool CalculateDiagonal) { mX = pX; mY = pY; mTarget = pTarget; mPoint = new SquarePoint(pX, pY, pTarget.X, pTarget.Y, pMap.GetState(pX, pY), pUserOverride); //Analyze all the squares arround the user mPos = new SquarePoint[8]; if (CalculateDiagonal) { mPos[1] = new SquarePoint(pX - 1, pY - 1, pTarget.X, pTarget.Y, pMap.GetState(pX - 1, pY - 1), pUserOverride); mPos[3] = new SquarePoint(pX - 1, pY + 1, pTarget.X, pTarget.Y, pMap.GetState(pX - 1, pY + 1), pUserOverride); mPos[5] = new SquarePoint(pX + 1, pY + 1, pTarget.X, pTarget.Y, pMap.GetState(pX + 1, pY + 1), pUserOverride); mPos[7] = new SquarePoint(pX + 1, pY - 1, pTarget.X, pTarget.Y, pMap.GetState(pX + 1, pY - 1), pUserOverride); } mPos[0] = new SquarePoint(pX, pY - 1, pTarget.X, pTarget.Y, pMap.GetState(pX, pY - 1), pUserOverride); mPos[2] = new SquarePoint(pX - 1, pY, pTarget.X, pTarget.Y, pMap.GetState(pX - 1, pY), pUserOverride); mPos[4] = new SquarePoint(pX, pY + 1, pTarget.X, pTarget.Y, pMap.GetState(pX, pY + 1), pUserOverride); mPos[6] = new SquarePoint(pX + 1, pY, pTarget.X, pTarget.Y, pMap.GetState(pX + 1, pY), pUserOverride); ///456 //Y3X7 ///218 ////X }
internal static SquarePoint GetNextStep(int pUserX, int pUserY, int pUserTargetX, int pUserTargetY, byte[,] pGameMap, double[,] pHeight, int MaxX, int MaxY, bool pUserOverride, bool pDiagonal) { ModelInfo MapInfo = new ModelInfo(MaxX, MaxY, pGameMap); SquarePoint TargetPoint = new SquarePoint(pUserTargetX, pUserTargetY, pUserTargetX, pUserTargetY, MapInfo.GetState(pUserTargetX, pUserTargetY), pUserOverride); if (pUserX == pUserTargetX && pUserY == pUserTargetY) //User is allready standing on its target return TargetPoint; SquareInformation SquareOnUser = new SquareInformation(pUserX, pUserY, TargetPoint, MapInfo, pUserOverride, pDiagonal); //if (!TargetPoint.CanWalk) // return SquareOnUser.Point; return GetClosetSqare(SquareOnUser, new HeightInfo(MaxX, MaxY, pHeight)); }
private void HandleSetMovement(SquarePoint Point, RoomUser User, ref bool updated, bool setSquareMap) { int nextX = Point.X; int nextY = Point.Y; User.RemoveStatus("mv"); //double nextZ = room.GetGameMap().SqAbsoluteHeight(nextX, nextY); double nextZ = room.GetGameMap().GetNewZForUser(nextX, nextY, User.Z); //if (room.GetGameMap().SquareOccupied(nextX, nextY, nextZ)) // return; if (User.UserIsRidingAHorse()) nextZ += 1; User.Statusses.Remove("lay"); User.Statusses.Remove("sit"); if (!User.isFlying) User.AddStatus("mv", nextX + "," + nextY + "," + TextHandling.GetString(nextZ)); else User.AddStatus("mv", nextX + "," + nextY + "," + TextHandling.GetString(nextZ + 4 + (0.5 * Math.Sin(0.7 * User.flyk)))); int newRot = Rotation.Calculate(User.X, User.Y, nextX, nextY, User.moonwalkEnabled); User.RotBody = newRot; User.RotHead = newRot; User.SetStep = true; User.SetX = nextX; User.SetY = nextY; User.SetZ = nextZ; UpdateUserEffect(User, User.SetX, User.SetY); updated = true; User.UpdateNeeded = true; if (setSquareMap) { room.GetGameMap().GameMap[User.X, User.Y] = User.SqState; // REstore the old one User.SqState = room.GetGameMap().GameMap[User.SetX, User.SetY];//Backup the new one if (!room.AllowWalkthrough) room.GetGameMap().GameMap[nextX, nextY] = 0; } }