├── KnownIssues.rtf ├── LICENSE ├── Netrek2.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── xcuserdata │ └── droot.xcuserdatad │ ├── xcdebugger │ └── Breakpoints_v2.xcbkptlist │ └── xcschemes │ └── xcschememanagement.plist ├── NetrekIPad ├── Base.lproj │ └── LaunchScreen.storyboard ├── Controllers │ └── AudioController.swift ├── Extensions │ ├── Notification+keyboardHeight.swift │ └── Publishers+keyboardHeight.swift ├── Global Group │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── netrek-icon-1024-beta.png │ │ │ ├── netrek-icon-120.png │ │ │ ├── netrek-icon-121.png │ │ │ ├── netrek-icon-152.png │ │ │ ├── netrek-icon-167.png │ │ │ ├── netrek-icon-180.png │ │ │ ├── netrek-icon-20.png │ │ │ ├── netrek-icon-29.png │ │ │ ├── netrek-icon-40.png │ │ │ ├── netrek-icon-41.png │ │ │ ├── netrek-icon-42.png │ │ │ ├── netrek-icon-58.png │ │ │ ├── netrek-icon-59.png │ │ │ ├── netrek-icon-60.png │ │ │ ├── netrek-icon-76.png │ │ │ ├── netrek-icon-80.png │ │ │ ├── netrek-icon-81.png │ │ │ └── netrek-icon-87.png │ │ ├── Contents.json │ │ ├── Particle Sprite Atlas.spriteatlas │ │ │ └── Contents.json │ │ ├── kli-as.imageset │ │ │ ├── Contents.json │ │ │ └── kli-as.png │ │ ├── kli-bb.imageset │ │ │ ├── Contents.json │ │ │ └── kli-bb.png │ │ ├── kli-ca.imageset │ │ │ ├── Contents.json │ │ │ └── kli-ca.png │ │ ├── kli-dd.imageset │ │ │ ├── Contents.json │ │ │ └── kli-dd.png │ │ ├── kli-sb.imageset │ │ │ ├── Contents.json │ │ │ └── kli-sb.png │ │ ├── kli-sc.imageset │ │ │ ├── Contents.json │ │ │ └── kli-sc.png │ │ ├── mactrek-outlinefleet-as.imageset │ │ │ ├── Contents.json │ │ │ └── mactrek-outlinefleet-as.png │ │ ├── mactrek-outlinefleet-bb.imageset │ │ │ ├── Contents.json │ │ │ └── mactrek-outlinefleet-bb.png │ │ ├── mactrek-outlinefleet-ca.imageset │ │ │ ├── Contents.json │ │ │ └── mactrek-outlinefleet-ca.png │ │ ├── mactrek-outlinefleet-dd.imageset │ │ │ ├── Contents.json │ │ │ └── mactrek-outlinefleet-dd.png │ │ ├── mactrek-outlinefleet-sb.imageset │ │ │ ├── Contents.json │ │ │ └── mactrek-outlinefleet-sb.png │ │ ├── mactrek-outlinefleet-sc.imageset │ │ │ ├── Contents.json │ │ │ └── mactrek-outlinefleet-sc.png │ │ ├── mactrek-redfleet-as.imageset │ │ │ ├── Contents.json │ │ │ └── mactrek-redfleet-as.png │ │ ├── mactrek-redfleet-bb.imageset │ │ │ ├── Contents.json │ │ │ └── mactrek-redfleet-bb.png │ │ ├── mactrek-redfleet-ca.imageset │ │ │ ├── Contents.json │ │ │ └── mactrek-redfleet-ca.png │ │ ├── mactrek-redfleet-dd.imageset │ │ │ ├── Contents.json │ │ │ └── mactrek-redfleet-dd.png │ │ ├── mactrek-redfleet-sb.imageset │ │ │ ├── Contents.json │ │ │ └── mactrek-redfleet-sb.png │ │ ├── mactrek-redfleet-sc.imageset │ │ │ ├── Contents.json │ │ │ └── mactrek-redfleet-sc.png │ │ ├── ori-as.imageset │ │ │ ├── Contents.json │ │ │ └── ori-as.png │ │ ├── ori-bb.imageset │ │ │ ├── Contents.json │ │ │ └── ori-bb.png │ │ ├── ori-ca.imageset │ │ │ ├── Contents.json │ │ │ └── ori-ca.png │ │ ├── ori-dd.imageset │ │ │ ├── Contents.json │ │ │ └── ori-dd.png │ │ ├── ori-sb.imageset │ │ │ ├── Contents.json │ │ │ └── ori-sb.png │ │ ├── ori-sc.imageset │ │ │ ├── Contents.json │ │ │ └── ori-sc.png │ │ ├── planet-army.imageset │ │ │ ├── Contents.json │ │ │ └── planet-army.png │ │ ├── planet-empty.imageset │ │ │ ├── Contents.json │ │ │ └── planet-empty.png │ │ ├── planet-fuel-army.imageset │ │ │ ├── Contents.json │ │ │ └── planet-fuel-army.png │ │ ├── planet-fuel.imageset │ │ │ ├── Contents.json │ │ │ └── planet-fuel.png │ │ ├── planet-repair-army.imageset │ │ │ ├── Contents.json │ │ │ └── planet-repair-army.png │ │ ├── planet-repair-fuel-army.imageset │ │ │ ├── Contents.json │ │ │ └── planet-repair-fuel-army.png │ │ ├── planet-repair-fuel.imageset │ │ │ ├── Contents.json │ │ │ └── planet-repair-fuel.png │ │ ├── planet-repair.imageset │ │ │ ├── Contents.json │ │ │ └── planet-repair.png │ │ ├── planet-unknown.imageset │ │ │ ├── Contents.json │ │ │ └── planet-unknown.png │ │ ├── rom-as.imageset │ │ │ ├── Contents.json │ │ │ └── rom-as.png │ │ ├── rom-bb.imageset │ │ │ ├── Contents.json │ │ │ └── rom-bb.png │ │ ├── rom-ca.imageset │ │ │ ├── Contents.json │ │ │ └── rom-ca.png │ │ ├── rom-dd.imageset │ │ │ ├── Contents.json │ │ │ └── rom-dd.png │ │ ├── rom-sb.imageset │ │ │ ├── Contents.json │ │ │ └── rom-sb.png │ │ └── rom-sc.imageset │ │ │ ├── Contents.json │ │ │ └── rom-sc.png │ └── SceneDelegate.swift ├── Info.plist ├── Model │ └── EligibleTeams.swift ├── Preview Content │ └── Preview Assets.xcassets │ │ └── Contents.json └── Views │ ├── ContentView.swift │ ├── CreditsView.swift │ ├── HowToPlayView.swift │ ├── IosPlanetStrategicView.swift │ ├── IosPlayerStrategicView.swift │ ├── LeftTacticalControlView.swift │ ├── MessagesView.swift │ ├── PickServerView.swift │ ├── SelectTeamView.swift │ ├── ServerConnectedView.swift │ ├── ServerSelectedView.swift │ ├── ServerSlotView.swift │ ├── TacticalHudView.swift │ ├── TacticalView.swift │ └── TeamListView.swift ├── NetrekMacOS ├── Controllers │ ├── KeychainService.swift │ ├── KeymapController.swift │ ├── LoginInformationController.swift │ └── PreferencesController.swift ├── Global Group │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── netrek-icon-1024.png │ │ │ ├── netrek-icon-128.png │ │ │ ├── netrek-icon-16.png │ │ │ ├── netrek-icon-256.png │ │ │ ├── netrek-icon-257.png │ │ │ ├── netrek-icon-32.png │ │ │ ├── netrek-icon-33.png │ │ │ ├── netrek-icon-512.png │ │ │ ├── netrek-icon-513.png │ │ │ └── netrek-icon-64.png │ │ ├── Contents.json │ │ ├── Particle Sprite Atlas.spriteatlas │ │ │ └── Contents.json │ │ ├── kli-as.imageset │ │ │ ├── Contents.json │ │ │ └── kli-as.png │ │ ├── kli-bb.imageset │ │ │ ├── Contents.json │ │ │ └── kli-bb.png │ │ ├── kli-ca.imageset │ │ │ ├── Contents.json │ │ │ └── kli-ca.png │ │ ├── kli-dd.imageset │ │ │ ├── Contents.json │ │ │ └── kli-dd.png │ │ ├── kli-sb.imageset │ │ │ ├── Contents.json │ │ │ └── kli-sb.png │ │ ├── kli-sc.imageset │ │ │ ├── Contents.json │ │ │ └── kli-sc.png │ │ ├── mactrek-outlinefleet-as.imageset │ │ │ ├── Contents.json │ │ │ └── mactrek-outlinefleet-as.png │ │ ├── mactrek-outlinefleet-bb.imageset │ │ │ ├── Contents.json │ │ │ └── mactrek-outlinefleet-bb.png │ │ ├── mactrek-outlinefleet-ca.imageset │ │ │ ├── Contents.json │ │ │ └── mactrek-outlinefleet-ca.png │ │ ├── mactrek-outlinefleet-dd.imageset │ │ │ ├── Contents.json │ │ │ └── mactrek-outlinefleet-dd.png │ │ ├── mactrek-outlinefleet-sb.imageset │ │ │ ├── Contents.json │ │ │ └── mactrek-outlinefleet-sb.png │ │ ├── mactrek-outlinefleet-sc.imageset │ │ │ ├── Contents.json │ │ │ └── mactrek-outlinefleet-sc.png │ │ ├── mactrek-redfleet-as.imageset │ │ │ ├── Contents.json │ │ │ └── mactrek-redfleet-as.png │ │ ├── mactrek-redfleet-bb.imageset │ │ │ ├── Contents.json │ │ │ └── mactrek-redfleet-bb.png │ │ ├── mactrek-redfleet-ca.imageset │ │ │ ├── Contents.json │ │ │ └── mactrek-redfleet-ca.png │ │ ├── mactrek-redfleet-dd.imageset │ │ │ ├── Contents.json │ │ │ └── mactrek-redfleet-dd.png │ │ ├── mactrek-redfleet-sb.imageset │ │ │ ├── Contents.json │ │ │ └── mactrek-redfleet-sb.png │ │ ├── mactrek-redfleet-sc.imageset │ │ │ ├── Contents.json │ │ │ └── mactrek-redfleet-sc.png │ │ ├── ori-as.imageset │ │ │ ├── Contents.json │ │ │ └── ori-as.png │ │ ├── ori-bb.imageset │ │ │ ├── Contents.json │ │ │ └── ori-bb.png │ │ ├── ori-ca.imageset │ │ │ ├── Contents.json │ │ │ └── ori-ca.png │ │ ├── ori-dd.imageset │ │ │ ├── Contents.json │ │ │ └── ori-dd.png │ │ ├── ori-sb.imageset │ │ │ ├── Contents.json │ │ │ └── ori-sb.png │ │ ├── ori-sc.imageset │ │ │ ├── Contents.json │ │ │ └── ori-sc.png │ │ ├── planet-army.imageset │ │ │ ├── Contents.json │ │ │ └── planet-army.png │ │ ├── planet-empty.imageset │ │ │ ├── Contents.json │ │ │ └── planet-empty.png │ │ ├── planet-fuel-army.imageset │ │ │ ├── Contents.json │ │ │ └── planet-fuel-army.png │ │ ├── planet-fuel.imageset │ │ │ ├── Contents.json │ │ │ └── planet-fuel.png │ │ ├── planet-repair-army.imageset │ │ │ ├── Contents.json │ │ │ └── planet-repair-army.png │ │ ├── planet-repair-fuel-army.imageset │ │ │ ├── Contents.json │ │ │ └── planet-repair-fuel-army.png │ │ ├── planet-repair-fuel.imageset │ │ │ ├── Contents.json │ │ │ └── planet-repair-fuel.png │ │ ├── planet-repair.imageset │ │ │ ├── Contents.json │ │ │ └── planet-repair.png │ │ ├── planet-unknown.imageset │ │ │ ├── Contents.json │ │ │ └── planet-unknown.png │ │ ├── rom-as.imageset │ │ │ ├── Contents.json │ │ │ └── rom-as.png │ │ ├── rom-bb.imageset │ │ │ ├── Contents.json │ │ │ └── rom-bb.png │ │ ├── rom-ca.imageset │ │ │ ├── Contents.json │ │ │ └── rom-ca.png │ │ ├── rom-dd.imageset │ │ │ ├── Contents.json │ │ │ └── rom-dd.png │ │ ├── rom-sb.imageset │ │ │ ├── Contents.json │ │ │ └── rom-sb.png │ │ └── rom-sc.imageset │ │ │ ├── Contents.json │ │ │ └── rom-sc.png │ └── Base.lproj │ │ └── Main.storyboard ├── Info.plist ├── Netrek2.entitlements ├── Preview Content │ └── Preview Assets.xcassets │ │ └── Contents.json ├── Resources │ └── Netrek.help │ │ └── Contents │ │ ├── Info.plist │ │ └── Resources │ │ ├── css │ │ ├── dynamic.css │ │ └── pthstyle.css │ │ ├── en-US.lproj │ │ ├── InfoPlist.strings │ │ ├── Page0.html │ │ ├── Page10.html │ │ ├── Page11.html │ │ ├── Page12.html │ │ ├── Page14.html │ │ ├── Page15.html │ │ ├── Page16.html │ │ ├── Page17.html │ │ ├── Page18.html │ │ ├── Page19.html │ │ ├── Page2.html │ │ ├── Page3.html │ │ ├── Page4.html │ │ ├── Page5.html │ │ ├── Page6.html │ │ ├── Page7.html │ │ ├── Page8.html │ │ ├── help.helpindex │ │ └── index.html │ │ ├── images │ │ ├── Images │ │ ├── empty-planet.png │ │ ├── fuel-repair-planet.png │ │ ├── manual-server-entry.png │ │ ├── manually-choose-server.png │ │ ├── orbiting-planet-with-armies.png │ │ ├── select-cruiser.png │ │ ├── select-server.png │ │ ├── strategic-map.png │ │ ├── tactical-map.png │ │ └── unknown-or-indi-planet.png │ │ ├── jquery-theme │ │ └── images │ │ │ ├── ui-bg_flat_0_aaaaaa_40x100.png │ │ │ ├── ui-bg_flat_75_ffffff_40x100.png │ │ │ ├── ui-bg_glass_55_fbf9ee_1x400.png │ │ │ ├── ui-bg_glass_65_ffffff_1x400.png │ │ │ ├── ui-bg_glass_75_dadada_1x400.png │ │ │ ├── ui-bg_glass_75_e6e6e6_1x400.png │ │ │ ├── ui-bg_glass_95_fef1ec_1x400.png │ │ │ ├── ui-bg_highlight-soft_75_cccccc_1x100.png │ │ │ ├── ui-icons_222222_256x240.png │ │ │ ├── ui-icons_2e83ff_256x240.png │ │ │ ├── ui-icons_454545_256x240.png │ │ │ ├── ui-icons_888888_256x240.png │ │ │ └── ui-icons_cd0a0a_256x240.png │ │ ├── js │ │ ├── jquery-1.11.1.min.js │ │ ├── jquery-ui.min.js │ │ ├── jquery.fancytree-all.min.js │ │ ├── nav.js │ │ ├── skin-lion │ │ │ ├── icons.gif │ │ │ ├── loading.gif │ │ │ ├── ui.fancytree.css │ │ │ └── ui.fancytree.min.css │ │ └── topicpage.js │ │ └── txt │ │ ├── fancytree-LICENSE.txt │ │ ├── jquery-LICENSE.txt │ │ └── jquery-ui-LICENSE.txt └── Views │ ├── CommunicationsView.swift │ ├── DetailedStatisticsView.swift │ ├── EverythingView.swift │ ├── ManualServerView.swift │ ├── MessagesView.swift │ ├── NSCommandedWindow.swift │ ├── PlanetStrategicView.swift │ ├── PlayerStrategicView.swift │ ├── PointingView.swift │ ├── PreferencesView.swift │ ├── StatisticsView.swift │ ├── StrategicOffset.swift │ ├── StrategicView.swift │ └── TacticalView.swift ├── PRIVACY ├── README ├── SUPPORT └── Shared ├── Communication ├── MakePacket.swift ├── MessagesController.swift ├── MetaServer.swift ├── MetaServerEntry.swift ├── PacketAnalyzer.swift ├── TcpReader.swift └── packets.swift ├── Enumerations ├── AlertCondition.swift ├── Data-extensions.swift ├── GameScreen.swift ├── GameState.swift ├── LoginDefault.swift ├── PlayerStatus.swift ├── Rank.swift ├── ShipType.swift ├── SlotStatus.swift ├── Team.swift └── Zposition.swift ├── Extensions ├── Collection-extensions.swift └── UserDefaults-extensions.swift ├── Global └── Globals.swift ├── Model ├── Help.swift ├── Laser.swift ├── NetrekMath.swift ├── Planet.swift ├── Plasma.swift ├── Player.swift ├── ShipInfo.swift ├── Torpedo.swift ├── Universe.swift └── UpdateCounter.swift ├── Protocols └── NetworkDelegate.swift ├── Sounds ├── 175262__jonccox__gun-cannon.wav ├── 175265__jonccox__gun-thumper.wav ├── 175266__jonccox__gun-spark.wav ├── 175267__jonccox__gun-plasma.wav ├── 175269__jonccox__gun-zap2.wav ├── 175270__jonccox__gun-zap.wav ├── 399303__deleted-user-5405837__explosion-012.mp3 ├── 71852__ludvique__digital-whoosh-soft.wav └── SoundController.swift └── Views ├── BoundaryView.swift ├── DetonationPlasmaView.swift ├── DetonationView.swift ├── ExplosionView.swift ├── HelpView.swift ├── LaserView.swift ├── LoginView.swift ├── PlanetView.swift ├── PlasmaView.swift ├── PlayerView.swift ├── TacticalOffset.swift ├── TorpedoView.swift └── TractorView.swift /KnownIssues.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\ansicpg1252\cocoartf2513 2 | \cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Helvetica;} 3 | {\colortbl;\red255\green255\blue255;} 4 | {\*\expandedcolortbl;;} 5 | \margl1440\margr1440\vieww9000\viewh8400\viewkind0 6 | \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0 7 | 8 | \f0\fs24 \cf0 Known issues\ 9 | \ 10 | iPad version:\ 11 | \ 12 | Cannot laser cloaked ships\ 13 | Does not support playing starbase (probably a good thing)\ 14 | Cannot lock onto starbases\ 15 | no tractor/pressor beams\ 16 | No galactic information\ 17 | Setting speed and course is error prone\ 18 | \ 19 | \ 20 | MacOS version\ 21 | \ 22 | A bunch of refactoring for the iPad version will need to be corrected with a MacOS rebuild\ 23 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Darrell Root 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Netrek2.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Netrek2.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Netrek2.xcodeproj/xcuserdata/droot.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /Netrek2.xcodeproj/xcuserdata/droot.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Netrek.xcscheme_^#shared#^_ 8 | 9 | orderHint 10 | 1 11 | 12 | Netrek2.xcscheme_^#shared#^_ 13 | 14 | orderHint 15 | 0 16 | 17 | NetrekIPad.xcscheme_^#shared#^_ 18 | 19 | orderHint 20 | 0 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /NetrekIPad/Controllers/AudioController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AudioController.swift 3 | // NetrekIPad 4 | // 5 | // Created by Darrell Root on 6/8/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import Speech 11 | 12 | class AudioController: NSObject, SFSpeechRecognizerDelegate { 13 | let speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "en-US"))! 14 | private var recognitionRequest: SFSpeechAudioBufferRecognitionRequest? 15 | private var recognitionTask: SFSpeechRecognitionTask? 16 | 17 | private let audioEngine = AVAudioEngine() 18 | 19 | init?(keymapController: KeymapController) { 20 | super.init() 21 | debugPrint("activating speech controller") 22 | speechRecognizer.delegate = self 23 | 24 | let audioSession = AVAudioSession.sharedInstance() 25 | do { 26 | try audioSession.setCategory(.record, mode: .measurement, options: .duckOthers) 27 | try audioSession.setActive(true, options: .notifyOthersOnDeactivation) 28 | } catch { 29 | debugPrint("audio session setup failed") 30 | return nil 31 | } 32 | let inputNode = audioEngine.inputNode 33 | recognitionRequest = SFSpeechAudioBufferRecognitionRequest() 34 | guard let recognitionRequest = recognitionRequest else { 35 | debugPrint("Unable to create a SFSpeechAudioBufferRecognitionRequest object") 36 | return nil 37 | } 38 | recognitionRequest.shouldReportPartialResults = true 39 | recognitionRequest.requiresOnDeviceRecognition = true 40 | recognitionTask = speechRecognizer.recognitionTask(with: recognitionRequest) { result, error in 41 | var isFinal = false 42 | if let result = result { 43 | isFinal = result.isFinal 44 | debugPrint("speech recorded \(result.bestTranscription.formattedString)") 45 | } 46 | if error != nil || isFinal { 47 | self.audioEngine.stop() 48 | inputNode.removeTap(onBus: 0) 49 | self.recognitionRequest = nil 50 | self.recognitionTask = nil 51 | } 52 | } 53 | } 54 | } 55 | 56 | -------------------------------------------------------------------------------- /NetrekIPad/Extensions/Notification+keyboardHeight.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Notification+keyboardHeight.swift 3 | // NetrekIPad 4 | // 5 | // Created by Darrell Root on 6/10/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import SwiftUI 11 | 12 | extension Notification { 13 | var keyboardHeight: CGFloat { 14 | return (userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect)?.height ?? 0 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /NetrekIPad/Extensions/Publishers+keyboardHeight.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Publishers+keyboardHeight.swift 3 | // NetrekIPad 4 | // 5 | // Created by Darrell Root on 6/10/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | // From https://www.vadimbulavin.com/how-to-move-swiftui-view-when-keyboard-covers-text-field/ 9 | 10 | import Foundation 11 | import Combine 12 | import SwiftUI 13 | 14 | extension Publishers { 15 | static var keyboardHeight: AnyPublisher { 16 | let willShow = NotificationCenter.default.publisher(for: UIApplication.keyboardWillShowNotification) 17 | .map { $0.keyboardHeight } 18 | let willHide = NotificationCenter.default.publisher(for: UIApplication.keyboardWillHideNotification) 19 | .map { _ in CGFloat(0) } 20 | return MergeMany(willShow, willHide) 21 | .eraseToAnyPublisher() 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "netrek-icon-40.png", 5 | "idiom" : "iphone", 6 | "scale" : "2x", 7 | "size" : "20x20" 8 | }, 9 | { 10 | "filename" : "netrek-icon-60.png", 11 | "idiom" : "iphone", 12 | "scale" : "3x", 13 | "size" : "20x20" 14 | }, 15 | { 16 | "filename" : "netrek-icon-58.png", 17 | "idiom" : "iphone", 18 | "scale" : "2x", 19 | "size" : "29x29" 20 | }, 21 | { 22 | "filename" : "netrek-icon-87.png", 23 | "idiom" : "iphone", 24 | "scale" : "3x", 25 | "size" : "29x29" 26 | }, 27 | { 28 | "filename" : "netrek-icon-80.png", 29 | "idiom" : "iphone", 30 | "scale" : "2x", 31 | "size" : "40x40" 32 | }, 33 | { 34 | "filename" : "netrek-icon-120.png", 35 | "idiom" : "iphone", 36 | "scale" : "3x", 37 | "size" : "40x40" 38 | }, 39 | { 40 | "filename" : "netrek-icon-121.png", 41 | "idiom" : "iphone", 42 | "scale" : "2x", 43 | "size" : "60x60" 44 | }, 45 | { 46 | "filename" : "netrek-icon-180.png", 47 | "idiom" : "iphone", 48 | "scale" : "3x", 49 | "size" : "60x60" 50 | }, 51 | { 52 | "filename" : "netrek-icon-20.png", 53 | "idiom" : "ipad", 54 | "scale" : "1x", 55 | "size" : "20x20" 56 | }, 57 | { 58 | "filename" : "netrek-icon-41.png", 59 | "idiom" : "ipad", 60 | "scale" : "2x", 61 | "size" : "20x20" 62 | }, 63 | { 64 | "filename" : "netrek-icon-29.png", 65 | "idiom" : "ipad", 66 | "scale" : "1x", 67 | "size" : "29x29" 68 | }, 69 | { 70 | "filename" : "netrek-icon-59.png", 71 | "idiom" : "ipad", 72 | "scale" : "2x", 73 | "size" : "29x29" 74 | }, 75 | { 76 | "filename" : "netrek-icon-42.png", 77 | "idiom" : "ipad", 78 | "scale" : "1x", 79 | "size" : "40x40" 80 | }, 81 | { 82 | "filename" : "netrek-icon-81.png", 83 | "idiom" : "ipad", 84 | "scale" : "2x", 85 | "size" : "40x40" 86 | }, 87 | { 88 | "filename" : "netrek-icon-76.png", 89 | "idiom" : "ipad", 90 | "scale" : "1x", 91 | "size" : "76x76" 92 | }, 93 | { 94 | "filename" : "netrek-icon-152.png", 95 | "idiom" : "ipad", 96 | "scale" : "2x", 97 | "size" : "76x76" 98 | }, 99 | { 100 | "filename" : "netrek-icon-167.png", 101 | "idiom" : "ipad", 102 | "scale" : "2x", 103 | "size" : "83.5x83.5" 104 | }, 105 | { 106 | "filename" : "netrek-icon-1024-beta.png", 107 | "idiom" : "ios-marketing", 108 | "scale" : "1x", 109 | "size" : "1024x1024" 110 | } 111 | ], 112 | "info" : { 113 | "author" : "xcode", 114 | "version" : 1 115 | } 116 | } 117 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-1024-beta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-1024-beta.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-120.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-121.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-121.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-152.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-167.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-180.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-20.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-29.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-40.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-41.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-42.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-58.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-59.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-60.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-76.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-80.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-81.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-81.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-87.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/Particle Sprite Atlas.spriteatlas/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/kli-as.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "kli-as.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/kli-as.imageset/kli-as.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/kli-as.imageset/kli-as.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/kli-bb.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "kli-bb.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/kli-bb.imageset/kli-bb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/kli-bb.imageset/kli-bb.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/kli-ca.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "kli-ca.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/kli-ca.imageset/kli-ca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/kli-ca.imageset/kli-ca.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/kli-dd.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "kli-dd.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/kli-dd.imageset/kli-dd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/kli-dd.imageset/kli-dd.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/kli-sb.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "kli-sb.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/kli-sb.imageset/kli-sb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/kli-sb.imageset/kli-sb.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/kli-sc.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "kli-sc.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/kli-sc.imageset/kli-sc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/kli-sc.imageset/kli-sc.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/mactrek-outlinefleet-as.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "mactrek-outlinefleet-as.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/mactrek-outlinefleet-as.imageset/mactrek-outlinefleet-as.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/mactrek-outlinefleet-as.imageset/mactrek-outlinefleet-as.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/mactrek-outlinefleet-bb.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "mactrek-outlinefleet-bb.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/mactrek-outlinefleet-bb.imageset/mactrek-outlinefleet-bb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/mactrek-outlinefleet-bb.imageset/mactrek-outlinefleet-bb.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/mactrek-outlinefleet-ca.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "mactrek-outlinefleet-ca.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/mactrek-outlinefleet-ca.imageset/mactrek-outlinefleet-ca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/mactrek-outlinefleet-ca.imageset/mactrek-outlinefleet-ca.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/mactrek-outlinefleet-dd.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "mactrek-outlinefleet-dd.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/mactrek-outlinefleet-dd.imageset/mactrek-outlinefleet-dd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/mactrek-outlinefleet-dd.imageset/mactrek-outlinefleet-dd.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/mactrek-outlinefleet-sb.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "mactrek-outlinefleet-sb.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/mactrek-outlinefleet-sb.imageset/mactrek-outlinefleet-sb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/mactrek-outlinefleet-sb.imageset/mactrek-outlinefleet-sb.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/mactrek-outlinefleet-sc.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "mactrek-outlinefleet-sc.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/mactrek-outlinefleet-sc.imageset/mactrek-outlinefleet-sc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/mactrek-outlinefleet-sc.imageset/mactrek-outlinefleet-sc.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/mactrek-redfleet-as.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "mactrek-redfleet-as.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/mactrek-redfleet-as.imageset/mactrek-redfleet-as.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/mactrek-redfleet-as.imageset/mactrek-redfleet-as.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/mactrek-redfleet-bb.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "mactrek-redfleet-bb.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/mactrek-redfleet-bb.imageset/mactrek-redfleet-bb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/mactrek-redfleet-bb.imageset/mactrek-redfleet-bb.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/mactrek-redfleet-ca.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "mactrek-redfleet-ca.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/mactrek-redfleet-ca.imageset/mactrek-redfleet-ca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/mactrek-redfleet-ca.imageset/mactrek-redfleet-ca.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/mactrek-redfleet-dd.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "mactrek-redfleet-dd.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/mactrek-redfleet-dd.imageset/mactrek-redfleet-dd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/mactrek-redfleet-dd.imageset/mactrek-redfleet-dd.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/mactrek-redfleet-sb.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "mactrek-redfleet-sb.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/mactrek-redfleet-sb.imageset/mactrek-redfleet-sb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/mactrek-redfleet-sb.imageset/mactrek-redfleet-sb.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/mactrek-redfleet-sc.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "mactrek-redfleet-sc.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/mactrek-redfleet-sc.imageset/mactrek-redfleet-sc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/mactrek-redfleet-sc.imageset/mactrek-redfleet-sc.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/ori-as.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ori-as.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/ori-as.imageset/ori-as.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/ori-as.imageset/ori-as.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/ori-bb.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ori-bb.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/ori-bb.imageset/ori-bb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/ori-bb.imageset/ori-bb.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/ori-ca.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ori-ca.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/ori-ca.imageset/ori-ca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/ori-ca.imageset/ori-ca.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/ori-dd.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ori-dd.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/ori-dd.imageset/ori-dd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/ori-dd.imageset/ori-dd.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/ori-sb.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ori-sb.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/ori-sb.imageset/ori-sb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/ori-sb.imageset/ori-sb.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/ori-sc.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ori-sc.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/ori-sc.imageset/ori-sc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/ori-sc.imageset/ori-sc.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/planet-army.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "planet-army.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/planet-army.imageset/planet-army.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/planet-army.imageset/planet-army.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/planet-empty.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "planet-empty.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/planet-empty.imageset/planet-empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/planet-empty.imageset/planet-empty.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/planet-fuel-army.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "planet-fuel-army.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/planet-fuel-army.imageset/planet-fuel-army.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/planet-fuel-army.imageset/planet-fuel-army.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/planet-fuel.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "planet-fuel.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/planet-fuel.imageset/planet-fuel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/planet-fuel.imageset/planet-fuel.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/planet-repair-army.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "planet-repair-army.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/planet-repair-army.imageset/planet-repair-army.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/planet-repair-army.imageset/planet-repair-army.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/planet-repair-fuel-army.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "planet-repair-fuel-army.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/planet-repair-fuel-army.imageset/planet-repair-fuel-army.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/planet-repair-fuel-army.imageset/planet-repair-fuel-army.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/planet-repair-fuel.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "planet-repair-fuel.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/planet-repair-fuel.imageset/planet-repair-fuel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/planet-repair-fuel.imageset/planet-repair-fuel.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/planet-repair.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "planet-repair.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/planet-repair.imageset/planet-repair.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/planet-repair.imageset/planet-repair.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/planet-unknown.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "planet-unknown.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/planet-unknown.imageset/planet-unknown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/planet-unknown.imageset/planet-unknown.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/rom-as.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "rom-as.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/rom-as.imageset/rom-as.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/rom-as.imageset/rom-as.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/rom-bb.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "rom-bb.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/rom-bb.imageset/rom-bb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/rom-bb.imageset/rom-bb.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/rom-ca.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "rom-ca.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/rom-ca.imageset/rom-ca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/rom-ca.imageset/rom-ca.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/rom-dd.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "rom-dd.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/rom-dd.imageset/rom-dd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/rom-dd.imageset/rom-dd.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/rom-sb.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "rom-sb.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/rom-sb.imageset/rom-sb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/rom-sb.imageset/rom-sb.png -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/rom-sc.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "rom-sc.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekIPad/Global Group/Assets.xcassets/rom-sc.imageset/rom-sc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekIPad/Global Group/Assets.xcassets/rom-sc.imageset/rom-sc.png -------------------------------------------------------------------------------- /NetrekIPad/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | $(MARKETING_VERSION) 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | ITSAppUsesNonExemptEncryption 22 | 23 | LSRequiresIPhoneOS 24 | 25 | NSAppTransportSecurity 26 | 27 | NSExceptionDomains 28 | 29 | metaserver.netrek.org 30 | 31 | NSExceptionAllowsInsecureHTTPLoads 32 | 33 | 34 | metaserver2.netrek.org 35 | 36 | NSExceptionAllowsInsecureHTTPLoads 37 | 38 | 39 | 40 | 41 | UIApplicationSceneManifest 42 | 43 | UIApplicationSupportsMultipleScenes 44 | 45 | UISceneConfigurations 46 | 47 | UIWindowSceneSessionRoleApplication 48 | 49 | 50 | UISceneConfigurationName 51 | Default Configuration 52 | UISceneDelegateClassName 53 | $(PRODUCT_MODULE_NAME).SceneDelegate 54 | 55 | 56 | 57 | 58 | UILaunchStoryboardName 59 | LaunchScreen 60 | UIRequiredDeviceCapabilities 61 | 62 | armv7 63 | 64 | UIRequiresFullScreen 65 | 66 | UISupportedInterfaceOrientations 67 | 68 | UIInterfaceOrientationLandscapeLeft 69 | UIInterfaceOrientationLandscapeRight 70 | 71 | UISupportedInterfaceOrientations~ipad 72 | 73 | UIInterfaceOrientationLandscapeLeft 74 | UIInterfaceOrientationLandscapeRight 75 | 76 | UIUserInterfaceStyle 77 | Dark 78 | 79 | 80 | -------------------------------------------------------------------------------- /NetrekIPad/Model/EligibleTeams.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EligibleTeams.swift 3 | // NetrekIPad 4 | // 5 | // Created by Darrell Root on 6/7/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import SwiftUI 11 | 12 | class EligibleTeams: ObservableObject { 13 | @Published var fedEligible = true 14 | @Published var romEligible = true 15 | @Published var kazariEligible = true 16 | @Published var oriEligible = true 17 | @Published var preferredTeam: Team = .federation 18 | @Published var preferredShip: ShipType = .cruiser 19 | var initialTeamSet = false 20 | 21 | public func updateEligibleTeams(mask: UInt8) { 22 | debugPrint("start update eligible teams") 23 | if mask & UInt8(Team.federation.rawValue) != 0 { 24 | self.fedEligible = true 25 | } else { 26 | self.fedEligible = false 27 | } 28 | if mask & UInt8(Team.roman.rawValue) != 0 { 29 | self.romEligible = true 30 | } else { 31 | self.romEligible = false 32 | } 33 | if mask & UInt8(Team.kazari.rawValue) != 0 { 34 | self.kazariEligible = true 35 | } else { 36 | self.kazariEligible = false 37 | } 38 | if mask & UInt8(Team.orion.rawValue) != 0 { 39 | self.oriEligible = true 40 | } else { 41 | oriEligible = false 42 | } 43 | if !self.initialTeamSet && mask != 0 { 44 | debugPrint("initial team set") 45 | if fedEligible { 46 | self.preferredTeam = .federation 47 | self.initialTeamSet = true 48 | return 49 | } 50 | if romEligible { 51 | self.preferredTeam = .roman 52 | self.initialTeamSet = true 53 | return 54 | } 55 | if kazariEligible { 56 | self.preferredTeam = .kazari 57 | self.initialTeamSet = true 58 | return 59 | } 60 | if oriEligible { 61 | self.preferredTeam = .orion 62 | self.initialTeamSet = true 63 | return 64 | } 65 | } 66 | 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /NetrekIPad/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /NetrekIPad/Views/ContentView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ContentView.swift 3 | // NetrekIPad 4 | // 5 | // Created by Darrell Root on 6/7/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct ContentView: View { 12 | 13 | @ObservedObject var serverUpdate = Universe.universe.serverUpdate 14 | @ObservedObject var metaServer: MetaServer 15 | @ObservedObject var universe: Universe 16 | @ObservedObject var appDelegate: AppDelegate 17 | @State var displayHelp = false 18 | //let appDelegate = UIApplication.shared.delegate as! AppDelegate 19 | 20 | var body: some View { 21 | switch (appDelegate.gameScreen, universe.players[universe.me].slotStatus) { 22 | case (.howToPlay,_): 23 | return AnyView(HowToPlayView()) 24 | case (.credits,_): 25 | return AnyView(CreditsView(appDelegate: appDelegate)) 26 | case (.preferences,_): 27 | return AnyView(LoginView(loginName: appDelegate.loginInformationController.loginName,loginPassword: appDelegate.loginInformationController.loginPassword, userInfo: appDelegate.loginInformationController.userInfo, loginInformationController: appDelegate.loginInformationController)) 28 | case (.noServerSelected,_): 29 | return AnyView(PickServerView(metaServer: metaServer, universe: universe)) 30 | case (.serverSelected,_): 31 | return AnyView(ServerSelectedView(appDelegate: appDelegate, server: appDelegate.reader?.hostname ?? "unknown")) 32 | case (.serverConnected,_): 33 | return AnyView(ServerConnectedView(appDelegate: appDelegate, universe: universe)) 34 | case (.serverSlotFound,_): 35 | return AnyView(ServerSlotView(appDelegate: appDelegate)) 36 | case (.loginAccepted,.explode): 37 | return AnyView(TacticalHudView(universe: universe, me: universe.players[universe.me], help: appDelegate.help)) 38 | case (.loginAccepted,_): 39 | return AnyView(SelectTeamView(eligibleTeams: self.appDelegate.eligibleTeams, universe: universe)) 40 | case (.gameActive,_): 41 | return AnyView(TacticalHudView(universe: universe, me: universe.players[universe.me],help: appDelegate.help)) 42 | //default: 43 | //return AnyView(Text("Unexpected Error")) 44 | } 45 | } 46 | } 47 | 48 | /*struct ContentView_Previews: PreviewProvider { 49 | static var previews: some View { 50 | ContentView() 51 | } 52 | }*/ 53 | -------------------------------------------------------------------------------- /NetrekIPad/Views/MessagesView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MessagesView.swift 3 | // NetrekIPad 4 | // 5 | // Created by Darrell Root on 6/10/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | import Combine 11 | 12 | struct MessagesView: View { 13 | @ObservedObject var universe: Universe 14 | 15 | let appDelegate = UIApplication.shared.delegate as! AppDelegate 16 | 17 | var body: some View { 18 | VStack(alignment: .leading) { 19 | ForEach(self.universe.recentMessages, id: \.self) { message in 20 | Text(message) 21 | .font(.headline) 22 | } 23 | } 24 | } 25 | } 26 | 27 | /*struct MessagesView_Previews: PreviewProvider { 28 | static var previews: some View { 29 | MessagesView() 30 | } 31 | }*/ 32 | -------------------------------------------------------------------------------- /NetrekIPad/Views/ServerConnectedView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ServerConnectedView.swift 3 | // NetrekIPad 4 | // 5 | // Created by Darrell Root on 6/11/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct ServerConnectedView: View { 12 | var appDelegate: AppDelegate 13 | var universe: Universe 14 | 15 | var body: some View { 16 | VStack { 17 | HStack { 18 | HStack { 19 | Image(systemName: "chevron.left") 20 | Text("Disconnect From Server") 21 | }.onTapGesture { 22 | self.appDelegate.newGameState(.noServerSelected) 23 | } 24 | Spacer() 25 | }//HStack 26 | Spacer() 27 | Text("Server \(appDelegate.reader?.hostname ?? "unknown") Connected") 28 | Text("Wait Queue \(universe.waitQueue)") 29 | Spacer() 30 | }//VStack 31 | }//var body 32 | } 33 | 34 | /*struct ServerConnectedView_Previews: PreviewProvider { 35 | static var previews: some View { 36 | ServerConnectedView() 37 | } 38 | }*/ 39 | -------------------------------------------------------------------------------- /NetrekIPad/Views/ServerSelectedView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ServerSelectedView.swift 3 | // NetrekIPad 4 | // 5 | // Created by Darrell Root on 6/10/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct ServerSelectedView: View { 12 | var appDelegate: AppDelegate 13 | var server: String 14 | var body: some View { 15 | VStack { 16 | HStack { 17 | Image(systemName: "chevron.left") 18 | Text("Abort Connection") 19 | Spacer() 20 | }.foregroundColor(Color.blue) 21 | .onTapGesture { 22 | self.appDelegate.newGameState(.noServerSelected) 23 | } 24 | Spacer() 25 | Text("Server \(server) Selected") 26 | Text("Attempting to connect") 27 | Spacer() 28 | }.font(.title) 29 | } 30 | } 31 | 32 | /*struct ServerSelectedView_Previews: PreviewProvider { 33 | static var previews: some View { 34 | ServerSelectedView() 35 | } 36 | }*/ 37 | -------------------------------------------------------------------------------- /NetrekIPad/Views/ServerSlotView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ServerSlotView.swift 3 | // NetrekIPad 4 | // 5 | // Created by Darrell Root on 6/11/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct ServerSlotView: View { 12 | var appDelegate: AppDelegate 13 | //var universe: Universe 14 | 15 | var body: some View { 16 | VStack { 17 | HStack { 18 | HStack { 19 | Image(systemName: "chevron.left") 20 | Text("Disconnect From Server") 21 | }.onTapGesture { 22 | self.appDelegate.newGameState(.noServerSelected) 23 | } 24 | Spacer() 25 | }//HStack 26 | Spacer() 27 | Text("Server \(appDelegate.reader?.hostname ?? "unknown") Slot Found") 28 | appDelegate.loginInformationController.loginAuthenticated ? Text("Attempting to login as user \(appDelegate.loginInformationController.loginName)") : Text("Attempting to login as guest") 29 | Spacer() 30 | }//VStack 31 | }//var body 32 | } 33 | 34 | /*struct ServerConnectedView_Previews: PreviewProvider { 35 | static var previews: some View { 36 | ServerConnectedView() 37 | } 38 | }*/ 39 | -------------------------------------------------------------------------------- /NetrekIPad/Views/TeamListView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TeamListView.swift 3 | // NetrekIPad 4 | // 5 | // Created by Darrell Root on 6/10/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct TeamListView: View { 12 | @ObservedObject var universe: Universe 13 | 14 | var body: some View { 15 | VStack { 16 | Spacer() 17 | ForEach(self.universe.allPlayers, id: \.playerId) { player in 18 | HStack { 19 | Text("\(NetrekMath.teamLetter(team: player.team))\(NetrekMath.playerLetter(playerId: player.playerId))") 20 | Text(" ").overlay(Text(player.name)) 21 | //Text(player.name) 22 | Text(" ").overlay(Text(player.rank.description)) 23 | //Text(player.rank.description) 24 | Text(player.ship?.description ?? "??") 25 | Text("Kills \(player.kills,specifier: "%.2f")") 26 | } 27 | .font(.system(.body, design: .monospaced)) 28 | .border(NetrekMath.color(team: player.team), width: player === self.universe.players[self.universe.me] ? 1 : 0) 29 | 30 | //player === universe.players[me] ? .fontWeight(.bold) : .fontWeight(.regular) 31 | 32 | .foregroundColor(NetrekMath.color(team: player.team)) 33 | } 34 | } 35 | } 36 | } 37 | 38 | /*struct TeamListView_Previews: PreviewProvider { 39 | static var previews: some View { 40 | TeamListView() 41 | } 42 | }*/ 43 | -------------------------------------------------------------------------------- /NetrekMacOS/Controllers/PreferencesController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PreferencesController.swift 3 | // Netrek2 4 | // 5 | // Created by Darrell Root on 6/4/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import SwiftUI 11 | 12 | class PreferencesController: ObservableObject { 13 | //let appDelegate = NSApplication.shared.delegate as! AppDelegate 14 | 15 | static let hideHintsKey = "showHints" 16 | static let preferUdpKey = "preferUdp" 17 | 18 | let defaults: UserDefaults 19 | @Published var hideHints = false { 20 | didSet { 21 | defaults.set(hideHints, forKey: PreferencesController.hideHintsKey) 22 | debugPrint("set userdefaults hideHints \(hideHints)") 23 | } 24 | } 25 | @Published var preferUdp = false { 26 | didSet { 27 | defaults.set(preferUdp, forKey: PreferencesController.preferUdpKey) 28 | debugPrint("set userdefaults preferUdp \(preferUdp)") 29 | } 30 | } 31 | 32 | init(defaults: UserDefaults) { 33 | self.defaults = defaults 34 | self.hideHints = defaults.bool(forKey: PreferencesController.hideHintsKey) 35 | self.preferUdp = defaults.bool(forKey: PreferencesController.preferUdpKey) 36 | } 37 | /*func setShowHints(_ newValue: Bool) { 38 | self.showHints = newValue 39 | defaults.set(newValue, forKey: showHintsKey) 40 | debugPrint("set userdefaults showHints \(newValue)") 41 | }*/ 42 | } 43 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "netrek-icon-16.png", 5 | "idiom" : "mac", 6 | "scale" : "1x", 7 | "size" : "16x16" 8 | }, 9 | { 10 | "filename" : "netrek-icon-33.png", 11 | "idiom" : "mac", 12 | "scale" : "2x", 13 | "size" : "16x16" 14 | }, 15 | { 16 | "filename" : "netrek-icon-32.png", 17 | "idiom" : "mac", 18 | "scale" : "1x", 19 | "size" : "32x32" 20 | }, 21 | { 22 | "filename" : "netrek-icon-64.png", 23 | "idiom" : "mac", 24 | "scale" : "2x", 25 | "size" : "32x32" 26 | }, 27 | { 28 | "filename" : "netrek-icon-128.png", 29 | "idiom" : "mac", 30 | "scale" : "1x", 31 | "size" : "128x128" 32 | }, 33 | { 34 | "filename" : "netrek-icon-257.png", 35 | "idiom" : "mac", 36 | "scale" : "2x", 37 | "size" : "128x128" 38 | }, 39 | { 40 | "filename" : "netrek-icon-256.png", 41 | "idiom" : "mac", 42 | "scale" : "1x", 43 | "size" : "256x256" 44 | }, 45 | { 46 | "filename" : "netrek-icon-513.png", 47 | "idiom" : "mac", 48 | "scale" : "2x", 49 | "size" : "256x256" 50 | }, 51 | { 52 | "filename" : "netrek-icon-512.png", 53 | "idiom" : "mac", 54 | "scale" : "1x", 55 | "size" : "512x512" 56 | }, 57 | { 58 | "filename" : "netrek-icon-1024.png", 59 | "idiom" : "mac", 60 | "scale" : "2x", 61 | "size" : "512x512" 62 | } 63 | ], 64 | "info" : { 65 | "author" : "xcode", 66 | "version" : 1 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-1024.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-128.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-16.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-256.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-257.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-257.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-32.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-33.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-512.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-513.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-513.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/AppIcon.appiconset/netrek-icon-64.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/Particle Sprite Atlas.spriteatlas/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/kli-as.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "kli-as.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/kli-as.imageset/kli-as.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/kli-as.imageset/kli-as.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/kli-bb.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "kli-bb.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/kli-bb.imageset/kli-bb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/kli-bb.imageset/kli-bb.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/kli-ca.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "kli-ca.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/kli-ca.imageset/kli-ca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/kli-ca.imageset/kli-ca.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/kli-dd.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "kli-dd.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/kli-dd.imageset/kli-dd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/kli-dd.imageset/kli-dd.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/kli-sb.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "kli-sb.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/kli-sb.imageset/kli-sb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/kli-sb.imageset/kli-sb.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/kli-sc.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "kli-sc.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/kli-sc.imageset/kli-sc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/kli-sc.imageset/kli-sc.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/mactrek-outlinefleet-as.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "mactrek-outlinefleet-as.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/mactrek-outlinefleet-as.imageset/mactrek-outlinefleet-as.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/mactrek-outlinefleet-as.imageset/mactrek-outlinefleet-as.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/mactrek-outlinefleet-bb.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "mactrek-outlinefleet-bb.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/mactrek-outlinefleet-bb.imageset/mactrek-outlinefleet-bb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/mactrek-outlinefleet-bb.imageset/mactrek-outlinefleet-bb.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/mactrek-outlinefleet-ca.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "mactrek-outlinefleet-ca.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/mactrek-outlinefleet-ca.imageset/mactrek-outlinefleet-ca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/mactrek-outlinefleet-ca.imageset/mactrek-outlinefleet-ca.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/mactrek-outlinefleet-dd.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "mactrek-outlinefleet-dd.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/mactrek-outlinefleet-dd.imageset/mactrek-outlinefleet-dd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/mactrek-outlinefleet-dd.imageset/mactrek-outlinefleet-dd.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/mactrek-outlinefleet-sb.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "mactrek-outlinefleet-sb.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/mactrek-outlinefleet-sb.imageset/mactrek-outlinefleet-sb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/mactrek-outlinefleet-sb.imageset/mactrek-outlinefleet-sb.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/mactrek-outlinefleet-sc.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "mactrek-outlinefleet-sc.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/mactrek-outlinefleet-sc.imageset/mactrek-outlinefleet-sc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/mactrek-outlinefleet-sc.imageset/mactrek-outlinefleet-sc.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/mactrek-redfleet-as.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "mactrek-redfleet-as.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/mactrek-redfleet-as.imageset/mactrek-redfleet-as.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/mactrek-redfleet-as.imageset/mactrek-redfleet-as.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/mactrek-redfleet-bb.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "mactrek-redfleet-bb.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/mactrek-redfleet-bb.imageset/mactrek-redfleet-bb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/mactrek-redfleet-bb.imageset/mactrek-redfleet-bb.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/mactrek-redfleet-ca.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "mactrek-redfleet-ca.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/mactrek-redfleet-ca.imageset/mactrek-redfleet-ca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/mactrek-redfleet-ca.imageset/mactrek-redfleet-ca.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/mactrek-redfleet-dd.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "mactrek-redfleet-dd.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/mactrek-redfleet-dd.imageset/mactrek-redfleet-dd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/mactrek-redfleet-dd.imageset/mactrek-redfleet-dd.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/mactrek-redfleet-sb.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "mactrek-redfleet-sb.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/mactrek-redfleet-sb.imageset/mactrek-redfleet-sb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/mactrek-redfleet-sb.imageset/mactrek-redfleet-sb.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/mactrek-redfleet-sc.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "mactrek-redfleet-sc.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/mactrek-redfleet-sc.imageset/mactrek-redfleet-sc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/mactrek-redfleet-sc.imageset/mactrek-redfleet-sc.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/ori-as.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ori-as.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/ori-as.imageset/ori-as.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/ori-as.imageset/ori-as.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/ori-bb.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ori-bb.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/ori-bb.imageset/ori-bb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/ori-bb.imageset/ori-bb.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/ori-ca.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ori-ca.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/ori-ca.imageset/ori-ca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/ori-ca.imageset/ori-ca.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/ori-dd.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ori-dd.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/ori-dd.imageset/ori-dd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/ori-dd.imageset/ori-dd.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/ori-sb.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ori-sb.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/ori-sb.imageset/ori-sb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/ori-sb.imageset/ori-sb.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/ori-sc.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ori-sc.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/ori-sc.imageset/ori-sc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/ori-sc.imageset/ori-sc.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/planet-army.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "planet-army.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/planet-army.imageset/planet-army.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/planet-army.imageset/planet-army.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/planet-empty.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "planet-empty.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/planet-empty.imageset/planet-empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/planet-empty.imageset/planet-empty.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/planet-fuel-army.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "planet-fuel-army.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/planet-fuel-army.imageset/planet-fuel-army.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/planet-fuel-army.imageset/planet-fuel-army.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/planet-fuel.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "planet-fuel.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/planet-fuel.imageset/planet-fuel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/planet-fuel.imageset/planet-fuel.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/planet-repair-army.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "planet-repair-army.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/planet-repair-army.imageset/planet-repair-army.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/planet-repair-army.imageset/planet-repair-army.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/planet-repair-fuel-army.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "planet-repair-fuel-army.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/planet-repair-fuel-army.imageset/planet-repair-fuel-army.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/planet-repair-fuel-army.imageset/planet-repair-fuel-army.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/planet-repair-fuel.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "planet-repair-fuel.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/planet-repair-fuel.imageset/planet-repair-fuel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/planet-repair-fuel.imageset/planet-repair-fuel.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/planet-repair.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "planet-repair.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/planet-repair.imageset/planet-repair.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/planet-repair.imageset/planet-repair.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/planet-unknown.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "planet-unknown.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/planet-unknown.imageset/planet-unknown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/planet-unknown.imageset/planet-unknown.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/rom-as.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "rom-as.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/rom-as.imageset/rom-as.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/rom-as.imageset/rom-as.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/rom-bb.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "rom-bb.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/rom-bb.imageset/rom-bb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/rom-bb.imageset/rom-bb.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/rom-ca.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "rom-ca.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/rom-ca.imageset/rom-ca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/rom-ca.imageset/rom-ca.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/rom-dd.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "rom-dd.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/rom-dd.imageset/rom-dd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/rom-dd.imageset/rom-dd.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/rom-sb.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "rom-sb.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/rom-sb.imageset/rom-sb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/rom-sb.imageset/rom-sb.png -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/rom-sc.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "rom-sc.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Global Group/Assets.xcassets/rom-sc.imageset/rom-sc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Global Group/Assets.xcassets/rom-sc.imageset/rom-sc.png -------------------------------------------------------------------------------- /NetrekMacOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleHelpBookFolder 10 | Netrek.help 11 | CFBundleHelpBookName 12 | net.networkmom.netrek.help 13 | CFBundleIconFile 14 | 15 | CFBundleIdentifier 16 | $(PRODUCT_BUNDLE_IDENTIFIER) 17 | CFBundleInfoDictionaryVersion 18 | 6.0 19 | CFBundleName 20 | $(PRODUCT_NAME) 21 | CFBundlePackageType 22 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 23 | CFBundleShortVersionString 24 | $(MARKETING_VERSION) 25 | CFBundleVersion 26 | $(CURRENT_PROJECT_VERSION) 27 | ITSAppUsesNonExemptEncryption 28 | 29 | LSApplicationCategoryType 30 | public.app-category.simulation-games 31 | LSMinimumSystemVersion 32 | $(MACOSX_DEPLOYMENT_TARGET) 33 | NSAppTransportSecurity 34 | 35 | NSAllowsArbitraryLoads 36 | 37 | 38 | NSHumanReadableCopyright 39 | Copyright © 2020 Darrell Root. All rights reserved. 40 | NSMainStoryboardFile 41 | Main 42 | NSPrincipalClass 43 | NSApplication 44 | NSSupportsAutomaticTermination 45 | 46 | NSSupportsSuddenTermination 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /NetrekMacOS/Netrek2.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.network.client 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /NetrekMacOS/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en-US 7 | CFBundleIdentifier 8 | net.networkmom.netrek.help 9 | CFBundleInfoDictionaryVersion 10 | 6.0 11 | CFBundlePackageType 12 | BNDL 13 | CFBundleShortVersionString 14 | 15 15 | CFBundleSignature 16 | hbwr 17 | CFBundleVersion 18 | 15 19 | HPDBookAccessPath 20 | index.html 21 | HPDBookIconPath 22 | images/Images 23 | HPDBookIndexPath 24 | help.helpindex 25 | HPDBookTitle 26 | Netrek 27 | HPDBookType 28 | 3 29 | HPDBookUsesExternalViewer 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/en-US.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | "HPDBookTitle" = "Netrek"; 2 | "CFBundleName" = "Netrek"; 3 | -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/en-US.lproj/Page11.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Tournament Mode 8 | 9 | 10 | 11 | 12 | 13 | 14 |

