diff --git a/BlueMapCommon/webapp/public/lang/settings.conf b/BlueMapCommon/webapp/public/lang/settings.conf
index 21efafc3..e3a04483 100644
--- a/BlueMapCommon/webapp/public/lang/settings.conf
+++ b/BlueMapCommon/webapp/public/lang/settings.conf
@@ -26,5 +26,6 @@
{ locale: "zh_TW", name: "中文(台灣)" }
{ locale: "zh_HK", name: "中文(香港)" }
{ locale: "ko", name: "한국어" }
+ { locale: "vi", name: "Tiếng Việt"}
]
}
diff --git a/BlueMapCommon/webapp/public/lang/vi.conf b/BlueMapCommon/webapp/public/lang/vi.conf
new file mode 100644
index 00000000..508a7a80
--- /dev/null
+++ b/BlueMapCommon/webapp/public/lang/vi.conf
@@ -0,0 +1,171 @@
+{
+ pageTitle: "BlueMap - {map}"
+ menu: {
+ title: "Menu"
+ tooltip: "Menu"
+ }
+ map: {
+ unloaded: "Không có bản đồ."
+ loading: "Đang tải bản đồ..."
+ errored: "Có lồi khi tải bản đồ!"
+ }
+ maps: {
+ title: "Bản đồ"
+ button: "Bản đồ"
+ tooltip: "Mọi bản đồ"
+ }
+ markers: {
+ title: "Đánh dấu"
+ button: "Đánh dấu"
+ tooltip: "Mọi đánh dấu"
+ marker: "đánh dấu | các đánh dấu"
+ markerSet: "cụm đánh dấu | các cụm đánh dấu"
+ searchPlaceholder: "Tìm..."
+ followPlayerTitle: "Bám theo"
+ sort {
+ title: "Sắp xếp"
+ by {
+ default: "mặc định"
+ label: "tên"
+ distance: "khoảng cách"
+ }
+ }
+ }
+ settings: {
+ title: "Cài đặt"
+ button: "Cài đặt"
+ }
+ goFullscreen: {
+ button: "Toản màn hình"
+ }
+ resetCamera: {
+ button: "Đặt lại camera"
+ tooltip: "Đặt lại camera và vị trí"
+ }
+ updateMap: {
+ button: "Cập nhật bản đồ"
+ tooltip: "Xóa bộ nhớ đệm"
+ }
+ lighting: {
+ title: "Ánh sáng"
+ dayNightSwitch: {
+ tooltip: "Ngày/Đêm"
+ }
+ sunlight: "Nhật quang"
+ ambientLight: "Phát quang"
+ }
+ resolution: {
+ title: "Độ phân giải"
+ high: "Cao (SSAA x2)"
+ normal: "Thường (Native x1)"
+ low: "Thấp (Upscaling x0.5)"
+ }
+ mapControls: {
+ title: "Điều khiển"
+ showZoomButtons: "Hiện nút thu phóng"
+ }
+ freeFlightControls: {
+ title: "Chế độ bay"
+ mouseSensitivity: "Độ nhạy chuột"
+ invertMouseY: "Đảo trục dọc"
+ }
+ renderDistance: {
+ title: "Khoảng cách kết xuất"
+ hiresLayer: "Vùng chất lượng cao"
+ lowersLayer: "Vùng chất lượng thấp"
+ loadHiresWhileMoving: "Tải vùng chất lượng cao khi di chuyển"
+ off: "Tắt"
+ }
+ theme: {
+ title: "Giao diện"
+ default: "Mặc định (hệ thống)"
+ dark: "Tối"
+ light: "Sáng"
+ contrast: "Tương phản"
+ }
+ debug: {
+ button: "Gỡ lỗi"
+ }
+ resetAllSettings: {
+ button: "Thiết đặt lại"
+ }
+ players: {
+ title: "Người chơi"
+ tooltip: "Danh sách người chơi"
+ }
+ compass: {
+ tooltip: "Hướng / chỉ bắc"
+ }
+ screenshot: {
+ title: "Chụp màn hình"
+ button: "Chụp màn hình"
+ clipboard: "Sao chép"
+ }
+ controls: {
+ title: "Chế độ"
+ perspective: {
+ button: "Xung quanh"
+ tooltip: "Góc nhìn xung quanh"
+ }
+ flatView: {
+ button: "Phẳng"
+ tooltip: "Góc nhìn từ trên xuống"
+ }
+ freeFlight: {
+ button: "Bay"
+ tooltip: "Góc nhìn chim bay"
+ }
+ }
+ language: {
+ title: "Ngôn ngữ"
+ }
+ blockTooltip: {
+ block: "Khối"
+ position: "Vị chí"
+ chunk: "Vùng"
+ region: {
+ region: "Khu vực"
+ file: "File"
+ }
+ light: {
+ light: "Ánh sáng"
+ sun: "Nhật quang"
+ block: "Phát quang"
+ }
+ }
+ info: {
+ title: "Thông tin"
+ button: "Thông tin"
+ content: """
+
+
+
Điều khiển chuột:
+
+ di chuyển | chuột trái + kéo |
+ thu phóng | lăn chuột |
+ xoay/nghiêng | chuột phải + kéo |
+
+
+
+
Điều khiển bàn phím:
+
+ di chuyển | wasd / phím mũi tên |
+ thu phóng | Bàn phím số: +/- or Ins/Home |
+ xoay/nghiêng | Alt trái + wasd / phím mũi tên hoặc Delete/End/Page Up/Page Down |
+
+
+
+
Điều khiển cảm ứng:
+
+ di chuyển | chạm + kéo |
+ thu phóng | chạm 2 ngón + nhón |
+ xoay/nghiêng | chạm 2 ngón + di chuyển / xoay |
+
+
+
+
+"""
+ }
+}
diff --git a/BlueMapCommon/webapp/src/js/BlueMap.js b/BlueMapCommon/webapp/src/js/BlueMap.js
index 6cb5f086..8db2cc54 100644
--- a/BlueMapCommon/webapp/src/js/BlueMap.js
+++ b/BlueMapCommon/webapp/src/js/BlueMap.js
@@ -22,41 +22,85 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
-import {Object3D} from "three";
+import { Object3D } from "three";
-export * from "./MapViewer";
+export * as Three from "three";
+export * from "./controls/freeflight/FreeFlightControls";
+export * from "./controls/freeflight/keyboard/KeyHeightControls";
+// class name conflicts with map controls
+export { KeyMoveControls as FreeFlightKeyMoveControls } from "./controls/freeflight/keyboard/KeyMoveControls";
+export { MouseAngleControls as FreeFlightMouseAngleControls } from "./controls/freeflight/mouse/MouseAngleControls";
+export { MouseRotateControls as FreeFlightMouseRotateControls } from "./controls/freeflight/mouse/MouseRotateControls";
+export * from "./controls/freeflight/touch/TouchPanControls";
+
+export * from "./controls/map/MapControls";
+export * from "./controls/map/MapHeightControls";
+export * from "./controls/map/keyboard/KeyAngleControls";
+export { KeyMoveControls as MapKeyMoveControls } from "./controls/map/keyboard/KeyMoveControls";
+export * from "./controls/map/keyboard/KeyRotateControls";
+export * from "./controls/map/keyboard/KeyZoomControls";
+export { MouseAngleControls as MapMouseAngleControls } from "./controls/map/mouse/MouseAngleControls";
+export * from "./controls/map/mouse/MouseMoveControls";
+export { MouseRotateControls as MapMouseRotateControls } from "./controls/map/mouse/MouseRotateControls";
+export * from "./controls/map/mouse/MouseZoomControls";
+export * from "./controls/map/touch/TouchAngleControls";
+export * from "./controls/map/touch/TouchMoveControls";
+export * from "./controls/map/touch/TouchRotateControls";
+export * from "./controls/map/touch/TouchZoomControls";
+
+export * from "./controls/ControlsManager";
+export * from "./controls/KeyCombination";
+
+export * from "./map/LowresTileLoader";
export * from "./map/Map";
export * from "./map/Tile";
export * from "./map/TileLoader";
export * from "./map/TileManager";
export * from "./map/TileMap";
+export * from "./map/hires/HiresFragmentShader";
+export * from "./map/hires/HiresVertexShader";
+export * from "./map/lowres/LowresFragmentShader";
+export * from "./map/lowres/LowresVertexShader";
export * from "./markers/ExtrudeMarker";
export * from "./markers/HtmlMarker";
export * from "./markers/LineMarker";
export * from "./markers/Marker";
+export * from "./markers/MarkerFillFragmentShader";
+export * from "./markers/MarkerFillVertexShader";
export * from "./markers/MarkerManager";
export * from "./markers/MarkerSet";
-export * from "./markers/PlayerMarkerSet";
+export * from "./markers/NormalMarkerManager";
export * from "./markers/ObjectMarker";
export * from "./markers/PlayerMarker";
+export * from "./markers/PlayerMarkerManager";
+export * from "./markers/PlayerMarkerSet";
export * from "./markers/PoiMarker";
export * from "./markers/ShapeMarker";
-export * from "./controls/map/MapControls";
-export * from "./controls/freeflight/FreeFlightControls";
+export * from "./skybox/SkyFragmentShader";
+export * from "./skybox/SkyVertexShader";
+export * from "./skybox/SkyboxScene";
+export * from "./util/CSS2DRenderer";
export * from "./util/CombinedCamera";
+export * from "./util/LineShader";
+export * from "./util/Stats";
export * from "./util/Utils";
+export * from "./BlueMapApp";
+export * from "./MainMenu";
+export * from "./MapViewer";
+export * from "./PopupMarker";
+export * from "./Utils";
+
/**
* @param event {object}
* @return {boolean} - whether the event has been consumed (true) or not (false)
*/
-Object3D.prototype.onClick = function(event) {
-
- if (this.parent){
+Object3D.prototype.onClick = function (event) {
+ if (this.parent) {
if (!Array.isArray(event.eventStack)) event.eventStack = [];
event.eventStack.push(this);
diff --git a/BlueMapCommon/webapp/src/main.js b/BlueMapCommon/webapp/src/main.js
index 3d6c63a1..467a6c47 100644
--- a/BlueMapCommon/webapp/src/main.js
+++ b/BlueMapCommon/webapp/src/main.js
@@ -25,6 +25,7 @@
import * as Vue from 'vue';
import App from './App.vue';
+import * as BlueMap from "./js/BlueMap";
import {BlueMapApp} from "./js/BlueMapApp";
import {i18nModule, loadLanguageSettings} from "./i18n";
@@ -38,6 +39,7 @@ async function load() {
try {
const bluemap = new BlueMapApp(document.getElementById("map-container"));
window.bluemap = bluemap;
+ window.BlueMap = BlueMap;
// init vue
const vue = Vue.createApp(App, {