Example #1
0
        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);
        }
Example #2
0
        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
        }
Example #3
0
        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));
        }
Example #4
0
        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;
            }
        }