15 | Tournament Mode 16 |

17 |

18 | Tournament Mode is when there are enough humans (as opposed to robots) playing that the game “counts”. Usually this is 4 or more humans per side. 19 |

20 |

21 | Once you are in tournament mode, you will earn “Damage Inflicted” with every ship killed, every army bombed, and every planet captured. Sufficient damage inflicted, plus a high enough offense rating (damage inflicted per hour) will result in “promotions” to higher rank. If you are not playing as a guest, these promotions will persist to future games on the same server. 22 |

23 |

24 |
25 |

26 |

27 | feedback@networkmom.net 28 |

29 | 30 | -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/en-US.lproj/Page12.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Have fun 8 | 9 | 10 | 11 | 12 | 13 | 14 |

15 | Have fun 16 |

17 |

18 | While Netrek is an intense team game, make sure to have fun. There are always players better or (once you get a bit of practice) worse than you. The robots are pretty good (much better than the 1991 robots) so don’t be frustrated while learning. Be friendly to your teammates and opposing players. 19 |

20 |

21 | feedback@networkmom.net 22 |

23 | 24 | -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/en-US.lproj/Page15.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Netrek Server Types 8 | 9 | 10 | 11 | 12 | 13 | 14 |

15 | Netrek Server Types 16 |

17 |

