Files
ScienceLab.TimeAndSpace/Assets/Editor/GlobeAssembler.cs
2026-03-17 18:10:00 +02:00

396 lines
36 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using UnityEngine;
using UnityEditor;
using System.IO;
using System.Collections.Generic;
public class GlobeAssembler : EditorWindow
{
private GameObject globeObject;
public struct CountryEntry
{
public float baseOffset;
public string baseLabel;
public float dstOffset;
public string dstLabel;
public int dstStartMonth;
public int dstEndMonth;
public bool anomaly;
public string fact;
public string nameUkr;
public CountryEntry(float baseOff, string baseLbl, float dstOff, string dstLbl,
int dstStart, int dstEnd, bool anom, string f, string ukr)
{
baseOffset = baseOff;
baseLabel = baseLbl;
dstOffset = dstOff;
dstLabel = dstLbl;
dstStartMonth = dstStart;
dstEndMonth = dstEnd;
anomaly = anom;
fact = f;
nameUkr = ukr;
}
}
static CountryEntry NoDST(float off, string lbl, bool anom = false, string fact = "", string ukr = "")
=> new CountryEntry(off, lbl, off, lbl, 0, 0, anom, fact, ukr);
static CountryEntry NorthDST(float stdOff, string stdLbl, float dstOff, string dstLbl,
bool anom = false, string fact = "", string ukr = "")
=> new CountryEntry(stdOff, stdLbl, dstOff, dstLbl, 3, 10, anom, fact, ukr);
static CountryEntry SouthDST(float stdOff, string stdLbl, float dstOff, string dstLbl,
bool anom = false, string fact = "", string ukr = "")
=> new CountryEntry(stdOff, stdLbl, dstOff, dstLbl, 10, 3, anom, fact, ukr);
private static readonly Dictionary<string, CountryEntry> DATA = new Dictionary<string, CountryEntry>
{
{ "Afghanistan", NoDST(4.5f, "UTC+4:30", false, "", "Афганістан") },
{ "Akrotiri Sovereign Base Area", NoDST(2f, "UTC+2", false, "", "Акротірі") },
{ "Aland", NorthDST(2f, "UTC+2", 3f, "UTC+3", false, "", "Аландські острови") },
{ "Albania", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Албанія") },
{ "Algeria", NoDST(1f, "UTC+1", false, "", "Алжир") },
{ "American Samoa", NoDST(-11f, "UTC-11", false, "", "Американське Самоа") },
{ "Andorra", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Андорра") },
{ "Angola", NoDST(1f, "UTC+1", false, "", "Ангола") },
{ "Anguilla", NoDST(-4f, "UTC-4", false, "", "Ангілья") },
{ "Antarctica", NoDST(0f, "UTC+0", false, "", "Антарктида") },
{ "Antigua and Barbuda", NoDST(-4f, "UTC-4", false, "", "Антигуа і Барбуда") },
{ "Argentina", NoDST(-3f, "UTC-3", false, "", "Аргентина") },
{ "Armenia", NoDST(4f, "UTC+4", false, "", "Вірменія") },
{ "Aruba", NoDST(-4f, "UTC-4", false, "", "Аруба") },
{ "Ashmore and Cartier Islands", NoDST(8f, "UTC+8", false, "", "Острови Ашмор і Картьє") },
{ "Australia", SouthDST(10f, "UTC+10", 11f, "UTC+11", false, "", "Австралія") },
{ "Austria", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Австрія") },
{ "Azerbaijan", NoDST(4f, "UTC+4", false, "", "Азербайджан") },
{ "Bahrain", NoDST(3f, "UTC+3", false, "", "Бахрейн") },
{ "Bajo Nuevo Bank Petrel Is", NoDST(-6f, "UTC-6", false, "", "Банк Бахо Нуево") },
{ "Bangladesh", NoDST(6f, "UTC+6", false, "", "Бангладеш") },
{ "Barbados", NoDST(-4f, "UTC-4", false, "", "Барбадос") },
{ "Baykonur Cosmodrome", NoDST(6f, "UTC+6", false, "", "Байконур") },
{ "Belarus", NoDST(3f, "UTC+3", false, "", "Білорусь") },
{ "Belgium", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Бельгія") },
{ "Belize", NoDST(-6f, "UTC-6", false, "", "Беліз") },
{ "Benin", NoDST(1f, "UTC+1", false, "", "Бенін") },
{ "Bermuda", NorthDST(-4f, "UTC-4", -3f, "UTC-3", false, "", "Бермуди") },
{ "Bhutan", NoDST(6f, "UTC+6", false, "", "Бутан") },
{ "Bir Tawil", NoDST(3f, "UTC+3", false, "", "Бір-Тавіль") },
{ "Bolivia", NoDST(-4f, "UTC-4", false, "", "Болівія") },
{ "Bosnia and Herzegovina", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Боснія і Герцеговина") },
{ "Botswana", NoDST(2f, "UTC+2", false, "", "Ботсвана") },
{ "Brazil", NoDST(-3f, "UTC-3", false, "", "Бразилія") },
{ "Brazilian Island", NoDST(-3f, "UTC-3", false, "", "Бразильський острів") },
{ "British Indian Ocean Territory", NoDST(6f, "UTC+6", false, "", "Британська територія в Індійському океані") },
{ "British Virgin Islands", NoDST(-4f, "UTC-4", false, "", "Британські Віргінські острови") },
{ "Brunei", NoDST(8f, "UTC+8", false, "", "Бруней") },
{ "Bulgaria", NorthDST(2f, "UTC+2", 3f, "UTC+3", false, "", "Болгарія") },
{ "Burkina Faso", NoDST(0f, "UTC+0", false, "", "Буркіна-Фасо") },
{ "Burundi", NoDST(2f, "UTC+2", false, "", "Бурунді") },
{ "Cabo Verde", NoDST(-1f, "UTC-1", false, "", "Кабо-Верде") },
{ "Cambodia", NoDST(7f, "UTC+7", false, "", "Камбоджа") },
{ "Cameroon", NoDST(1f, "UTC+1", false, "", "Камерун") },
{ "Canada", NorthDST(-5f, "UTC-5", -4f, "UTC-4", false, "", "Канада") },
{ "Cayman Islands", NoDST(-5f, "UTC-5", false, "", "Кайманові острови") },
{ "Central African Republic", NoDST(1f, "UTC+1", false, "", "Центральноафриканська Республіка") },
{ "Chad", NoDST(1f, "UTC+1", false, "", "Чад") },
{ "Chile", SouthDST(-3f, "UTC-3", -4f, "UTC-4", false, "", "Чилі") },
{ "China", NoDST(8f, "UTC+8", true, "Китай розміром з США використовує один пояс UTC+8. На заході сонце сходить о 10 ранку.", "Китай") },
{ "Clipperton Island", NoDST(-8f, "UTC-8", false, "", "Острів Кліппертон") },
{ "Colombia", NoDST(-5f, "UTC-5", false, "", "Колумбія") },
{ "Comoros", NoDST(3f, "UTC+3", false, "", "Коморські острови") },
{ "Cook Islands", NoDST(-10f, "UTC-10", false, "", "Острови Кука") },
{ "Coral Sea Islands", NoDST(11f, "UTC+11", false, "", "Острови Кораловного моря") },
{ "Costa Rica", NoDST(-6f, "UTC-6", false, "", "Коста-Ріка") },
{ "Croatia", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Хорватія") },
{ "Cuba", NorthDST(-5f, "UTC-5", -4f, "UTC-4", false, "", "Куба") },
{ "Curacao", NoDST(-4f, "UTC-4", false, "", "Кюрасао") },
{ "Cyprus", NorthDST(2f, "UTC+2", 3f, "UTC+3", false, "", "Кіпр") },
{ "Cyprus No Mans Area", NoDST(2f, "UTC+2", false, "", "Нейтральна зона Кіпру") },
{ "Czechia", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Чехія") },
{ "Czech Republic", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Чехія") },
{ "Democratic Republic of the Congo", NoDST(1f, "UTC+1", false, "", "ДР Конго") },
{ "Denmark", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Данія") },
{ "Dhekelia Sovereign Base Area", NorthDST(2f, "UTC+2", 3f, "UTC+3", false, "", "Декелія") },
{ "Djibouti", NoDST(3f, "UTC+3", false, "", "Джибуті") },
{ "Dominica", NoDST(-4f, "UTC-4", false, "", "Домініка") },
{ "Dominican Republic", NoDST(-4f, "UTC-4", false, "", "Домініканська Республіка") },
{ "East Timor", NoDST(9f, "UTC+9", false, "", "Східний Тимор") },
{ "Ecuador", NoDST(-5f, "UTC-5", false, "", "Еквадор") },
{ "Egypt", NoDST(2f, "UTC+2", false, "", "Єгипет") },
{ "El Salvador", NoDST(-6f, "UTC-6", false, "", "Сальвадор") },
{ "Equatorial Guinea", NoDST(1f, "UTC+1", false, "", "Екваторіальна Гвінея") },
{ "Eritrea", NoDST(3f, "UTC+3", false, "", "Еритрея") },
{ "Estonia", NorthDST(2f, "UTC+2", 3f, "UTC+3", false, "", "Естонія") },
{ "eSwatini", NoDST(2f, "UTC+2", false, "", "Есватіні") },
{ "Ethiopia", NoDST(3f, "UTC+3", false, "", "Ефіопія") },
{ "Falkland Islands", NoDST(-3f, "UTC-3", false, "", "Фолклендські острови") },
{ "Faroe Islands", NorthDST(0f, "UTC+0", 1f, "UTC+1", false, "", "Фарерські острови") },
{ "Federated States of Micronesia", NoDST(11f, "UTC+11", false, "", "Мікронезія") },
{ "Fiji", SouthDST(12f, "UTC+12", 13f, "UTC+13", false, "", "Фіджі") },
{ "Finland", NorthDST(2f, "UTC+2", 3f, "UTC+3", false, "", "Фінляндія") },
{ "France", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Франція") },
{ "French Polynesia", NoDST(-10f, "UTC-10", false, "", "Французька Полінезія") },
{ "French Southern and Antarctic Lands", NoDST(5f, "UTC+5", false, "", "Французькі південні території") },
{ "Gabon", NoDST(1f, "UTC+1", false, "", "Габон") },
{ "Gambia", NoDST(0f, "UTC+0", false, "", "Гамбія") },
{ "Georgia", NoDST(4f, "UTC+4", false, "", "Грузія") },
{ "Germany", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Німеччина") },
{ "Ghana", NoDST(0f, "UTC+0", false, "", "Гана") },
{ "Gibraltar", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Гібралтар") },
{ "Greece", NorthDST(2f, "UTC+2", 3f, "UTC+3", false, "", "Греція") },
{ "Greenland", NorthDST(-3f, "UTC-3", -2f, "UTC-2", false, "", "Гренландія") },
{ "Grenada", NoDST(-4f, "UTC-4", false, "", "Гренада") },
{ "Guam", NoDST(10f, "UTC+10", false, "", "Гуам") },
{ "Guatemala", NoDST(-6f, "UTC-6", false, "", "Гватемала") },
{ "Guernsey", NorthDST(0f, "UTC+0", 1f, "UTC+1", false, "", "Гернсі") },
{ "Guinea", NoDST(0f, "UTC+0", false, "", "Гвінея") },
{ "Guinea-Bissau", NoDST(0f, "UTC+0", false, "", "Гвінея-Бісау") },
{ "Guyana", NoDST(-4f, "UTC-4", false, "", "Гаяна") },
{ "Haiti", NorthDST(-5f, "UTC-5", -4f, "UTC-4", false, "", "Гаїті") },
{ "Heard Island and McDonald Islands", NoDST(5f, "UTC+5", false, "", "Острів Херд") },
{ "Honduras", NoDST(-6f, "UTC-6", false, "", "Гондурас") },
{ "Hong Kong SAR", NoDST(8f, "UTC+8", false, "", "Гонконг") },
{ "Hungary", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Угорщина") },
{ "Iceland", NoDST(0f, "UTC+0", false, "", "Ісландія") },
{ "India", NoDST(5.5f, "UTC+5:30", true, "Індія використовує UTC+5:30 щоб вся країна жила за одним часом попри 30 градусів довготи.", "Індія") },
{ "Indian Ocean Territories", NoDST(7f, "UTC+7", false, "", "Території Індійського океану") },
{ "Indonesia", NoDST(7f, "UTC+7", false, "", "Індонезія") },
{ "Iran", NorthDST(3.5f,"UTC+3:30", 4.5f, "UTC+4:30", true, "Іран використовує UTC+3:30, влітку переходить на UTC+4:30.", "Іран") },
{ "Iraq", NoDST(3f, "UTC+3", false, "", "Ірак") },
{ "Ireland", NorthDST(0f, "UTC+0", 1f, "UTC+1", false, "", "Ірландія") },
{ "Isle of Man", NorthDST(0f, "UTC+0", 1f, "UTC+1", false, "", "Острів Мен") },
{ "Israel", NorthDST(2f, "UTC+2", 3f, "UTC+3", false, "", "Ізраїль") },
{ "Italy", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Італія") },
{ "Ivory Coast", NoDST(0f, "UTC+0", false, "", "Кот-д'Івуар") },
{ "Jamaica", NoDST(-5f, "UTC-5", false, "", "Ямайка") },
{ "Japan", NoDST(9f, "UTC+9", false, "", "Японія") },
{ "Jersey", NorthDST(0f, "UTC+0", 1f, "UTC+1", false, "", "Джерсі") },
{ "Jordan", NorthDST(2f, "UTC+2", 3f, "UTC+3", false, "", "Йорданія") },
{ "Kazakhstan", NoDST(6f, "UTC+6", false, "", "Казахстан") },
{ "Kenya", NoDST(3f, "UTC+3", false, "", "Кенія") },
{ "Kiribati", NoDST(14f, "UTC+14", true, "Кірібаті у 1995 зсунув острови з UTC-12 на UTC+14 щоб жити в одному дні з сусідами.", "Кірібаті") },
{ "Kosovo", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Косово") },
{ "Kuwait", NoDST(3f, "UTC+3", false, "", "Кувейт") },
{ "Kyrgyzstan", NoDST(6f, "UTC+6", false, "", "Киргизстан") },
{ "Laos", NoDST(7f, "UTC+7", false, "", "Лаос") },
{ "Latvia", NorthDST(2f, "UTC+2", 3f, "UTC+3", false, "", "Латвія") },
{ "Lebanon", NorthDST(2f, "UTC+2", 3f, "UTC+3", false, "", "Ліван") },
{ "Lesotho", NoDST(2f, "UTC+2", false, "", "Лесото") },
{ "Liberia", NoDST(0f, "UTC+0", false, "", "Ліберія") },
{ "Libya", NoDST(2f, "UTC+2", false, "", "Лівія") },
{ "Liechtenstein", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Ліхтенштейн") },
{ "Lithuania", NorthDST(2f, "UTC+2", 3f, "UTC+3", false, "", "Литва") },
{ "Luxembourg", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Люксембург") },
{ "Macao SAR", NoDST(8f, "UTC+8", false, "", "Макао") },
{ "Madagascar", NoDST(3f, "UTC+3", false, "", "Мадагаскар") },
{ "Malawi", NoDST(2f, "UTC+2", false, "", "Малаві") },
{ "Malaysia", NoDST(8f, "UTC+8", false, "", "Малайзія") },
{ "Maldives", NoDST(5f, "UTC+5", false, "", "Мальдіви") },
{ "Mali", NoDST(0f, "UTC+0", false, "", "Малі") },
{ "Malta", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Мальта") },
{ "Marshall Islands", NoDST(12f, "UTC+12", false, "", "Маршаллові острови") },
{ "Mauritania", NoDST(0f, "UTC+0", false, "", "Мавританія") },
{ "Mauritius", NoDST(4f, "UTC+4", false, "", "Маврикій") },
{ "Mexico", NorthDST(-6f, "UTC-6", -5f, "UTC-5", false, "", "Мексика") },
{ "Moldova", NorthDST(2f, "UTC+2", 3f, "UTC+3", false, "", "Молдова") },
{ "Monaco", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Монако") },
{ "Mongolia", NoDST(8f, "UTC+8", false, "", "Монголія") },
{ "Montenegro", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Чорногорія") },
{ "Montserrat", NoDST(-4f, "UTC-4", false, "", "Монтсеррат") },
{ "Morocco", NoDST(1f, "UTC+1", false, "", "Марокко") },
{ "Mozambique", NoDST(2f, "UTC+2", false, "", "Мозамбік") },
{ "Myanmar", NoDST(6.5f, "UTC+6:30", true, "М'янма використовує нестандартне зміщення UTC+6:30.", "М'янма") },
{ "Namibia", NoDST(2f, "UTC+2", false, "", "Намібія") },
{ "Nauru", NoDST(12f, "UTC+12", false, "", "Науру") },
{ "Nepal", NoDST(5.75f, "UTC+5:45", true, "Непал використовує UTC+5:45 - зміщення на 45 хвилин, щоб відрізнятися від Індії.", "Непал") },
{ "Netherlands", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Нідерланди") },
{ "New Caledonia", NoDST(11f, "UTC+11", false, "", "Нова Каледонія") },
{ "New Zealand", SouthDST(12f, "UTC+12", 13f, "UTC+13", false, "", "Нова Зеландія") },
{ "Nicaragua", NoDST(-6f, "UTC-6", false, "", "Нікарагуа") },
{ "Niger", NoDST(1f, "UTC+1", false, "", "Нігер") },
{ "Nigeria", NoDST(1f, "UTC+1", false, "", "Нігерія") },
{ "Niue", NoDST(-11f, "UTC-11", false, "", "Ніуе") },
{ "Norfolk Island", SouthDST(11f, "UTC+11", 12f, "UTC+12", false, "", "Острів Норфолк") },
{ "North Korea", NoDST(9f, "UTC+9", false, "", "Північна Корея") },
{ "North Macedonia", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Північна Македонія") },
{ "Northern Cyprus", NorthDST(2f, "UTC+2", 3f, "UTC+3", false, "", "Північний Кіпр") },
{ "Northern Mariana Islands", NoDST(10f, "UTC+10", false, "", "Північні Маріанські острови") },
{ "Norway", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Норвегія") },
{ "Oman", NoDST(4f, "UTC+4", false, "", "Оман") },
{ "Pakistan", NoDST(5f, "UTC+5", false, "", "Пакистан") },
{ "Palau", NoDST(9f, "UTC+9", false, "", "Палау") },
{ "Palestine", NorthDST(2f, "UTC+2", 3f, "UTC+3", false, "", "Палестина") },
{ "Panama", NoDST(-5f, "UTC-5", false, "", "Панама") },
{ "Papua New Guinea", NoDST(10f, "UTC+10", false, "", "Папуа Нова Гвінея") },
{ "Paraguay", SouthDST(-4f, "UTC-4", -3f, "UTC-3", false, "", "Парагвай") },
{ "Peru", NoDST(-5f, "UTC-5", false, "", "Перу") },
{ "Philippines", NoDST(8f, "UTC+8", false, "", "Філіппіни") },
{ "Pitcairn Islands", NoDST(-8f, "UTC-8", false, "", "Острови Піткерн") },
{ "Poland", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Польща") },
{ "Portugal", NorthDST(0f, "UTC+0", 1f, "UTC+1", false, "", "Португалія") },
{ "Puerto Rico", NoDST(-4f, "UTC-4", false, "", "Пуерто-Ріко") },
{ "Qatar", NoDST(3f, "UTC+3", false, "", "Катар") },
{ "Republic of Serbia", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Сербія") },
{ "Republic of the Congo", NoDST(1f, "UTC+1", false, "", "Республіка Конго") },
{ "Romania", NorthDST(2f, "UTC+2", 3f, "UTC+3", false, "", "Румунія") },
{ "Russia", NoDST(3f, "UTC+3", true, "Росія охоплює 11 часових поясів - від UTC+2 до UTC+12.", "Росія") },
{ "Rwanda", NoDST(2f, "UTC+2", false, "", "Руанда") },
{ "Saint Barthelemy", NoDST(-4f, "UTC-4", false, "", "Сен-Бартелемі") },
{ "Saint Helena", NoDST(0f, "UTC+0", false, "", "Острів Святої Єлени") },
{ "Saint Kitts and Nevis", NoDST(-4f, "UTC-4", false, "", "Сент-Кітс і Невіс") },
{ "Saint Lucia", NoDST(-4f, "UTC-4", false, "", "Сент-Люсія") },
{ "Saint Martin", NoDST(-4f, "UTC-4", false, "", "Сен-Мартен") },
{ "Saint Pierre and Miquelon", NorthDST(-3f, "UTC-3", -2f, "UTC-2", false, "", "Сен-П'єр і Мікелон") },
{ "Saint Vincent and the Grenadines", NoDST(-4f, "UTC-4", false, "", "Сент-Вінсент і Гренадини") },
{ "Samoa", NoDST(13f, "UTC+13", false, "", "Самоа") },
{ "San Marino", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Сан-Маріно") },
{ "Sao Tome and Principe", NoDST(0f, "UTC+0", false, "", "Сан-Томе і Принсіпі") },
{ "Saudi Arabia", NoDST(3f, "UTC+3", false, "", "Саудівська Аравія") },
{ "Scarborough Reef", NoDST(8f, "UTC+8", false, "", "Риф Скарборо") },
{ "Senegal", NoDST(0f, "UTC+0", false, "", "Сенегал") },
{ "Serbia", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Сербія") },
{ "Serranilla Bank", NoDST(-5f, "UTC-5", false, "", "Банк Серранілья") },
{ "Seychelles", NoDST(4f, "UTC+4", false, "", "Сейшели") },
{ "Siachen Glacier", NoDST(5f, "UTC+5", false, "", "Льодовик Сіачен") },
{ "Sierra Leone", NoDST(0f, "UTC+0", false, "", "Сьєрра-Леоне") },
{ "Singapore", NoDST(8f, "UTC+8", false, "", "Сінгапур") },
{ "Sint Maarten", NoDST(-4f, "UTC-4", false, "", "Сінт-Мартен") },
{ "Slovakia", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Словаччина") },
{ "Slovenia", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Словенія") },
{ "Solomon Islands", NoDST(11f, "UTC+11", false, "", "Соломонові острови") },
{ "Somalia", NoDST(3f, "UTC+3", false, "", "Сомалі") },
{ "Somaliland", NoDST(3f, "UTC+3", false, "", "Сомаліленд") },
{ "South Africa", NoDST(2f, "UTC+2", false, "", "Південна Африка") },
{ "South Georgia and the Islands", NoDST(-2f, "UTC-2", false, "", "Південна Джорджія") },
{ "South Korea", NoDST(9f, "UTC+9", false, "", "Південна Корея") },
{ "South Sudan", NoDST(3f, "UTC+3", false, "", "Південний Судан") },
{ "Southern Patagonian Ice Field", NoDST(-3f, "UTC-3", false, "", "Патагонський льодовик") },
{ "Spain", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Іспанія") },
{ "Spratly Islands", NoDST(8f, "UTC+8", false, "", "Острови Спратлі") },
{ "Sri Lanka", NoDST(5.5f, "UTC+5:30", false, "", "Шрі-Ланка") },
{ "Sudan", NoDST(3f, "UTC+3", false, "", "Судан") },
{ "Suriname", NoDST(-3f, "UTC-3", false, "", "Суринам") },
{ "Sweden", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Швеція") },
{ "Switzerland", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Швейцарія") },
{ "Syria", NorthDST(2f, "UTC+2", 3f, "UTC+3", false, "", "Сирія") },
{ "Taiwan", NoDST(8f, "UTC+8", false, "", "Тайвань") },
{ "Tajikistan", NoDST(5f, "UTC+5", false, "", "Таджикистан") },
{ "Thailand", NoDST(7f, "UTC+7", false, "", "Таїланд") },
{ "The Bahamas", NorthDST(-5f, "UTC-5", -4f, "UTC-4", false, "", "Багамські острови") },
{ "Togo", NoDST(0f, "UTC+0", false, "", "Того") },
{ "Tonga", NoDST(13f, "UTC+13", false, "", "Тонга") },
{ "Trinidad and Tobago", NoDST(-4f, "UTC-4", false, "", "Тринідад і Тобаго") },
{ "Tunisia", NoDST(1f, "UTC+1", false, "", "Туніс") },
{ "Turkey", NoDST(3f, "UTC+3", false, "", "Туреччина") },
{ "Turkmenistan", NoDST(5f, "UTC+5", false, "", "Туркменістан") },
{ "Turks and Caicos Islands", NorthDST(-5f, "UTC-5", -4f, "UTC-4", false, "", "Острови Теркс і Кайкос") },
{ "Tuvalu", NoDST(12f, "UTC+12", false, "", "Тувалу") },
{ "Uganda", NoDST(3f, "UTC+3", false, "", "Уганда") },
{ "Ukraine", NorthDST(2f, "UTC+2", 3f, "UTC+3", false, "", "Україна") },
{ "United Arab Emirates", NoDST(4f, "UTC+4", false, "", "ОАЕ") },
{ "United Kingdom", NorthDST(0f, "UTC+0", 1f, "UTC+1", false, "", "Велика Британія") },
{ "United Republic of Tanzania", NoDST(3f, "UTC+3", false, "", "Танзанія") },
{ "United States Minor Outlying Islands", NoDST(-12f, "UTC-12", false, "", "Малі віддалені острови США") },
{ "United States of America", NorthDST(-5f, "UTC-5", -4f, "UTC-4", false, "", "США") },
{ "United States Virgin Islands", NoDST(-4f, "UTC-4", false, "", "Американські Віргінські острови") },
{ "Uruguay", NoDST(-3f, "UTC-3", false, "", "Уругвай") },
{ "US Naval Base Guantanamo Bay", NoDST(-5f, "UTC-5", false, "", "Гуантанамо") },
{ "Uzbekistan", NoDST(5f, "UTC+5", false, "", "Узбекистан") },
{ "Vanuatu", NoDST(11f, "UTC+11", false, "", "Вануату") },
{ "Vatican", NorthDST(1f, "UTC+1", 2f, "UTC+2", false, "", "Ватикан") },
{ "Venezuela", NoDST(-4f, "UTC-4", true, "Венесуела у 2007 перейшла на UTC-4:30 за наказом Чавеса, у 2016 повернулась на UTC-4.", "Венесуела") },
{ "Vietnam", NoDST(7f, "UTC+7", false, "", "В'єтнам") },
{ "Wallis and Futuna", NoDST(12f, "UTC+12", false, "", "Уолліс і Футуна") },
{ "Western Sahara", NoDST(1f, "UTC+1", false, "", "Західна Сахара") },
{ "Yemen", NoDST(3f, "UTC+3", false, "", "Ємен") },
{ "Zambia", NoDST(2f, "UTC+2", false, "", "Замбія") },
{ "Zimbabwe", NoDST(2f, "UTC+2", false, "", "Зімбабве") },
};
[MenuItem("Tools/Globe Assembler")]
public static void ShowWindow()
{
GetWindow<GlobeAssembler>("Globe Assembler");
}
void OnGUI()
{
GUILayout.Label("Об'єкт Globe у сцені:");
globeObject = (GameObject)EditorGUILayout.ObjectField(globeObject, typeof(GameObject), true);
GUILayout.Space(10);
if (GUILayout.Button("Додати CountryData + UTC всім країнам", GUILayout.Height(40)))
AddCountryData();
}
void AddCountryData()
{
if (globeObject == null)
{
EditorUtility.DisplayDialog("Помилка", "Вибери об'єкт Globe!", "OK");
return;
}
int count = 0;
int found = 0;
int skipped = 0;
foreach (Transform child in globeObject.transform)
{
if (child.gameObject.name == "Ocean") { skipped++; continue; }
CountryData cd = child.GetComponent<CountryData>();
if (cd == null) cd = child.gameObject.AddComponent<CountryData>();
string rawName = child.gameObject.name.Replace("_", " ").Trim();
cd.countryName = rawName;
if (DATA.TryGetValue(rawName, out CountryEntry entry))
{
int month = System.DateTime.Now.Month;
bool isDST = false;
if (entry.dstStartMonth != 0)
{
if (entry.dstStartMonth > entry.dstEndMonth)
isDST = (month >= entry.dstStartMonth || month <= entry.dstEndMonth);
else
isDST = (month >= entry.dstStartMonth && month <= entry.dstEndMonth);
}
cd.utcOffset = isDST ? entry.dstOffset : entry.baseOffset;
cd.utcLabel = isDST ? entry.dstLabel : entry.baseLabel;
cd.hasAnomaly = entry.anomaly;
cd.anomalyFact = entry.fact;
cd.countryNameUkr = entry.nameUkr;
cd.baseUtcOffset = entry.baseOffset;
cd.baseUtcLabel = entry.baseLabel;
cd.dstUtcOffset = entry.dstOffset;
cd.dstUtcLabel = entry.dstLabel;
cd.dstStartMonth = entry.dstStartMonth;
cd.dstEndMonth = entry.dstEndMonth;
found++;
}
else
{
cd.utcOffset = 0f;
cd.utcLabel = "UTC+0";
cd.countryNameUkr = rawName;
cd.baseUtcOffset = 0f;
cd.baseUtcLabel = "UTC+0";
cd.dstUtcOffset = 0f;
cd.dstUtcLabel = "UTC+0";
cd.dstStartMonth = 0;
cd.dstEndMonth = 0;
}
count++;
}
UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty(
UnityEngine.SceneManagement.SceneManager.GetActiveScene());
EditorUtility.DisplayDialog("Готово!",
$"Оброблено: {count}\nЗнайдено UTC: {found}\nБез UTC: {count - found}\nПропущено (Ocean): {skipped}", "OK");
}
}