diff --git a/ArkitDoushiQi/ArkitDoushiQi.xcodeproj/project.pbxproj b/ArkitDoushiQi/ArkitDoushiQi.xcodeproj/project.pbxproj index df7d269..a08859b 100644 --- a/ArkitDoushiQi/ArkitDoushiQi.xcodeproj/project.pbxproj +++ b/ArkitDoushiQi/ArkitDoushiQi.xcodeproj/project.pbxproj @@ -11,6 +11,16 @@ 82740EBE2C19762C009711A5 /* ArKitView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82740EBD2C19762C009711A5 /* ArKitView.swift */; }; 82740EC02C197A48009711A5 /* ArKitViewRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82740EBF2C197A48009711A5 /* ArKitViewRepresentable.swift */; }; 82740EC22C197C1A009711A5 /* ContentArkit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82740EC12C197C1A009711A5 /* ContentArkit.swift */; }; + 827AC57F2C206374001701CC /* cat.usdz in Resources */ = {isa = PBXBuildFile; fileRef = 827AC57E2C206374001701CC /* cat.usdz */; }; + 827AC5812C206385001701CC /* dog.usdz in Resources */ = {isa = PBXBuildFile; fileRef = 827AC5802C206385001701CC /* dog.usdz */; }; + 827AC5832C206395001701CC /* elephant.usdz in Resources */ = {isa = PBXBuildFile; fileRef = 827AC5822C206395001701CC /* elephant.usdz */; }; + 827AC5852C2063AB001701CC /* leopard.usdz in Resources */ = {isa = PBXBuildFile; fileRef = 827AC5842C2063AB001701CC /* leopard.usdz */; }; + 827AC5872C2063B6001701CC /* lion.usdz in Resources */ = {isa = PBXBuildFile; fileRef = 827AC5862C2063B6001701CC /* lion.usdz */; }; + 827AC5892C2063C7001701CC /* rat.usdz in Resources */ = {isa = PBXBuildFile; fileRef = 827AC5882C2063C7001701CC /* rat.usdz */; }; + 827AC58B2C2063D6001701CC /* tiger.usdz in Resources */ = {isa = PBXBuildFile; fileRef = 827AC58A2C2063D6001701CC /* tiger.usdz */; }; + 827AC58D2C2063E2001701CC /* wolf.usdz in Resources */ = {isa = PBXBuildFile; fileRef = 827AC58C2C2063E2001701CC /* wolf.usdz */; }; + 827AC58E2C206625001701CC /* DSQ.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2A535D82C0F56A700503472 /* DSQ.xcframework */; }; + 827AC58F2C206625001701CC /* DSQ.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = C2A535D82C0F56A700503472 /* DSQ.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 82CCA5442C1C2B6400AFF485 /* board.usdz in Resources */ = {isa = PBXBuildFile; fileRef = 82CCA5432C1C2B6400AFF485 /* board.usdz */; }; 82CCA5462C1C2B8E00AFF485 /* CatPiece.usdz in Resources */ = {isa = PBXBuildFile; fileRef = 82CCA5452C1C2B8E00AFF485 /* CatPiece.usdz */; }; 82CE59E92C045D1100ADEE24 /* GameScene.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82CE59E82C045D1100ADEE24 /* GameScene.swift */; }; @@ -26,7 +36,6 @@ C205A2D42BF373380097BD93 /* WtaTennisUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C205A2D32BF373380097BD93 /* WtaTennisUITestsLaunchTests.swift */; }; C24659E52BF5FE09004E80D5 /* MainMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = C24659E42BF5FE09004E80D5 /* MainMenu.swift */; }; C25220EE2C00AC7E0026B71F /* GameParametersMenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C25220ED2C00AC7E0026B71F /* GameParametersMenuView.swift */; }; - C2A535D92C0F56A800503472 /* DSQ.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2A535D82C0F56A700503472 /* DSQ.xcframework */; }; C2F015092C09D366000F7221 /* LanguageSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2F015082C09D366000F7221 /* LanguageSettings.swift */; }; C2F0150C2C09D3A4000F7221 /* KeyboardReadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2F0150B2C09D3A4000F7221 /* KeyboardReadable.swift */; }; C2F015102C09D3C3000F7221 /* Language.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2F0150E2C09D3C3000F7221 /* Language.swift */; }; @@ -63,14 +72,36 @@ }; /* End PBXContainerItemProxy section */ +/* Begin PBXCopyFilesBuildPhase section */ + 827AC5902C206625001701CC /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 827AC58F2C206625001701CC /* DSQ.xcframework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ 8268B4A32C1C640000D195CC /* VMArkit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VMArkit.swift; sourceTree = ""; }; 82740EBD2C19762C009711A5 /* ArKitView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArKitView.swift; sourceTree = ""; }; 82740EBF2C197A48009711A5 /* ArKitViewRepresentable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArKitViewRepresentable.swift; sourceTree = ""; }; 82740EC12C197C1A009711A5 /* ContentArkit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentArkit.swift; sourceTree = ""; }; + 827AC57E2C206374001701CC /* cat.usdz */ = {isa = PBXFileReference; lastKnownFileType = file.usdz; path = cat.usdz; sourceTree = ""; }; + 827AC5802C206385001701CC /* dog.usdz */ = {isa = PBXFileReference; lastKnownFileType = file.usdz; path = dog.usdz; sourceTree = ""; }; + 827AC5822C206395001701CC /* elephant.usdz */ = {isa = PBXFileReference; lastKnownFileType = file.usdz; path = elephant.usdz; sourceTree = ""; }; + 827AC5842C2063AB001701CC /* leopard.usdz */ = {isa = PBXFileReference; lastKnownFileType = file.usdz; path = leopard.usdz; sourceTree = ""; }; + 827AC5862C2063B6001701CC /* lion.usdz */ = {isa = PBXFileReference; lastKnownFileType = file.usdz; path = lion.usdz; sourceTree = ""; }; + 827AC5882C2063C7001701CC /* rat.usdz */ = {isa = PBXFileReference; lastKnownFileType = file.usdz; path = rat.usdz; sourceTree = ""; }; + 827AC58A2C2063D6001701CC /* tiger.usdz */ = {isa = PBXFileReference; lastKnownFileType = file.usdz; path = tiger.usdz; sourceTree = ""; }; + 827AC58C2C2063E2001701CC /* wolf.usdz */ = {isa = PBXFileReference; lastKnownFileType = file.usdz; path = wolf.usdz; sourceTree = ""; }; 82CCA53C2C1C255E00AFF485 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 82CCA5432C1C2B6400AFF485 /* board.usdz */ = {isa = PBXFileReference; lastKnownFileType = file.usdz; path = board.usdz; sourceTree = ""; }; - 82CCA5452C1C2B8E00AFF485 /* CatPiece.usdz */ = {isa = PBXFileReference; lastKnownFileType = file.usdz; name = CatPiece.usdz; path = Object/CatPiece.usdz; sourceTree = SOURCE_ROOT; }; + 82CCA5452C1C2B8E00AFF485 /* CatPiece.usdz */ = {isa = PBXFileReference; lastKnownFileType = file.usdz; name = CatPiece.usdz; path = ArkitDoushiQi/Resources/Object/CatPiece.usdz; sourceTree = SOURCE_ROOT; }; 82CE59E82C045D1100ADEE24 /* GameScene.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameScene.swift; sourceTree = ""; }; 82CE59EA2C045E3800ADEE24 /* GameView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameView.swift; sourceTree = ""; }; 82CE59EE2C0460E500ADEE24 /* SpriteMoople.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpriteMoople.swift; sourceTree = ""; }; @@ -112,7 +143,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C2A535D92C0F56A800503472 /* DSQ.xcframework in Frameworks */, + 827AC58E2C206625001701CC /* DSQ.xcframework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -152,6 +183,23 @@ path = ArKit; sourceTree = ""; }; + 827AC57D2C2062E5001701CC /* Object */ = { + isa = PBXGroup; + children = ( + 827AC58C2C2063E2001701CC /* wolf.usdz */, + 827AC58A2C2063D6001701CC /* tiger.usdz */, + 827AC5882C2063C7001701CC /* rat.usdz */, + 827AC5862C2063B6001701CC /* lion.usdz */, + 827AC5842C2063AB001701CC /* leopard.usdz */, + 827AC5822C206395001701CC /* elephant.usdz */, + 827AC5802C206385001701CC /* dog.usdz */, + 827AC57E2C206374001701CC /* cat.usdz */, + 82CCA5432C1C2B6400AFF485 /* board.usdz */, + 82CCA5452C1C2B8E00AFF485 /* CatPiece.usdz */, + ); + path = Object; + sourceTree = ""; + }; 82CE59E52C045C7500ADEE24 /* Game */ = { isa = PBXGroup; children = ( @@ -202,8 +250,6 @@ C205A2B62BF373360097BD93 /* ArkitDoushiQiApp.swift */, C205A2B82BF373360097BD93 /* ContentView.swift */, C205A2BA2BF373380097BD93 /* Assets.xcassets */, - 82CCA5452C1C2B8E00AFF485 /* CatPiece.usdz */, - 82CCA5432C1C2B6400AFF485 /* board.usdz */, C205A2BC2BF373380097BD93 /* Views */, ); path = ArkitDoushiQi; @@ -334,6 +380,7 @@ C2F015352C09D592000F7221 /* Resources */ = { isa = PBXGroup; children = ( + 827AC57D2C2062E5001701CC /* Object */, C2F0153A2C09D5C0000F7221 /* fr.lproj */, C2F015362C09D5A5000F7221 /* en.lproj */, ); @@ -366,6 +413,7 @@ C205A2AF2BF373360097BD93 /* Sources */, C205A2B02BF373360097BD93 /* Frameworks */, C205A2B12BF373360097BD93 /* Resources */, + 827AC5902C206625001701CC /* Embed Frameworks */, ); buildRules = ( ); @@ -464,9 +512,17 @@ 82CCA5442C1C2B6400AFF485 /* board.usdz in Resources */, C205A2BE2BF373380097BD93 /* Preview Assets.xcassets in Resources */, C2F0153D2C09D5C0000F7221 /* Localizable.strings in Resources */, + 827AC58D2C2063E2001701CC /* wolf.usdz in Resources */, + 827AC57F2C206374001701CC /* cat.usdz in Resources */, 82CCA5462C1C2B8E00AFF485 /* CatPiece.usdz in Resources */, + 827AC5852C2063AB001701CC /* leopard.usdz in Resources */, + 827AC5832C206395001701CC /* elephant.usdz in Resources */, C2F015392C09D5A5000F7221 /* Localizable.strings in Resources */, + 827AC5812C206385001701CC /* dog.usdz in Resources */, + 827AC5872C2063B6001701CC /* lion.usdz in Resources */, + 827AC58B2C2063D6001701CC /* tiger.usdz in Resources */, C205A2BB2BF373380097BD93 /* Assets.xcassets in Resources */, + 827AC5892C2063C7001701CC /* rat.usdz in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -713,7 +769,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = fr.uca.iut.enzo; + PRODUCT_BUNDLE_IDENTIFIER = fr.uca.iut.ArkitDoushiQi; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = tpiOS_2023; @@ -749,7 +805,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = fr.uca.iut.enzo; + PRODUCT_BUNDLE_IDENTIFIER = fr.uca.iut.ArkitDoushiQi; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = tpiOS_2023; diff --git a/ArkitDoushiQi/ArkitDoushiQi/ArKit/ArKitView.swift b/ArkitDoushiQi/ArkitDoushiQi/ArKit/ArKitView.swift index 9d44fd4..fd1cc8e 100644 --- a/ArkitDoushiQi/ArkitDoushiQi/ArKit/ArKitView.swift +++ b/ArkitDoushiQi/ArkitDoushiQi/ArKit/ArKitView.swift @@ -13,6 +13,7 @@ import UIKit class ArKitView : ARView { + required init(frame frameRect: CGRect) { super.init(frame: frameRect) } @@ -23,10 +24,8 @@ class ArKitView : ARView { convenience init() { self.init(frame: UIScreen.main.bounds) - applyConfiguration() } - func applyConfiguration() { let configuration = ARWorldTrackingConfiguration() session.run(configuration) diff --git a/ArkitDoushiQi/ArkitDoushiQi/ArKit/ArKitViewRepresentable.swift b/ArkitDoushiQi/ArkitDoushiQi/ArKit/ArKitViewRepresentable.swift index 5bb5814..7498562 100644 --- a/ArkitDoushiQi/ArkitDoushiQi/ArKit/ArKitViewRepresentable.swift +++ b/ArkitDoushiQi/ArkitDoushiQi/ArKit/ArKitViewRepresentable.swift @@ -11,10 +11,17 @@ import DouShouQiModel struct ArKitViewRepresentable : UIViewRepresentable { - init(){} + var vm:VMArkit + + init(_ game:Game){ + vm = VMArkit(game) + } func makeUIView(context: Context) -> ArKitView { - return ArKitView() + let arView = ArKitView() + let anchor = arView.defineAnchors() + vm.setup(anchor) + return arView } func updateUIView(_ uiView: UIViewType, context: Context) { } diff --git a/ArkitDoushiQi/ArkitDoushiQi/ArKit/ContentArkit.swift b/ArkitDoushiQi/ArkitDoushiQi/ArKit/ContentArkit.swift index 643d018..67e7ccf 100644 --- a/ArkitDoushiQi/ArkitDoushiQi/ArKit/ContentArkit.swift +++ b/ArkitDoushiQi/ArkitDoushiQi/ArKit/ContentArkit.swift @@ -9,8 +9,8 @@ import SwiftUI import DouShouQiModel struct ContentArkit: View { - - var vm:VMArkit = VMArkit(try! Game(withRules: ClassicRules(), andPlayer1: RandomPlayer(withName: "Bot1", andId: .player1)!, andPlayer2: RandomPlayer(withName: "Bot2", andId: .player2)!)) + + //var vm:VMArkit = VMArkit(try! Game(withRules: ClassicRules(), andPlayer1: RandomPlayer(withName: "Bot1", andId: .player1)!, andPlayer2: RandomPlayer(withName: "Bot2", andId: .player2)!)) var body: some View { VStack { @@ -20,9 +20,10 @@ struct ContentArkit: View { .ignoresSafeArea() .navigationBarBackButtonHidden(true) .task { + vm try! await vm.game.start() }*/ - ArKitViewRepresentable() + ArKitViewRepresentable(try! Game(withRules: ClassicRules(), andPlayer1: RandomPlayer(withName: "Bot1", andId: .player1)!, andPlayer2: RandomPlayer(withName: "Bot2", andId: .player2)!)) } } diff --git a/ArkitDoushiQi/ArkitDoushiQi/ArKit/VMArkit.swift b/ArkitDoushiQi/ArkitDoushiQi/ArKit/VMArkit.swift index ca0e812..14a207b 100644 --- a/ArkitDoushiQi/ArkitDoushiQi/ArKit/VMArkit.swift +++ b/ArkitDoushiQi/ArkitDoushiQi/ArKit/VMArkit.swift @@ -13,15 +13,13 @@ import UIKit struct VMArkit { - static let offset = CGPoint(x: -400, y: -300 ) - static let direction = CGVector(dx: 100, dy: 100) + static let offset = CGPoint(x: -0.458 , y: -0.3435 ) + static let direction = CGVector(dx: 0.1145, dy: 0.1145) - var msg:String = "" + //var msg:String = "" var game:Game - var view:ArKitViewRepresentable = ArKitViewRepresentable() - var pieces: [Owner : [ Animal : Entity?]] = [.player1: [.cat:nil, .elephant:nil, .dog:nil, @@ -41,48 +39,55 @@ struct VMArkit { init(_ game:Game){ self.game = game - - defineListeners() } - func addBoard(anchor:AnchorEntity){ + func setup(_ anchor:AnchorEntity){ + addBoard(anchor) + generatePieces(anchor) + displayBoard(game.board) + } + + func addBoard(_ anchor:AnchorEntity){ let board = try? Entity.load(named: "board") + board?.scale = [0.3,0.3,0.3] if let board { + print("Ajout du board") anchor.addChild(board) } } // -- Crée les pieces - func generatePieces(anchor:AnchorEntity) { + func generatePieces(_ anchor:AnchorEntity) { // Position - X,Y,Z for c in pieces.flatMap({ animal,values in return values }) { var entity:Entity? switch c.self.key { case .cat : - entity = try? Entity.load(named: "CatPiece") + entity = try? Entity.load(named: "cat") case .elephant : - entity = try? Entity.load(named: "CatPiece") + entity = try? Entity.load(named: "elephant") case .dog : - entity = try? Entity.load(named: "CatPiece") + entity = try? Entity.load(named: "dog") case .leopard : - entity = try? Entity.load(named: "CatPiece") + entity = try? Entity.load(named: "leopard") case .lion : - entity = try? Entity.load(named: "CatPiece") + entity = try? Entity.load(named: "lion") case .rat : - entity = try? Entity.load(named: "CatPiece") + entity = try? Entity.load(named: "rat") case .tiger : - entity = try? Entity.load(named: "CatPiece") + entity = try? Entity.load(named: "tiger") case .wolf : - entity = try? Entity.load(named: "CatPiece") + entity = try? Entity.load(named: "wolf") default: fatalError("Animal non compris") } if let entityNotNull = entity { + entityNotNull.scale = [0.3,0.3,0.3] anchor.addChild(entityNotNull) - entityNotNull.position = SIMD3(0,0,10) + entityNotNull.position = SIMD3(0,0.02,0) entityNotNull.generateCollisionShapes(recursive:true) /* @@ -99,16 +104,18 @@ struct VMArkit { // -- Affiche les pieces à la bonne positions - func displayBoard(board:Board) { + func displayBoard(_ board:Board) { for ligne in 0.. Element vide ") + print("WARNING !!! -> Element vide ") } } } @@ -125,7 +132,7 @@ struct VMArkit { return CGPoint(x: posX, y: posY) } - + /* // ------ Listener -------- // func defineListeners(){ self.game.addGameStartedListener { board in startGame()} @@ -182,4 +189,5 @@ struct VMArkit { } // ------------------------- // + */ } diff --git a/ArkitDoushiQi/Object/CatPiece.usdz b/ArkitDoushiQi/ArkitDoushiQi/Resources/Object/CatPiece.usdz similarity index 100% rename from ArkitDoushiQi/Object/CatPiece.usdz rename to ArkitDoushiQi/ArkitDoushiQi/Resources/Object/CatPiece.usdz diff --git a/ArkitDoushiQi/ArkitDoushiQi/board.usdz b/ArkitDoushiQi/ArkitDoushiQi/Resources/Object/board.usdz similarity index 100% rename from ArkitDoushiQi/ArkitDoushiQi/board.usdz rename to ArkitDoushiQi/ArkitDoushiQi/Resources/Object/board.usdz diff --git a/ArkitDoushiQi/ArkitDoushiQi/Resources/Object/cat.usdz b/ArkitDoushiQi/ArkitDoushiQi/Resources/Object/cat.usdz new file mode 100644 index 0000000..83112d6 Binary files /dev/null and b/ArkitDoushiQi/ArkitDoushiQi/Resources/Object/cat.usdz differ diff --git a/ArkitDoushiQi/ArkitDoushiQi/Resources/Object/dog.usdz b/ArkitDoushiQi/ArkitDoushiQi/Resources/Object/dog.usdz new file mode 100644 index 0000000..88ab0f4 Binary files /dev/null and b/ArkitDoushiQi/ArkitDoushiQi/Resources/Object/dog.usdz differ diff --git a/ArkitDoushiQi/ArkitDoushiQi/Resources/Object/elephant.usdz b/ArkitDoushiQi/ArkitDoushiQi/Resources/Object/elephant.usdz new file mode 100644 index 0000000..9565263 Binary files /dev/null and b/ArkitDoushiQi/ArkitDoushiQi/Resources/Object/elephant.usdz differ diff --git a/ArkitDoushiQi/ArkitDoushiQi/Resources/Object/leopard.usdz b/ArkitDoushiQi/ArkitDoushiQi/Resources/Object/leopard.usdz new file mode 100644 index 0000000..f018773 Binary files /dev/null and b/ArkitDoushiQi/ArkitDoushiQi/Resources/Object/leopard.usdz differ diff --git a/ArkitDoushiQi/ArkitDoushiQi/Resources/Object/lion.usdz b/ArkitDoushiQi/ArkitDoushiQi/Resources/Object/lion.usdz new file mode 100644 index 0000000..aa901d0 Binary files /dev/null and b/ArkitDoushiQi/ArkitDoushiQi/Resources/Object/lion.usdz differ diff --git a/ArkitDoushiQi/ArkitDoushiQi/Resources/Object/rat.usdz b/ArkitDoushiQi/ArkitDoushiQi/Resources/Object/rat.usdz new file mode 100644 index 0000000..d8cc30d Binary files /dev/null and b/ArkitDoushiQi/ArkitDoushiQi/Resources/Object/rat.usdz differ diff --git a/ArkitDoushiQi/ArkitDoushiQi/Resources/Object/tiger.usdz b/ArkitDoushiQi/ArkitDoushiQi/Resources/Object/tiger.usdz new file mode 100644 index 0000000..dc6792d Binary files /dev/null and b/ArkitDoushiQi/ArkitDoushiQi/Resources/Object/tiger.usdz differ diff --git a/ArkitDoushiQi/ArkitDoushiQi/Resources/Object/wolf.usdz b/ArkitDoushiQi/ArkitDoushiQi/Resources/Object/wolf.usdz new file mode 100644 index 0000000..0b45669 Binary files /dev/null and b/ArkitDoushiQi/ArkitDoushiQi/Resources/Object/wolf.usdz differ