18 | Bronco 19 |

20 |

21 | Bronco Netrek servers are “standard” Netrek servers with 6 ship types and standard weapons and gameplay. pickled.netrek.org and continuum.uc.netrek.org are Bronco servers. 22 |

23 |

24 | Sturgeon 25 |

26 |

27 | Sturgeon servers add some special weapons (missiles for example) and ships (this client calls it the battlecruiser for legal reasons). This client does not support all Sturgeon features but is playable on Sturgeon servers. netrek.beesenterprises.com is a Sturgeon server. 28 |

29 |

30 | Paradise 31 |

32 |

33 | Paradise was a Netrek variant including larger numbers of ships, large map, star clusters, and more strategic gameplay. Paradise required a custom client. This client does not support Paradise mode. There are no known operational Paradise Netrek servers at this time. 34 |

35 |

36 | Hockey 37 |

38 |

39 | Netrek Hockey was a silly but fun Netrek variant where you use improved tractor and pressor beams to move a “puck” into the “enemy goal” to score. Standard Bronco clients should work with Netrek Hockey, but there are no known operational Netrek Hockey servers online at this time. 40 |

41 |

42 | Other variants 43 |

44 |

45 | There were other Netrek server types, including “Chaos”, “Base Practice”, “International Netrek League”. 46 |

