コード例 #1
0
 /// <summary>
 /// Teleport to specific map pixel with an optional automatic reposition.
 /// </summary>
 public void TeleportToCoordinates(int mapPixelX, int mapPixelY, RepositionMethods autoReposition = RepositionMethods.Origin)
 {
     TeleportToMapPixel(mapPixelX, mapPixelY, Vector3.zero, autoReposition);
 }
コード例 #2
0
        void Update()
        {
            // Cannot proceed until ready and player is set
            if (!ReadyCheck())
                return;

            // Handle moving to new map pixel or first-time init
            DFPosition curMapPixel = LocalPlayerGPS.CurrentMapPixel;
            if (curMapPixel.X != MapPixelX ||
                curMapPixel.Y != MapPixelY ||
                init)
            {
                //Debug.Log(string.Format("Entering new map pixel X={0}, Y={1}", curMapPixel.X, curMapPixel.Y));
                MapPixelX = curMapPixel.X;
                MapPixelY = curMapPixel.Y;
                UpdateWorld();
                InitPlayerTerrain();
                StartCoroutine(UpdateTerrains());
                updateLocatations = true;
                init = false;
            }

            // Exit if terrain data still updating
            // Raise location update flag any time terrain updates
            if (terrainUpdateRunning)
            {
                updateLocatations = true;
                return;
            }

            // Update locations when terrain data finished
            // This flag is raised during terrain update
            if (updateLocatations)
            {
                UpdateLocations();
                updateLocatations = false;
            }

            // Reposition player
            if (autoRepositionMethod != RepositionMethods.None)
            {
                switch (autoRepositionMethod)
                {
                    case RepositionMethods.RandomStartMarker:
                        PositionPlayerToLocation();
                        break;
                    case RepositionMethods.Offset:
                        RepositionPlayer(MapPixelX, MapPixelY, autoRepositionOffset);
                        break;
                    case RepositionMethods.DungeonEntrance:
                        PositionPlayerToDungeonExit();
                        break;
                    default:
                    case RepositionMethods.Origin:
                        RepositionPlayer(MapPixelX, MapPixelY, Vector3.zero);
                        break;
                }
                autoRepositionMethod = RepositionMethods.None;
            }

            // Do not update world position if player is inside dungeon
            // This can cause player to become desynced from world as dungeon can
            // actually extend beyond the current map pixel area
            if (GameManager.Instance.PlayerEnterExit.IsPlayerInsideDungeon)
                return;

            // Get distance player has moved in world map units and apply to world position
            Vector3 playerPos = LocalPlayerGPS.transform.position;
            worldX += (playerPos.x - lastPlayerPos.x) * SceneMapRatio;
            worldZ += (playerPos.z - lastPlayerPos.z) * SceneMapRatio;

            // Sync PlayerGPS to new world position
            LocalPlayerGPS.WorldX = (int)worldX;
            LocalPlayerGPS.WorldZ = (int)worldZ;

            // Update last player position
            lastPlayerPos = playerPos;
        }
コード例 #3
0
 public void SetAutoReposition(RepositionMethods method, Vector3 offset)
 {
     autoRepositionOffset = offset;
     autoRepositionMethod = method;
 }
コード例 #4
0
 // Teleports to map pixel with an optional reset or autoreposition
 void TeleportToMapPixel(int mapPixelX, int mapPixelY, Vector3 repositionOffset, RepositionMethods autoReposition)
 {
     DFPosition worldPos = MapsFile.MapPixelToWorldCoord(mapPixelX, mapPixelY);
     LocalPlayerGPS.WorldX = worldPos.X;
     LocalPlayerGPS.WorldZ = worldPos.Y;
     LocalPlayerGPS.UpdateWorldInfo();
     autoRepositionOffset = repositionOffset;
     autoRepositionMethod = autoReposition;
     InitWorld();
     RaiseOnTeleportToCoordinatesEvent(worldPos);
 }