Does the current version of TabletopKit support having two or more game players to be at the same physical location? In these cases, the players would not want to see a Facetime persona around the table but instead should be able to see the physical player. Any other remote players would be able to see the personas of those players since they are not at that location. There are a couple of issues in this scenario (shared position of the board, players' location around the table, etc.), but they should be solvable. Thank you!
TabletopKit
RSS for tagBuild spatial, multiplayer experiences around a table with TabletopKit. Discuss questions here.
Post
Replies
Boosts
Views
Activity
Can a TabletopKit game with a variable number of players also have a variable number of AI, each playing a specific position? For example, a game that can handle 3-7 players, being set up for a specific game where 4 of the players are real, and an AI plays 2 other locations? The Kit appears to be setup to only be able to handle real (human) players. Thank you!
Hi,
I've been implementing a tabletop game over the last couple of weeks. One thing that I'm struggling with it getting an EntityEquipment to render.
I've followed the instructions in the documentation: https://developer.apple.com/documentation/tabletopkit/entityequipment
But still no luck.
Any insights what I might be missing are highly appreciated.
Note: I've also watched the WWDC24 talk https://developer.apple.com/videos/play/wwdc2024/10091/ several times and downloaded the example but while the pawns render in the example perfectly. In my own implementation of a pawn nothing renders.
The TabletopKit sample app builds fine with Xcode 16 beta 1.
https://developer.apple.com/documentation/tabletopkit/tabletopkitsample
I updated to the new beta 4 and downloaded an updated version of the Tabletopkit sample code but am now getting this error.
Tabeletopkit Sample 1 issue
SwiftUI.ToolbarContent:3:51
Main actor-isolated static method '_makeContent(content:inputs:resolved:)' cannot be used to satisfy nonisolated protocol requirement
Add '@preconcurrency' to the 'ToolbarContent' conformance to defer isolation checking to run time
'_makeContent(content:inputs:resolved:)' declared here
If I go back to beta 1 it still builds OK. I tried its suggestion but it still won't build.
Is there a workaround? I didn't see it listed.
Is it possible to join a TabletopKit Seat while using the VisionOS simulator? Seems in the simulator, I'm able to interact with the board's equipment as the floating simulated camera with a PlayerID, but none of my seats have PlayerIDs associated with them.
I'm trying to change things mid game by replacing/adding existing equipment with other variants. For example, I'm wanting to change the board. (It could be just the board display/model.)
I tried adding the equipment mid game but TabletopKit doesn't appear to render new items added once it initializes.
I'm not sure if I'm just doing something wrong or if there's some trick to reset the renderer or something.
One other option could be, is it possible to change the model or texture for an existing model entity?
I am working on adding synchronized physical properties to EntityEquipment in TableTopKit, allowing seamless coordination during GroupActivities sessions between players.
Treating EntityEquipment's state to DieState is not a way, because it doesn't support custom collision shapes.
I have also tried adding PhysicsBodyComponent and CollisionComponent to EntityEquipment's Entity. However, the main issue is that the position of EntityEquipment itself does not synchronize with the Entity's physics body, resulting in two separate instances of one object.
struct PlayerPawn: EntityEquipment {
let id: ID
let entity: Entity
var initialState: BaseEquipmentState
init(id: ID, entity: Entity) {
self.id = id
let massProperties = PhysicsMassProperties(mass: 1.0)
let material = PhysicsMaterialResource.generate(friction: 0.5, restitution: 0.5)
let shape = ShapeResource.generateBox(size: [0.4, 0.2, 0.2])
let physicsBody = PhysicsBodyComponent(massProperties: massProperties, material: material, mode: .dynamic)
let collisionComponent = CollisionComponent(shapes: [shape])
entity.components.set(physicsBody)
entity.components.set(collisionComponent)
self.entity = entity
initialState = .init(parentID: .tableID, pose: .init(position: .init(), rotation: .zero), entity: self.entity)
}
}
I’d appreciate any guidance on the recommended approach to adding synchronized physical properties to EntityEquipment.