47 |

48 | feedback@networkmom.net 49 |

50 | 51 | -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/en-US.lproj/Page16.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Derived copyright notices 8 | 9 | 10 | 11 | 12 | 13 | 14 |

15 | Derived copyright notices 16 |

17 |

18 |
19 |

20 |

21 | feedback@networkmom.net 22 |

23 | 24 | -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/en-US.lproj/Page17.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Original XTrek Copyright notice 8 | 9 | 10 | 11 | 12 | 13 | 14 |

15 | Original XTrek Copyright notice 16 |

17 |

18 | /* 19 |

20 |

21 | * Copyright (c) 1986 Chris Guthrie 22 |

23 |

24 | * 25 |

26 |

27 | * Permission to use, copy, modify, and distribute this software and its 28 |

29 |

30 | * documentation for any purpose and without fee is hereby granted, provided 31 |

32 |

33 | * that the above copyright notice appear in all copies and that both that 34 |

35 |

36 | * copyright notice and this permission notice appear in supporting 37 |

38 |

39 | * documentation. No representations are made about the suitability of this 40 |

41 |

42 | * software for any purpose. It is provided "as is" without express or 43 |

44 |

45 | * implied warranty. 46 |

47 |

48 | * 49 |

50 |

51 | * Copyright 1989 Kevin P. Smith Scott Silvey 52 |

53 |

54 | * 55 |

56 |

57 | * ditto. 58 |

59 |

60 | */ 61 |

62 |

63 |
64 |

65 |

66 | feedback@networkmom.net 67 |

68 | 69 | -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/en-US.lproj/Page18.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Original Netrek Copyright Notice 8 | 9 | 10 | 11 | 12 | 13 | 14 |

15 | Original Netrek Copyright Notice 16 |

17 |

18 | /* 19 |

20 |

21 | * Copyright 1989 Kevin P. Smith Scott Silvey 22 |

23 |

24 | * 25 |

26 |

27 | * Permission to use, copy, modify, and distribute this software and its 28 |

29 |

30 | * documentation for any purpose and without fee is hereby granted, provided 31 |

32 |

33 | * that the above copyright notice appear in all copies. 34 |

35 |

36 | */ 37 |

38 |

39 | feedback@networkmom.net 40 |

41 | 42 | -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/en-US.lproj/Page3.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Teams 8 | 9 | 10 | 11 | 12 | 13 | 14 |

15 | Teams 16 |

17 |

18 | Federation 19 |

20 |

21 | The Federation are in the bottom left quadrant of the strategic map and have Earth as their homeworld. Their planets are yellow and their ships are white with yellow shields. 22 |

23 |

24 | Romans 25 |

26 |

27 | The Romans are in the top left quadrant and have Rome as their homeworld. Their planets and ships are red. 28 |

29 |

30 | Kazari 31 |

32 |

33 | The Kazari are in the top right quadrant and have Kazari as their homeworld. Their planets and ships are green. 34 |

35 |

36 | Orions 37 |

38 |

39 | The Orions are in the bottom right quadrant and have Orion as their homeworld. Their planets and ships are blue. 40 |

41 |

42 | Indi 43 |

44 |

45 | Occasionally an “independent” robot will spawn on the map to “discourage” players who attack neutral planets. Indi are white or gray. 46 |

47 |

48 | feedback@networkmom.net 49 |

50 | 51 | -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/en-US.lproj/Page8.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Other commands 8 | 9 | 10 | 11 | 12 | 13 | 14 |

15 | Other commands 16 |

17 |

18 | Information 19 |

20 |

21 | The i key will show information about the planet or player closest to the mouse location. This information will show up on the tactical map for 2 seconds, plus in the message window in the bottom right (this is useful when getting information for a far away planet or player on the strategic map). 22 |

23 |

24 | Repair 25 |

26 |

27 | R will stop your ship, lower your shields, and start repairs. This increases the normal repair rate. Orbiting a friendly planet with a repair icon, or being docked with a friendly starbase, will also increase the repair rate. Any movement or weapon command will cancel repairs. 28 |

29 |

30 | Even while not using the full R repair mode, your ship automatically repairs shields at a slow pace. If your shields are down then your ship automatically repairs damage at a slow pace. 31 |

32 |

33 | Docking permission toggle 34 |

35 |

36 | A starbase can permit or deny permission for friendly ships to dock with it. This is to prevent a starbase at the front lines from being crippled by friendly ships exploding on top of it. Some netrek clients support a “transwarp to the starbase”, which this also denies. This client does not currently support transwarping to the starbase. 37 |

38 |

39 | feedback@networkmom.net 40 |

41 | 42 | -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/en-US.lproj/help.helpindex: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Resources/Netrek.help/Contents/Resources/en-US.lproj/help.helpindex -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/images/Images: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Resources/Netrek.help/Contents/Resources/images/Images -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/images/empty-planet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Resources/Netrek.help/Contents/Resources/images/empty-planet.png -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/images/fuel-repair-planet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Resources/Netrek.help/Contents/Resources/images/fuel-repair-planet.png -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/images/manual-server-entry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Resources/Netrek.help/Contents/Resources/images/manual-server-entry.png -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/images/manually-choose-server.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Resources/Netrek.help/Contents/Resources/images/manually-choose-server.png -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/images/orbiting-planet-with-armies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Resources/Netrek.help/Contents/Resources/images/orbiting-planet-with-armies.png -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/images/select-cruiser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Resources/Netrek.help/Contents/Resources/images/select-cruiser.png -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/images/select-server.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Resources/Netrek.help/Contents/Resources/images/select-server.png -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/images/strategic-map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Resources/Netrek.help/Contents/Resources/images/strategic-map.png -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/images/tactical-map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Resources/Netrek.help/Contents/Resources/images/tactical-map.png -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/images/unknown-or-indi-planet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Resources/Netrek.help/Contents/Resources/images/unknown-or-indi-planet.png -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/jquery-theme/images/ui-bg_flat_0_aaaaaa_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Resources/Netrek.help/Contents/Resources/jquery-theme/images/ui-bg_flat_0_aaaaaa_40x100.png -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/jquery-theme/images/ui-bg_flat_75_ffffff_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Resources/Netrek.help/Contents/Resources/jquery-theme/images/ui-bg_flat_75_ffffff_40x100.png -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/jquery-theme/images/ui-bg_glass_55_fbf9ee_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Resources/Netrek.help/Contents/Resources/jquery-theme/images/ui-bg_glass_55_fbf9ee_1x400.png -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/jquery-theme/images/ui-bg_glass_65_ffffff_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Resources/Netrek.help/Contents/Resources/jquery-theme/images/ui-bg_glass_65_ffffff_1x400.png -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/jquery-theme/images/ui-bg_glass_75_dadada_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Resources/Netrek.help/Contents/Resources/jquery-theme/images/ui-bg_glass_75_dadada_1x400.png -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/jquery-theme/images/ui-bg_glass_75_e6e6e6_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Resources/Netrek.help/Contents/Resources/jquery-theme/images/ui-bg_glass_75_e6e6e6_1x400.png -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/jquery-theme/images/ui-bg_glass_95_fef1ec_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Resources/Netrek.help/Contents/Resources/jquery-theme/images/ui-bg_glass_95_fef1ec_1x400.png -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/jquery-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Resources/Netrek.help/Contents/Resources/jquery-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/jquery-theme/images/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Resources/Netrek.help/Contents/Resources/jquery-theme/images/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/jquery-theme/images/ui-icons_2e83ff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Resources/Netrek.help/Contents/Resources/jquery-theme/images/ui-icons_2e83ff_256x240.png -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/jquery-theme/images/ui-icons_454545_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Resources/Netrek.help/Contents/Resources/jquery-theme/images/ui-icons_454545_256x240.png -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/jquery-theme/images/ui-icons_888888_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Resources/Netrek.help/Contents/Resources/jquery-theme/images/ui-icons_888888_256x240.png -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/jquery-theme/images/ui-icons_cd0a0a_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Resources/Netrek.help/Contents/Resources/jquery-theme/images/ui-icons_cd0a0a_256x240.png -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/js/skin-lion/icons.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Resources/Netrek.help/Contents/Resources/js/skin-lion/icons.gif -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/js/skin-lion/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/NetrekMacOS/Resources/Netrek.help/Contents/Resources/js/skin-lion/loading.gif -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/js/topicpage.js: -------------------------------------------------------------------------------- 1 | /* 2 | Allows redirection from a topic page to index.html, e.g. index.html?TopicPage.html 3 | */ 4 | if (!document.getElementById("tree")) { 5 | var currentPage = top.location.href.substring(top.location.href.lastIndexOf("/") + 1, top.location.href.length); 6 | top.location.href = "index.html?" + currentPage; 7 | } 8 | -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/txt/fancytree-LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright 2008-2015 Martin Wendt, 2 | http://wwWendt.de/ 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining 5 | a copy of this software and associated documentation files (the 6 | "Software"), to deal in the Software without restriction, including 7 | without limitation the rights to use, copy, modify, merge, publish, 8 | distribute, sublicense, and/or sell copies of the Software, and to 9 | permit persons to whom the Software is furnished to do so, subject to 10 | the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 19 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 20 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/txt/jquery-LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright jQuery Foundation and other contributors, https://jquery.org/ 2 | 3 | This software consists of voluntary contributions made by many 4 | individuals. For exact contribution history, see the revision history 5 | available at https://github.com/jquery/jquery 6 | 7 | The following license applies to all parts of this software except as 8 | documented below: 9 | 10 | ==== 11 | 12 | Permission is hereby granted, free of charge, to any person obtaining 13 | a copy of this software and associated documentation files (the 14 | "Software"), to deal in the Software without restriction, including 15 | without limitation the rights to use, copy, modify, merge, publish, 16 | distribute, sublicense, and/or sell copies of the Software, and to 17 | permit persons to whom the Software is furnished to do so, subject to 18 | the following conditions: 19 | 20 | The above copyright notice and this permission notice shall be 21 | included in all copies or substantial portions of the Software. 22 | 23 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 27 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 28 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 29 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 30 | 31 | ==== 32 | 33 | All files located in the node_modules and external directories are 34 | externally maintained libraries used by this software which have their 35 | own licenses; we recommend you read them, as their terms may differ from 36 | the terms above. 37 | -------------------------------------------------------------------------------- /NetrekMacOS/Resources/Netrek.help/Contents/Resources/txt/jquery-ui-LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright jQuery Foundation and other contributors, https://jquery.org/ 2 | 3 | This software consists of voluntary contributions made by many 4 | individuals. For exact contribution history, see the revision history 5 | available at https://github.com/jquery/jquery-ui 6 | 7 | The following license applies to all parts of this software except as 8 | documented below: 9 | 10 | ==== 11 | 12 | Permission is hereby granted, free of charge, to any person obtaining 13 | a copy of this software and associated documentation files (the 14 | "Software"), to deal in the Software without restriction, including 15 | without limitation the rights to use, copy, modify, merge, publish, 16 | distribute, sublicense, and/or sell copies of the Software, and to 17 | permit persons to whom the Software is furnished to do so, subject to 18 | the following conditions: 19 | 20 | The above copyright notice and this permission notice shall be 21 | included in all copies or substantial portions of the Software. 22 | 23 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 27 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 28 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 29 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 30 | 31 | ==== 32 | 33 | Copyright and related rights for sample code are waived via CC0. Sample 34 | code is defined as all source code contained within the demos directory. 35 | 36 | CC0: http://creativecommons.org/publicdomain/zero/1.0/ 37 | 38 | ==== 39 | 40 | All files located in the node_modules and external directories are 41 | externally maintained libraries used by this software which have their 42 | own licenses; we recommend you read them, as their terms may differ from 43 | the terms above. 44 | -------------------------------------------------------------------------------- /NetrekMacOS/Views/CommunicationsView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BottomView.swift 3 | // Netrek2 4 | // 5 | // Created by Darrell Root on 5/9/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct CommunicationsView: View { 12 | @ObservedObject var universe = Universe.universe 13 | @FocusState var textFieldFocused 14 | 15 | 16 | var body: some View { 17 | HStack { 18 | StatisticsView(universe: universe, me: universe.players[universe.me]) 19 | MessagesView(universe: universe, textFieldFocused: _textFieldFocused) 20 | }.frame(minWidth: 1000) 21 | } 22 | } 23 | 24 | /*struct BottomView_Previews: PreviewProvider { 25 | static var previews: some View { 26 | BottomView() 27 | } 28 | }*/ 29 | -------------------------------------------------------------------------------- /NetrekMacOS/Views/EverythingView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EverythingView.swift 3 | // Netrek 4 | // 5 | // Created by Darrell Root on 3/4/22. 6 | // Copyright © 2022 Darrell Root. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct EverythingView: View { 12 | @ObservedObject var help: Help 13 | @ObservedObject var universe = Universe.universe 14 | @ObservedObject var preferencesController: PreferencesController 15 | @FocusState var textFieldFocused 16 | 17 | var body: some View { 18 | GeometryReader { geo in 19 | VStack(spacing: 0) { 20 | HStack(spacing: 0) { 21 | TacticalView(help: help, preferencesController: preferencesController) 22 | .frame(width: geo.size.width / 2, height: geo.size.width / 2) 23 | .border(universe.players[Universe.universe.me].alertCondition.color.opacity(0.5), width: 10) 24 | .onTapGesture { 25 | textFieldFocused = false 26 | } 27 | .clipped() 28 | 29 | StrategicView() 30 | .frame(width: geo.size.width / 2, height: geo.size.width / 2) 31 | .border(universe.players[Universe.universe.me].alertCondition.color.opacity(0.5), width: 10) 32 | .onTapGesture { 33 | textFieldFocused = false 34 | } 35 | .clipped() 36 | } 37 | CommunicationsView(textFieldFocused: _textFieldFocused) 38 | .frame(width: geo.size.width) 39 | .border(universe.players[Universe.universe.me].alertCondition.color.opacity(0.5), width: 3) 40 | .clipped() 41 | } 42 | } 43 | } 44 | } 45 | 46 | /*struct EverythingView_Previews: PreviewProvider { 47 | static var previews: some View { 48 | EverythingView() 49 | } 50 | }*/ 51 | -------------------------------------------------------------------------------- /NetrekMacOS/Views/ManualServerView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ManualServerView.swift 3 | // Netrek2 4 | // 5 | // Created by Darrell Root on 6/1/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct ManualServerView: View { 12 | let appDelegate = NSApplication.shared.delegate as! AppDelegate 13 | @State var server: String = "" 14 | @Environment(\.presentationMode) var presentationMode 15 | 16 | var body: some View { 17 | VStack { 18 | HStack { 19 | TextField("Input server name or IP", text: $server,onCommit: self.commit).frame(width: 350) 20 | Button("Connect") { 21 | self.commit() 22 | } 23 | } 24 | Text("pickled.netrek.org is a well-known Netrek server") 25 | }.padding(20) 26 | } 27 | func commit() -> Void { 28 | if self.server != "" { 29 | self.appDelegate.connectToServer(server: self.server) 30 | self.presentationMode.wrappedValue.dismiss() 31 | } 32 | } 33 | } 34 | 35 | struct ManualServerView_Previews: PreviewProvider { 36 | static var previews: some View { 37 | ManualServerView() 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /NetrekMacOS/Views/PlanetStrategicView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PlanetView.swift 3 | // Netrek2 4 | // 5 | // Created by Darrell Root on 5/6/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct PlanetStrategicView: View, StrategicOffset { 12 | var planet: Planet 13 | @ObservedObject var updateCounter = Universe.universe.seconds 14 | // @ObservedObject var me: Player 15 | var me: Player 16 | var body: some View { 17 | return GeometryReader { geo in 18 | ZStack { 19 | Text(self.planet.shortName).foregroundColor(self.planet.seen[self.me.team]! ? NetrekMath.color(team: self.planet.owner) : .gray).fontWeight((self.planet.armies > 4 && self.planet.seen[self.me.team]!) ? .heavy : .regular) 20 | } 21 | .offset(x: self.screenX(netrekPositionX: self.planet.positionX, screenWidth: geo.size.width), y: self.screenY(netrekPositionY: self.planet.positionY, screenHeight: geo.size.height)) 22 | } 23 | 24 | } 25 | } 26 | 27 | /*struct PlanetView_Previews: PreviewProvider { 28 | static var previews: some View { 29 | PlanetView() 30 | } 31 | }*/ 32 | -------------------------------------------------------------------------------- /NetrekMacOS/Views/PlayerStrategicView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PlayerView.swift 3 | // Netrek2 4 | // 5 | // Created by Darrell Root on 5/6/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct PlayerStrategicView: View, StrategicOffset { 12 | var player: Player 13 | @ObservedObject var updateCounter = Universe.universe.seconds 14 | var body: some View { 15 | return GeometryReader { geo in 16 | Text(self.playerText).foregroundColor(self.playerColor) 17 | .offset(x: self.screenX(netrekPositionX: self.player.positionX, screenWidth: geo.size.width), y: self.screenY(netrekPositionY: self.player.positionY, screenHeight: geo.size.height)) 18 | } 19 | } 20 | var playerColor: Color { 21 | if player.cloak == true { 22 | return Color.gray 23 | } else { 24 | return NetrekMath.color(team: self.player.team) 25 | } 26 | } 27 | var playerText: String { 28 | if player.cloak == true { 29 | return "??" 30 | } else { 31 | let playerLetter = NetrekMath.playerLetter(playerId: player.playerId) 32 | let teamLetter = NetrekMath.teamLetter(team: player.team) 33 | return teamLetter + playerLetter 34 | } 35 | } 36 | /*func screenX(netrekPositionX: Int,screenWidth: CGFloat) -> CGFloat { 37 | return (screenWidth * CGFloat(netrekPositionX) / CGFloat(NetrekMath.galacticSize)) - screenWidth / 2 38 | } 39 | func screenY(netrekPositionY: Int,screenHeight: CGFloat) -> CGFloat { 40 | return -(screenHeight * CGFloat(netrekPositionY) / CGFloat(NetrekMath.galacticSize)) + screenHeight / 2 41 | }*/ 42 | 43 | } 44 | 45 | /*struct PlayerView_Previews: PreviewProvider { 46 | static var previews: some View { 47 | PlayerView() 48 | } 49 | }*/ 50 | -------------------------------------------------------------------------------- /NetrekMacOS/Views/PointingView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PointingView.swift 3 | // Netrek2 4 | // 5 | // Created by Darrell Root on 5/7/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | // Code in this file based don https://swiftui-lab.com/a-powerful-combo/ 9 | 10 | import Foundation 11 | import SwiftUI 12 | 13 | extension View { 14 | func pointingMouse(onPoint: @escaping (NSEvent,NSPoint) -> Void) -> some View { 15 | PointingAreaView(onPoint: onPoint) { self } 16 | } 17 | } 18 | 19 | struct PointingAreaView: View where Content : View { 20 | let onPoint: (NSEvent,NSPoint) -> Void 21 | let content: () -> Content 22 | 23 | init(onPoint: @escaping(NSEvent, NSPoint) -> Void, @ViewBuilder content: @escaping () -> Content) { 24 | self.onPoint = onPoint 25 | self.content = content 26 | } 27 | var body: some View { 28 | PointingAreaRepresentable(onPoint: onPoint, content: self.content()) 29 | } 30 | } 31 | struct PointingAreaRepresentable: NSViewRepresentable where Content: View { 32 | let onPoint: (NSEvent,NSPoint) -> Void 33 | let content: Content 34 | 35 | func makeNSView(context: Context) -> NSHostingView { 36 | return PointingNSHostingView(onPoint: onPoint, rootView: self.content) 37 | } 38 | 39 | func updateNSView(_ nsView: NSHostingView, context: Context) { 40 | } 41 | } 42 | 43 | class PointingNSHostingView: NSHostingView where Content : View { 44 | let onPoint: (NSEvent,NSPoint) -> Void 45 | 46 | override func acceptsFirstMouse(for event: NSEvent?) -> Bool { 47 | return true 48 | } 49 | init(onPoint: @escaping (NSEvent, NSPoint) -> Void, rootView: Content) { 50 | self.onPoint = onPoint 51 | 52 | super.init(rootView: rootView) 53 | 54 | //setupTrackingArea() 55 | } 56 | 57 | required init(rootView: Content) { 58 | fatalError("init(rootView:) has not been implemented") 59 | } 60 | 61 | @objc required dynamic init?(coder aDecoder: NSCoder) { 62 | fatalError("init(coder:) has not been implemented") 63 | } 64 | 65 | override func keyDown(with event: NSEvent) { 66 | debugPrint("keydown") 67 | self.onPoint(event, self.convert(event.locationInWindow, from: nil)) 68 | } 69 | override func mouseDown(with event: NSEvent) { 70 | self.onPoint(event, self.convert(event.locationInWindow, from: nil)) 71 | //print("left mouse \(NSEvent.mouseLocation)") 72 | } 73 | override func rightMouseDown(with event: NSEvent) { 74 | self.onPoint(event, self.convert(event.locationInWindow, from: nil)) 75 | //print("right mouse \(NSEvent.mouseLocation)") 76 | } 77 | override func mouseDragged(with event: NSEvent) { 78 | self.onPoint(event, self.convert(event.locationInWindow, from: nil)) 79 | //print("right mouse \(NSEvent.mouseLocation)" 80 | } 81 | override func otherMouseDown(with event: NSEvent) { 82 | self.onPoint(event, self.convert(event.locationInWindow, from: nil)) 83 | //print("right mouse \(NSEvent.mouseLocation)") 84 | } 85 | 86 | } 87 | -------------------------------------------------------------------------------- /NetrekMacOS/Views/StatisticsView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StatisticsView.swift 3 | // Netrek2 4 | // 5 | // Created by Darrell Root on 5/9/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct StatisticsView: View { 12 | var universe: Universe 13 | var me: Player 14 | @ObservedObject var updateCounter = Universe.universe.seconds 15 | 16 | var body: some View { 17 | VStack(alignment: .leading) { 18 | HStack { 19 | Text("Speed \(me.speed)") 20 | Text("Shield \(me.shieldStrength)") 21 | Text("Damage \(me.damage)") 22 | Text("Armies \(me.armies)") 23 | Text("Fuel \(me.fuel)") 24 | Text("Etmp \(me.engineTemp / 10)") 25 | Text("Wtmp \(me.weaponsTemp / 10)") 26 | }.font(.system(.body, design: .monospaced)) 27 | HStack { 28 | if me.tractorFlag { Text("Tractor") } 29 | if me.pressor { Text("Pressor")} 30 | if me.enginesOverheated { Text("EngineFail")} 31 | }.font(.system(.body, design: .monospaced)) 32 | ForEach(self.universe.activePlayers, id: \.playerId) { player in 33 | HStack { 34 | Text("\(NetrekMath.teamLetter(team: player.team))\(NetrekMath.playerLetter(playerId: player.playerId))") 35 | Text(" ").overlay(Text(player.name)) 36 | //Text(player.name) 37 | Text(" ").overlay(Text(player.rank.description)) 38 | //Text(player.rank.description) 39 | Text(player.ship?.description ?? "??") 40 | Text("Kills \(player.kills,specifier: "%.2f")") 41 | }.padding(.leading) 42 | .font(.system(.body, design: .monospaced)) 43 | .foregroundColor(NetrekMath.color(team: player.team)) 44 | } 45 | Spacer() 46 | }.padding(10) 47 | } 48 | } 49 | 50 | /*struct StatisticsView_Previews: PreviewProvider { 51 | static var previews: some View { 52 | StatisticsView() 53 | } 54 | }*/ 55 | -------------------------------------------------------------------------------- /NetrekMacOS/Views/StrategicOffset.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StrategicOffset.swift 3 | // Netrek2 4 | // 5 | // Created by Darrell Root on 5/9/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol StrategicOffset { 12 | 13 | } 14 | 15 | extension StrategicOffset { 16 | func screenX(netrekPositionX: Int,screenWidth: CGFloat) -> CGFloat { 17 | //return (screenWidth * CGFloat(netrekPositionX) / CGFloat(NetrekMath.galacticSize)) - screenWidth / 2 18 | return (screenWidth * CGFloat(netrekPositionX) / CGFloat(NetrekMath.galacticSize)) //- screenWidth / 2 19 | } 20 | func screenY(netrekPositionY: Int,screenHeight: CGFloat) -> CGFloat { 21 | //return -(screenHeight * CGFloat(netrekPositionY) / CGFloat(NetrekMath.galacticSize)) + screenHeight / 2 22 | return -(screenHeight * CGFloat(netrekPositionY) / CGFloat(NetrekMath.galacticSize)) + screenHeight /// 2 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /PRIVACY: -------------------------------------------------------------------------------- 1 | Swift Netrek Client Privacy Policy 2 | 3 | The “Netrek” client published by Darrell Root (formerly Network Mom LLC) in the MacOS App 4 | Store and on this website is referred to as the “Swift Netrek Client” in this policy. 5 | 6 | Darrell does not want your private information and does not use the “Swift Netrek Client” 7 | to harvest your private information. But using the “Swift Netrek client” requires connecting 8 | to Netrek servers which are outside of our control. 9 | 10 | 1. The “Swift Netrek Client” requires outbound network connections to play the game and update 11 | the list of game servers. It does not use outbound network connections for any other purpose. 12 | 13 | 2. Playing the game Netrek requires that the “Swift Netrek Client” connect to Netrek game 14 | servers on the Internet. These are public-domain game servers run by volunteers outside 15 | of our control. The servers receive client IP address and login information (name, 16 | username, and password as entered in on the login information window). The servers also 17 | receive any chat messages sent. The servers may log this information. In particular, 18 | netrek servers are known for storing the password in an insecure manner. We recommend 19 | you use a different Netrek password than any other account, and do not consider the password 20 | secure. Alternatively, play as a guest. 21 | 22 | 3. The password sent to the Netrek game servers is sent via an obsolete network protocol 23 | outside of our control. This protocol is _not_ encrypted. We recommend you use a different 24 | Netrek password than any other account, and do not consider this password secure. Alternatively, 25 | play as a guest. 26 | 27 | 4. The “Swift Netrek Client” does not include any 3rd party app metrics or advertisement libraries. 28 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | 2 | 3 | This repository has 2 targets: Netrek for MacOS and Netrek for iPadOS. Most of the data model and many of the views are reused between the two targets. 4 | 5 | SwiftNetrek - 5 June 2020 6 | 7 | If you just want to grab a MacOS 10.15 or later binary to play Netrek, download "Netrek" from the MacOS App Store. Free download. 8 | 9 | Netrek is the original Internet team game, originally implemented in C in 1989 by Kevin Smith and Scott Silvey for UNIX Workstations running X-windows. Netrek was based on XTrek, written by Chris Guthrie in 1986. XTrek used XWindow remote displays to allow one host to run several clients on a LAN. Netrek was open sourced with very lenient copyright notices. 10 | 11 | Netrek is a client-server application. As of April 2019, Netrek servers remain implemented in C and run on UNIX/Linux computers. There are many Netrek clients in several languages, including C, Java, Python, Objective C and even HTML5! 12 | 13 | This project is a Netrek client reimplementation using Swift for MacOS. It does not use any source code from prior implementations, but (of course) uses the original Netrek network API to talk to the remote Netrek server over TCP. Because we do not use any prior source code, we switched from the historic copyright.h and copyright2.h licenses to the standard MIT license. The licenses are equivalent (granting full programmer permission, but with an "AS IS" legal disclaimer). 14 | 15 | This client uses SwiftUI for graphics. For an older (no longer supported) MacOS 10.14-compatible version using SpriteKit, check out https://github.com/darrellroot/SwiftNetrek or download the older binary from http://networkmom.net/netrek/ 16 | 17 | HELP BUNDLE NOTE: Do not directly modify files under Netrek/Resources/Netrek.help. That directory is built from Netrek.pchelp by the HelpCrafter application. 18 | -------------------------------------------------------------------------------- /SUPPORT: -------------------------------------------------------------------------------- 1 | Netrek is the _original_ Internet team strategy game. First implemented in 1989, 2 | Netrek pits two teams of up to 8 players each against each other for control of the galaxy. 3 | 4 | Use torpedoes and lasers to destroy enemy ships. 5 | 6 | Bomb enemy planets. 7 | 8 | Land armies to capture planets. 9 | 10 | Work as a team to wipe your enemy from the galaxy. 11 | 12 | This Netrek client is implemented in Swift and SwiftUI and is open source at 13 | https://github.com/darrellroot/Netrek-SwiftUI 14 | 15 | Historic information and documentation about Netrek is available at http://www.netrek.org 16 | 17 | Join the "Netrek-forever" Google group to get notifications of scheduled "human" games. 18 | In the meantime practice against the robots! 19 | 20 | Starting Instructions: 21 | 1) Select a server (we recommend a "Bronco" style server such as pickled.netrek.org). 22 | 2) Launch cruiser. 23 | 3) A "Team not allowed" message may appear. If that happens select a different team and repeat #2. 24 | 25 | If no other humans are playing, practice against the robots! 26 | 27 | Game controls: 28 | 29 | Tapping near center of the screen fires torpedoes. 30 | Tapping near the edge of the screen sets course. 31 | Stepper in bottom-right sets speed. 32 | The first tap on an enemy ship fires a laser. 33 | More taps on enemy ships fire torpedoes. 34 | Lasers recharge in 1 second. 35 | Tapping on a planet locks onto the planet for orbit. 36 | Pinch to zoom in the tactical window. 37 | Exit by clicking both self destruct buttons. 38 | 39 | At this time, the iOS and iPadOS versions of Netrek are not recommend for the "hockey" 40 | variant of the game due to lack of tractor/pressor controls. 41 | 42 | For questions or support email networkmom@proton.me 43 | -------------------------------------------------------------------------------- /Shared/Communication/MessagesController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MessagesController.swift 3 | // NetrekIPad 4 | // 5 | // Created by Darrell Root on 6/10/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import SwiftUI 11 | 12 | class MessagesController { 13 | #if os(macOS) 14 | let appDelegate = NSApplication.shared.delegate as! AppDelegate 15 | #elseif os(iOS) 16 | let appDelegate = UIApplication.shared.delegate as! AppDelegate 17 | #endif 18 | 19 | var universe: Universe 20 | 21 | init(universe: Universe) { 22 | self.universe = universe 23 | } 24 | 25 | func sendMayday() { 26 | guard appDelegate.gameState == .gameActive else { return } 27 | let me = Universe.universe.players[Universe.universe.me] 28 | let (planetOptional,_) = findClosestPlanet(location: CGPoint(x: me.positionX,y: me.positionY)) 29 | guard let planet = planetOptional else { return } 30 | 31 | let message = "MAYDAY near \(planet.name) shields \(me.shieldStrength) damage \(me.damage) armies \(me.armies)" 32 | self.sendMessage(message: message, sendToAll: false) 33 | } 34 | func sendEscort() { 35 | guard appDelegate.gameState == .gameActive else { return } 36 | let me = Universe.universe.players[Universe.universe.me] 37 | let (planetOptional,_) = findClosestPlanet(location: CGPoint(x: me.positionX,y: me.positionY)) 38 | guard let planet = planetOptional else { return } 39 | 40 | let message = "Request Escort near \(planet.name) shields \(me.shieldStrength) damage \(me.damage) armies \(me.armies)" 41 | self.sendMessage(message: message, sendToAll: false) 42 | } 43 | 44 | func sendMessage(message: String) { 45 | self.sendMessage(message: message, sendToAll: false) 46 | } 47 | func sendMessage(message: String, sendToAll: Bool) { 48 | if message == "" { 49 | return 50 | } 51 | if sendToAll { 52 | let data = MakePacket.cpMessage(message: message, team: .independent, individual: 0) 53 | self.appDelegate.reader?.send(content: data) 54 | } else { 55 | let data = MakePacket.cpMessage(message: message, team: self.universe.players[self.universe.me].team, individual: 0) 56 | self.appDelegate.reader?.send(content: data) 57 | } 58 | } 59 | private func findClosestPlanet(location: CGPoint) -> (planet: Planet?,distance: Int) { 60 | var closestPlanetDistance = 10000 61 | var closestPlanet: Planet? 62 | for planet in Universe.universe.planets { 63 | let thisPlanetDistance = abs(planet.positionX - Int(location.x)) + abs(planet.positionY - Int(location.y)) 64 | if thisPlanetDistance < closestPlanetDistance { 65 | closestPlanetDistance = thisPlanetDistance 66 | closestPlanet = planet 67 | } 68 | } 69 | return (closestPlanet,closestPlanetDistance) 70 | } 71 | 72 | } 73 | -------------------------------------------------------------------------------- /Shared/Enumerations/AlertCondition.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AlertCondition.swift 3 | // Netrek2 4 | // 5 | // Created by Darrell Root on 5/5/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import SwiftUI 11 | 12 | enum AlertCondition: CaseIterable { 13 | case green 14 | case yellow 15 | case red 16 | 17 | var color: Color { 18 | switch self { 19 | case .green: 20 | return Color.green 21 | case .yellow: 22 | return Color.yellow 23 | case .red: 24 | return Color.red 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Shared/Enumerations/Data-extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Data-extension.swift 3 | // Netrek 4 | // 5 | // Created by Darrell Root on 3/2/19. 6 | // Copyright © 2019 Network Mom LLC. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | extension Data { 11 | 12 | init(from value: T) { 13 | self = Swift.withUnsafeBytes(of: value) { Data($0) } 14 | } 15 | 16 | func to(type: T.Type) -> T { 17 | return self.withUnsafeBytes { $0.pointee } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Shared/Enumerations/GameScreen.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GameScreen.swift 3 | // NetrekIPad 4 | // 5 | // Created by Darrell Root on 6/10/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | //Whenever gameState changes, gameScreen matches 12 | //But we can manually change gameScreen to go to help or credits without changing gameState 13 | 14 | enum GameScreen: String, CaseIterable { 15 | case noServerSelected 16 | case serverSelected 17 | case serverConnected 18 | case serverSlotFound 19 | case loginAccepted 20 | case gameActive 21 | case howToPlay 22 | case credits 23 | case preferences 24 | } 25 | -------------------------------------------------------------------------------- /Shared/Enumerations/GameState.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GameState.swift 3 | // Netrek2 4 | // 5 | // Created by Darrell Root on 5/5/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | //Whenever gameState changes, gameScreen matches 12 | //But we can manually change gameScreen to go to help or credits without changing gameState 13 | 14 | enum GameState: String, CaseIterable { 15 | case noServerSelected 16 | case serverSelected 17 | case serverConnected 18 | case serverSlotFound 19 | case loginAccepted 20 | case gameActive 21 | } 22 | -------------------------------------------------------------------------------- /Shared/Enumerations/LoginDefault.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LoginDefault.swift 3 | // Netrek2 4 | // 5 | // Created by Darrell Root on 5/5/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | enum LoginDefault: String { 11 | case loginName = "loginName" 12 | case userInfo = "userInfo" 13 | case loginAuthenticated = "loginAuthenticated" 14 | } 15 | -------------------------------------------------------------------------------- /Shared/Enumerations/PlayerStatus.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PlayerStatus.swift 3 | // Netrek2 4 | // 5 | // Created by Darrell Root on 5/5/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | enum PlayerStatus: UInt32 { 12 | case shield = 0x0001 13 | case repair = 0x0002 14 | case bomb = 0x0004 15 | case orbit = 0x0008 16 | case cloak = 0x0010 17 | case weaponTemp = 0x0020 18 | case engineTemp = 0x0040 19 | case robot = 0x0080 20 | case beamup = 0x0100 21 | case beamdown = 0x0200 22 | case selfDestruct = 0x0400 23 | case greenAlert = 0x0800 24 | case yellowAlert = 0x1000 25 | case redAlert = 0x2000 26 | case playerLock = 0x4000 27 | case planetLock = 0x8000 28 | case coPilot = 0x10000 // not displayed 29 | case war = 0x20000 30 | case practiceRobot = 0x40000 31 | case dock = 0x80000 32 | case refit = 0x100000 // not displayed 33 | case refitting = 0x200000 34 | case tractor = 0x400000 35 | case pressor = 0x800000 36 | case dockOk = 0x1000000 37 | case seen = 0x2000000 38 | case observe = 0x8000000 39 | case transWarp = 0x40000000 // paradise mode 40 | case bpRobot = 0x80000000 41 | } 42 | -------------------------------------------------------------------------------- /Shared/Enumerations/Rank.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Rank.swift 3 | // Netrek2 4 | // 5 | // Created by Darrell Root on 5/5/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | enum Rank: Int, CaseIterable { 12 | case ensign = 0 13 | case lieutenant = 1 14 | case ltCmdr = 2 15 | case commander = 3 16 | case captain = 4 17 | case fleetCapt = 5 18 | case commodore = 6 19 | case rearAdm = 7 20 | case admiral = 8 21 | 22 | var description: String { 23 | switch self { 24 | 25 | case .ensign: 26 | return "Ensign" 27 | case .lieutenant: 28 | return "Lieutenant" 29 | case .ltCmdr: 30 | return "Lt. Cmdr." 31 | case .commander: 32 | return "Commander" 33 | case .captain: 34 | return "Captain" 35 | case .fleetCapt: 36 | return "Flt. Capt." 37 | case .commodore: 38 | return "Commodore" 39 | case .rearAdm: 40 | return "Rear Adm." 41 | case .admiral: 42 | return "Admiral" 43 | } 44 | 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /Shared/Enumerations/ShipType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ShipType.swift 3 | // Netrek2 4 | // 5 | // Created by Darrell Root on 5/5/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | enum ShipType: Int, CaseIterable { 12 | case scout = 0 13 | case destroyer = 1 14 | case cruiser = 2 15 | case battleship = 3 16 | case assault = 4 17 | case starbase = 5 18 | case battlecruiser = 6 19 | //case att = 7 20 | var description: String { 21 | switch self { 22 | 23 | case .scout: 24 | return "SC" 25 | case .destroyer: 26 | return "DD" 27 | case .cruiser: 28 | return "CA" 29 | case .battleship: 30 | return "BB" 31 | case .assault: 32 | return "AS" 33 | case .starbase: 34 | return "SB" 35 | case .battlecruiser: 36 | return "BC" 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Shared/Enumerations/SlotStatus.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SlotStatus.swift 3 | // Netrek2 4 | // 5 | // Created by Darrell Root on 5/5/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | enum SlotStatus: Int { 12 | case free = 0 13 | case outfit = 1 14 | case alive = 2 15 | case explode = 3 16 | case dead = 4 17 | case observe = 5 18 | } 19 | -------------------------------------------------------------------------------- /Shared/Enumerations/Team.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Team.swift 3 | // Netrek2 4 | // 5 | // Created by Darrell Root on 5/5/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | // teams_numeric = {IND: -1, FED: 0, ROM: 1, KLI: 2, ORI: 3} for joining games 12 | 13 | enum Team: Int, CaseIterable { 14 | case independent = 0 15 | case federation = 1 16 | case roman = 2 17 | case kazari = 4 18 | case orion = 8 19 | case ogg = 15 20 | 21 | var description: String { 22 | switch self { 23 | 24 | case .independent: 25 | return "Independent" 26 | case .federation: 27 | return "Federation" 28 | case .roman: 29 | return "Roman" 30 | case .kazari: 31 | return "Kazari" 32 | case .orion: 33 | return "Orion" 34 | case .ogg: 35 | return "Ogg" 36 | } 37 | } 38 | var letter: String { 39 | switch self { 40 | case .independent: 41 | return "I" 42 | case .federation: 43 | return "F" 44 | case .roman: 45 | return "R" 46 | case .kazari: 47 | return "K" 48 | case .orion: 49 | return "O" 50 | case .ogg: 51 | return "I" 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /Shared/Enumerations/Zposition.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Zposition.swift 3 | // Netrek2 4 | // 5 | // Created by Darrell Root on 5/5/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | enum ZPosition: CGFloat { 12 | case planet = 1.0 13 | case ship = 3.0 14 | case torpedo = 4.0 15 | case explosion = 5.0 16 | case hint = 6.0 17 | } 18 | -------------------------------------------------------------------------------- /Shared/Extensions/Collection-extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Collection-extension.swift 3 | // Netrek 4 | // 5 | // Created by Darrell Root on 3/1/19. 6 | // Copyright © 2019 Network Mom LLC. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | extension Collection { 11 | 12 | /// Returns the element at the specified index if it is within bounds, otherwise nil. 13 | subscript (safe index: Index) -> Element? { 14 | return indices.contains(index) ? self[index] : nil 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Shared/Extensions/UserDefaults-extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UserDefaults-extension.swift 3 | // Netrek 4 | // 5 | // Created by Darrell Root on 3/14/19. 6 | // Copyright © 2019 Network Mom LLC. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | extension UserDefaults { 11 | func setString(string: String, forKey: String) { 12 | set(string, forKey: forKey) 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Shared/Global/Globals.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Globals.swift 3 | // Netrek 4 | // 5 | // Created by Darrell Root on 3/1/19. 6 | // Copyright © 2019 Network Mom LLC. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | // packet type globals 12 | 13 | let UPDATE_RATE = 20 // number of attempts to update per second 14 | let NAME_LEN = 16 15 | let MAXPLANETS = 40 16 | let MAXPLAYERS = 32 17 | 18 | 19 | let SOCKVERSION: UInt8 = 4 20 | let UDPVERSION: UInt8 = 10 21 | 22 | let WELLKNOWNSERVERS = [ 23 | "pickled.netrek.org", 24 | "continuum.us.netrek.org" 25 | ] 26 | let WELLKNOWNPORT = 2592 27 | 28 | let PACKET_SIZES: [Int] = [ 29 | 0, // NULL 30 | 84, // SP_MESSAGE 31 | 4, // SP_PLAYER_INFO 32 | 8, // SP_KILLS 33 | 12, // SP_PLAYER 34 | 8, // SP_TORP_INFO 35 | 12, // SP_TORP 36 | 16, // SP_PHASER 37 | 8, // SP_PLASMA_INFO 38 | 12, // SP_PLASMA 39 | 84, // SP_WARNING 40 | 84, // SP_MOTD 41 | 32, // SP_YOU 42 | 4, // SP_QUEUE 43 | 28, // SP_STATUS 44 | 12, // SP_PLANET 45 | 4, // SP_PICKOK 46 | 104, // SP_LOGIN 47 | 8, // SP_FLAGS 48 | 4, // SP_MASK 49 | 4, // SP_PSTATUS 50 | 4, // SP_BADVERSION 51 | 4, // SP_HOSTILE 52 | 56, // SP_STATS 53 | 52, // SP_PL_LOGIN 54 | 20, // SP_RESERVED 55 | 28, // SP_PLANET_LOC 56 | 0, // SP_SCAN 57 | 8, // SP_UDP_REPLY 58 | 4, // SP_SEQUENCE 59 | 4, // SP_SC_SEQUENCE 60 | 36, // SP_RSA_KEY 61 | 32, // SP_MOTD_PIC // error is SP_GENERIC_32 62 | 0, // 33 63 | 0, // 34 64 | 0, // 35 65 | 0, // 36 66 | 0, // 37 67 | 0, // 38 68 | 60, // SP_SHIP_CAP 69 | 8, // SP_S_REPLY 70 | -1, // SP_S_MESSAGE 71 | -1, // SP_S_WARNING 72 | 12, // SP_S_YOU 73 | 12, // SP_S_YOU_SS 74 | -1, // SP_S_PLAYER 75 | 8, // SP_PING 76 | -1, // SP_S_TORP 77 | -1, // SP_S_TORP_INFO 78 | 20, // SP_S_8_TORP 79 | -1, // SP_S_PLANET 80 | 0, // 51 81 | 0, // 52 82 | 0, // 53 83 | 0, // 54 84 | 0, // 55 85 | 0, // SP_S_SEQUENCE 86 | -1, // SP_S_PHASER 87 | -1, // SP_S_KILLS 88 | 36, // SP_S_STATS 89 | 88, // SP_FEATURE 90 | 524 // SP_BITMAP 91 | ] 92 | 93 | 94 | 95 | 96 | 97 | -------------------------------------------------------------------------------- /Shared/Model/Plasma.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Plasma.swift 3 | // Netrek 4 | // 5 | // Created by Darrell Root on 3/5/19. 6 | // Copyright © 2019 Network Mom LLC. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import SwiftUI 11 | 12 | class Plasma: ObservableObject { 13 | #if os(macOS) 14 | lazy var appDelegate = NSApplication.shared.delegate as! AppDelegate 15 | #elseif os(iOS) 16 | lazy var appDelegate = UIApplication.shared.delegate as! AppDelegate 17 | #endif 18 | 19 | private(set) var plasmaId: Int 20 | @Published private(set) var status = 0 21 | private(set) var war: [Team:Bool] = [:] 22 | private(set) var directionNetrek = 0 23 | private(set) var direction = 0.0 24 | @Published private(set) var positionX = 0 25 | @Published private(set) var positionY = 0 26 | @Published var color: Color = Color.red 27 | 28 | private var soundPlayed = false 29 | 30 | init(plasmaId: Int) { 31 | self.plasmaId = plasmaId 32 | } 33 | public func reset() { 34 | self.positionX = 0 35 | self.positionY = 0 36 | self.status = 0 37 | } 38 | 39 | //from SP_PLASMA_INFO 8 40 | public func update(plasmaId: Int, war: UInt8, status: Int) { 41 | DispatchQueue.main.async { 42 | self.plasmaId = plasmaId 43 | for team in Team.allCases { 44 | if UInt8(team.rawValue) & war != 0 { 45 | self.war[team] = true 46 | } else { 47 | self.war[team] = false 48 | } 49 | } 50 | let myTeam = Universe.universe.players[Universe.universe.me].team 51 | //DispatchQueue.main.async { 52 | if self.war[myTeam] == true { 53 | self.color = Color.red 54 | } else { 55 | self.color = Color.green 56 | } 57 | self.status = status 58 | //} 59 | if status == 1 { 60 | self.soundPlayed = false 61 | } 62 | } 63 | } 64 | // from SP_PLASMA 9 65 | func update(positionX: Int, positionY: Int) { 66 | DispatchQueue.main.async { 67 | self.positionX = positionX 68 | self.positionY = positionY 69 | if self.soundPlayed == false { 70 | let me = Universe.universe.me 71 | let taxiDistance = abs(Universe.universe.players[me].positionX - self.positionX) + abs(Universe.universe.players[me].positionY - self.positionY) 72 | if taxiDistance < NetrekMath.displayDistance / 3 { 73 | let volume = 1.0 - (3.0 * Float(taxiDistance) / (NetrekMath.displayDistanceFloat)) 74 | SoundController.soundController.play(sound: .plasma, volume: volume) 75 | debugPrint("playing plasma sound volume \(volume)") 76 | self.soundPlayed = true 77 | } 78 | } 79 | } 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /Shared/Model/ShipInfo.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Ship.swift 3 | // Netrek 4 | // 5 | // Created by Darrell Root on 3/9/19. 6 | // Copyright © 2019 Network Mom LLC. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class ShipInfo { 12 | var shipType: ShipType 13 | var torpSpeed: Int 14 | var phaserRange: Int 15 | var phaserRecharge: Double { 16 | switch self.shipType { 17 | case .battleship: 18 | return 0.5 19 | default: 20 | return 1.0 21 | } 22 | } 23 | var maxSpeed: Int 24 | var maxFuel: Int 25 | var maxShield: Int 26 | var maxDamage: Int 27 | var maxWpnTmp: Int 28 | var maxEngTmp: Int 29 | var width: Int 30 | var height: Int 31 | var maxArmies: Int 32 | //var letter: String 33 | //var shipName: String 34 | //var designator: String 35 | //var bitmap: Int 36 | 37 | init(shipType: ShipType, torpSpeed: Int, phaserRange: Int, maxSpeed: Int, maxFuel: Int, maxShield: Int, maxDamage: Int, maxWpnTmp: Int, maxEngTmp: Int, width: Int, height: Int, maxArmies: Int) { 38 | self.shipType = shipType 39 | self.torpSpeed = torpSpeed 40 | self.phaserRange = phaserRange 41 | self.maxSpeed = maxSpeed 42 | self.maxFuel = maxFuel 43 | self.maxShield = maxShield 44 | self.maxDamage = maxDamage 45 | self.maxWpnTmp = maxWpnTmp 46 | self.maxEngTmp = maxEngTmp 47 | self.width = width 48 | self.height = height 49 | self.maxArmies = maxArmies 50 | 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /Shared/Model/Torpedo.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Torpedo.swift 3 | // Netrek 4 | // 5 | // Created by Darrell Root on 3/5/19. 6 | // Copyright © 2019 Network Mom LLC. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import SwiftUI 11 | import Combine 12 | 13 | class Torpedo: ObservableObject { 14 | 15 | var torpedoId: Int = 0 16 | @Published var status: UInt8 = 0 17 | //0 = inactive, 1=active, 2 = exploding? 18 | 19 | //public var displayed: Bool = false 20 | private(set) var war: [Team:Bool] = [:] 21 | var directionNetrek: Int = 0 // netrek format direction for now 22 | var direction: Double = 0.0 // in radians 23 | @Published var positionX: Int = 0 24 | @Published var positionY: Int = 0 25 | @Published var color: Color = Color.red 26 | 27 | public func reset() { 28 | self.positionX = 0 29 | self.positionY = 0 30 | self.status = 0 31 | } 32 | 33 | private var soundPlayed = false 34 | /*var torpedoNode = SKSpriteNode(color: .red, 35 | size: CGSize(width: NetrekMath.torpedoSize, height: NetrekMath.torpedoSize))*/ 36 | 37 | init(torpedoId: Int) { 38 | self.torpedoId = torpedoId 39 | } 40 | func update(war: UInt8, status: UInt8) { 41 | DispatchQueue.main.async { 42 | for team in Team.allCases { 43 | if UInt8(team.rawValue) & war != 0 { 44 | self.war[team] = true 45 | } else { 46 | self.war[team] = false 47 | } 48 | } 49 | let myTeam = Universe.universe.players[Universe.universe.me].team 50 | //DispatchQueue.main.async { 51 | if self.war[myTeam] == true { 52 | self.color = Color.red 53 | } else { 54 | self.color = Color.green 55 | } 56 | self.status = status 57 | //} 58 | if status == 1 { 59 | self.soundPlayed = false 60 | } 61 | } 62 | } 63 | func update(directionNetrek: Int, positionX: Int, positionY: Int) { 64 | if self.status == 0 { 65 | return 66 | } 67 | DispatchQueue.main.async { 68 | self.positionX = positionX 69 | self.positionY = positionY 70 | } 71 | if soundPlayed == false { 72 | let me = Universe.universe.players[Universe.universe.me] 73 | let taxiDistance = abs(me.positionX - self.positionX) + abs(me.positionY - self.positionY) 74 | if taxiDistance < NetrekMath.displayDistance / 4 { 75 | let volume = 1.0 - (4.0 * Float(taxiDistance) / (NetrekMath.displayDistanceFloat)) 76 | 77 | SoundController.soundController.play(sound: .torpedo, volume: volume) 78 | debugPrint("playing torpedo sound volume \(volume)") 79 | soundPlayed = true 80 | } 81 | } 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /Shared/Model/UpdateCounter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TimerCount.swift 3 | // Netrek2 4 | // 5 | // Created by Darrell Root on 7/24/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class UpdateCounter: ObservableObject { 12 | @Published private (set) var count: Int = 0 13 | let name: String 14 | init(name: String) { 15 | self.name = name 16 | } 17 | public func increment() { 18 | DispatchQueue.main.async { 19 | self.count += 1 20 | //debugPrint("counter \(self.name) \(self.count)") 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Shared/Protocols/NetworkDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NetworkDelegate.swift 3 | // Netrek 4 | // 5 | // Created by Darrell Root on 3/1/19. 6 | // Copyright © 2019 Network Mom LLC. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | protocol NetworkDelegate { 11 | func gotData(data: Data, from: String, port: Int) 12 | } 13 | -------------------------------------------------------------------------------- /Shared/Sounds/175262__jonccox__gun-cannon.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/Shared/Sounds/175262__jonccox__gun-cannon.wav -------------------------------------------------------------------------------- /Shared/Sounds/175265__jonccox__gun-thumper.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/Shared/Sounds/175265__jonccox__gun-thumper.wav -------------------------------------------------------------------------------- /Shared/Sounds/175266__jonccox__gun-spark.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/Shared/Sounds/175266__jonccox__gun-spark.wav -------------------------------------------------------------------------------- /Shared/Sounds/175267__jonccox__gun-plasma.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/Shared/Sounds/175267__jonccox__gun-plasma.wav -------------------------------------------------------------------------------- /Shared/Sounds/175269__jonccox__gun-zap2.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/Shared/Sounds/175269__jonccox__gun-zap2.wav -------------------------------------------------------------------------------- /Shared/Sounds/175270__jonccox__gun-zap.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/Shared/Sounds/175270__jonccox__gun-zap.wav -------------------------------------------------------------------------------- /Shared/Sounds/399303__deleted-user-5405837__explosion-012.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/Shared/Sounds/399303__deleted-user-5405837__explosion-012.mp3 -------------------------------------------------------------------------------- /Shared/Sounds/71852__ludvique__digital-whoosh-soft.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darrellroot/Netrek-SwiftUI/1880824e4d8ecb101d27f88e8e57f45a18dc5bfc/Shared/Sounds/71852__ludvique__digital-whoosh-soft.wav -------------------------------------------------------------------------------- /Shared/Sounds/SoundController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // soundController.swift 3 | // Netrek 4 | // 5 | // Created by Darrell Root on 3/13/19. 6 | // Copyright © 2019 Network Mom LLC. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import SwiftUI 11 | import AVFoundation 12 | 13 | enum Sound: String, CaseIterable { 14 | case explosion = "399303__deleted-user-5405837__explosion-012.mp3" 15 | case torpedo = "175269__jonccox__gun-zap2.wav" 16 | case laser = "175265__jonccox__gun-thumper.wav" 17 | case plasma = "175267__jonccox__gun-plasma.wav" 18 | case detonate = "175270__jonccox__gun-zap.wav" 19 | case shield = "71852__ludvique__digital-whoosh-soft.wav" 20 | } 21 | class SoundController { 22 | 23 | static let soundController = SoundController() 24 | 25 | let soundDisabledKey = "soundDisabled" 26 | private(set) var soundDisabled = false 27 | let soundThreads = 8 28 | 29 | //private var audioList: [AVAudioPlayer] = [] 30 | private var soundList: [Sound:[AVAudioPlayer]] = [:] 31 | init() { 32 | 33 | self.soundDisabled = UserDefaults.standard.bool(forKey: soundDisabledKey) 34 | 35 | for soundCandidate in Sound.allCases { 36 | if let pathToSound = Bundle.main.url(forResource: soundCandidate.rawValue, withExtension: "") { 37 | var audioList: [AVAudioPlayer] = [] 38 | for _ in 0.. 4 ? .heavy : .light) 24 | Image(self.planet.imageName(myTeam: self.me.team)) 25 | .resizable() 26 | .aspectRatio(contentMode: .fit) 27 | .frame(width: self.planetWidth(screenWidth: self.screenWidth, visualWidth: self.universe.visualWidth), height: self.planetWidth(screenWidth: self.screenHeight, visualWidth: self.universe.visualWidth)) 28 | .colorMultiply(self.planet.seen[self.me.team]! ? NetrekMath.color(team: self.planet.owner) : Color.gray) 29 | .contentShape(Rectangle()) 30 | Text(self.planet.name).fontWeight((self.planet.armies > 4 && self.planet.seen[self.me.team]!) ? .heavy : .light) 31 | } 32 | .offset(x: self.xOffset(positionX: self.planet.positionX, myPositionX: self.me.positionX,tacticalWidth: self.screenWidth, visualWidth: self.universe.visualWidth), y: self.yOffset(positionY: self.planet.positionY, myPositionY: self.me.positionY, tacticalHeight: self.screenHeight, visualHeight: self.universe.visualWidth * self.screenHeight / self.screenWidth)) 33 | .animation(Animation.linear(duration: 0.1)) 34 | //.offset(x: self.xOffset(positionX: self.planet.positionX, myPositionX: self.me.positionX,tacticalWidth: geo.size.width), y: self.yOffset(positionY: self.planet.positionY, myPositionY: self.me.positionY, tacticalHeight: geo.size.height)) 35 | 36 | //} 37 | 38 | } 39 | 40 | } 41 | 42 | /*struct PlanetView_Previews: PreviewProvider { 43 | static var previews: some View { 44 | PlanetView() 45 | } 46 | }*/ 47 | -------------------------------------------------------------------------------- /Shared/Views/PlasmaView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PlasmaView.swift 3 | // Netrek2 4 | // 5 | // Created by Darrell Root on 5/7/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct PlasmaView: View, TacticalOffset { 12 | @ObservedObject var plasma: Plasma 13 | @ObservedObject var me: Player 14 | @ObservedObject var universe: Universe 15 | var screenWidth: CGFloat 16 | var screenHeight: CGFloat 17 | 18 | //@ViewBuilder 19 | var body: some View { 20 | //if torpedo.status == 1 { 21 | //return GeometryReader { geo in 22 | self.plasma.color 23 | .frame(width: self.plasmaWidth(screenWidth: self.screenWidth, visualWidth: self.universe.visualWidth), height: self.plasmaWidth(screenWidth: self.screenHeight, visualWidth: self.universe.visualWidth)) 24 | .contentShape(Rectangle()) 25 | .offset(x: self.xOffset(positionX: self.plasma.positionX, myPositionX: self.me.positionX,tacticalWidth: self.screenWidth, visualWidth: self.universe.visualWidth), y: self.yOffset(positionY: self.plasma.positionY, myPositionY: self.me.positionY, tacticalHeight: self.screenHeight, visualHeight: self.universe.visualWidth * self.screenHeight / self.screenWidth)) 26 | .opacity(self.plasma.status == 1 ? 1 : 0) 27 | //.animation(Animation.linear) 28 | //} 29 | //} 30 | } 31 | } 32 | 33 | /*struct TorpedoView_Previews: PreviewProvider { 34 | static var previews: some View { 35 | TorpedoView() 36 | } 37 | }*/ 38 | -------------------------------------------------------------------------------- /Shared/Views/PlayerView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PlayerView.swift 3 | // Netrek2 4 | // 5 | // Created by Darrell Root on 5/6/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct PlayerView: View, TacticalOffset { 12 | @ObservedObject var player: Player 13 | @ObservedObject var me: Player 14 | @ObservedObject var universe: Universe 15 | var imageSize: CGFloat 16 | var screenWidth: CGFloat 17 | var screenHeight: CGFloat 18 | 19 | 20 | var body: some View { 21 | //return geometryReader { geo in 22 | ZStack { 23 | Circle() 24 | .stroke(Color.green) 25 | .frame(width: self.imageSize, height: self.imageSize) 26 | .opacity(self.shieldOpacity) 27 | //.opacity(self.player.shieldsUp ? 1.0 : 0.0) 28 | //.opacity(Double(self.player.shieldStrength) / 100.0) 29 | VStack { 30 | //self.planet.image 31 | Text(self.player.name) 32 | .fontWeight(self.player.kills > 1.9 ? .heavy : .light) 33 | .minimumScaleFactor(0.7).foregroundColor(NetrekMath.color(team: self.player.team)) 34 | Image(self.player.imageName) 35 | .resizable() 36 | .aspectRatio(contentMode: .fit) 37 | .frame(width: self.imageSize, height: self.imageSize) 38 | .rotationEffect(Angle(radians: -self.player.direction)) 39 | Text("\(self.player.ship?.description ?? "") \(self.player.kills, specifier: "%.2f")") 40 | .fontWeight(self.player.kills > 1.9 ? .heavy : .light) 41 | .minimumScaleFactor(0.7).foregroundColor(NetrekMath.color(team: self.player.team)) 42 | } 43 | } 44 | .opacity(self.player.cloak && self.me === self.player ? 0.4 : 1.0) 45 | .opacity(self.player.cloak && self.me !== self.player ? 0.1 : 1.0) 46 | //.offset(x: self.xOffset(positionX: self.player.positionX, myPositionX: self.me.positionX,tacticalWidth: geo.size.width), y: self.yOffset(positionY: self.player.positionY, myPositionY: self.me.positionY, tacticalHeight: geo.size.height)) 47 | .offset(x: self.xOffset(positionX: self.player.positionX, myPositionX: self.me.positionX,tacticalWidth: self.screenWidth, visualWidth: self.universe.visualWidth), y: self.yOffset(positionY: self.player.positionY, myPositionY: self.me.positionY, tacticalHeight: self.screenHeight, visualHeight: self.universe.visualWidth * self.screenHeight / self.screenWidth)) 48 | 49 | .animation(Animation.linear) 50 | 51 | //} 52 | } 53 | //.opacity(self.player.shieldsUp ? 1.0 : 0.0) 54 | //.opacity(Double(self.player.shieldStrength) / 100.0) 55 | var shieldOpacity: Double { 56 | if self.player.shieldsUp == false { 57 | return 0.0 58 | } else { 59 | return max(0.2,Double(self.player.shieldStrength) / 100.0) 60 | } 61 | } 62 | } 63 | 64 | /*struct PlayerView_Previews: PreviewProvider { 65 | static var previews: some View { 66 | PlayerView() 67 | } 68 | }*/ 69 | -------------------------------------------------------------------------------- /Shared/Views/TorpedoView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TorpedoView.swift 3 | // Netrek2 4 | // 5 | // Created by Darrell Root on 5/7/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct TorpedoView: View, TacticalOffset { 12 | var torpedo: Torpedo 13 | var me: Player 14 | var universe: Universe 15 | @ObservedObject var serverUpdate = Universe.universe.serverUpdate 16 | var screenWidth: CGFloat 17 | var screenHeight: CGFloat 18 | 19 | //@ViewBuilder 20 | var body: some View { 21 | //if torpedo.status == 1 { 22 | //return GeometryReader { geo in 23 | self.torpedo.color 24 | .frame(width: self.torpedoWidth(screenWidth: self.screenWidth, visualWidth: self.universe.visualWidth), height: self.torpedoWidth(screenWidth: self.screenWidth, visualWidth: self.universe.visualWidth)) 25 | .contentShape(Rectangle()) 26 | .offset(x: self.xOffset(positionX: self.torpedo.positionX, myPositionX: self.me.positionX,tacticalWidth: self.screenWidth, visualWidth: self.universe.visualWidth), y: self.yOffset(positionY: self.torpedo.positionY, myPositionY: self.me.positionY, tacticalHeight: self.screenHeight, visualHeight: self.universe.visualWidth * self.screenHeight / self.screenWidth)) 27 | 28 | //.opacity(self.torpedo.status == 1 ? 1 : 0) 29 | //.animation(Animation.linear(duration: 0.1)) 30 | 31 | //.animation(Animation.linear(duration: 0.1)) 32 | } 33 | //} 34 | //} 35 | } 36 | 37 | /*struct TorpedoView_Previews: PreviewProvider { 38 | static var previews: some View { 39 | TorpedoView() 40 | } 41 | }*/ 42 | -------------------------------------------------------------------------------- /Shared/Views/TractorView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TractorView.swift 3 | // Netrek2 4 | // 5 | // Created by Darrell Root on 6/3/20. 6 | // Copyright © 2020 Darrell Root. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct TractorView: View, TacticalOffset { 12 | @ObservedObject var target: Player 13 | @ObservedObject var me: Player 14 | @ObservedObject var universe: Universe 15 | var screenWidth: CGFloat 16 | var screenHeight: CGFloat 17 | 18 | @State var phase: CGFloat = 0 19 | 20 | var body: some View { 21 | return GeometryReader { geo in 22 | Path { path in 23 | path.move(to: CGPoint(x: 0, y: 0)) 24 | path.addLine(to: CGPoint(x: self.xOffset(positionX: self.target.positionX, myPositionX: self.me.positionX, tacticalWidth: self.screenWidth, visualWidth: self.universe.visualWidth),y: self.yOffset(positionY: self.target.positionY, myPositionY: self.me.positionY, tacticalHeight: self.screenHeight, visualHeight: self.universe.visualWidth * self.screenHeight / self.screenWidth))) 25 | }.offset(x: geo.size.width / 2, y: geo.size.height / 2) 26 | .stroke(self.me.pressor ? Color.blue : Color.green, style: StrokeStyle(lineWidth: self.playerWidth(screenWidth: geo.size.width, visualWidth: self.universe.visualWidth),dash: [self.playerWidth(screenWidth: geo.size.width, visualWidth: self.universe.visualWidth)], dashPhase: self.phase)) 27 | .opacity(0.5) 28 | .onAppear { self.phase = self.me.pressor ? self.playerWidth(screenWidth: geo.size.width,visualWidth: self.universe.visualWidth) : self.playerWidth(screenWidth: geo.size.width * -1, visualWidth: self.universe.visualWidth) } 29 | .animation(Animation.linear.repeatForever(autoreverses: false)) 30 | } 31 | } 32 | } 33 | 34 | /*struct TractorView_Previews: PreviewProvider { 35 | static var previews: some View { 36 | TractorView() 37 | } 38 | }*/ 39 | --------------------------------------------------------------------------------