Stepping back from code for a moment ...
What do I want to do?
1) upon initial start up of app, I want to wait for a gamepadconnected Event.
2) Once I get this Event, I immediately change a SKSpriteNode's color and then start looking for:
a) button presses on the gamepad and
b) a gamepaddisconnected Event
3) So while I am executing code based on 2(a), I receive 2(b) .. I immediately change the above color to something different, followed by looking for another gamepadconnected Event.
Back-and-forth
Back-and-forth.
Post
Replies
Boosts
Views
Activity
Using Apple's very own ObserveForGameControllers() which I call in my GameViewController's viewDidLoad(), even when my Nimbus+ Game Controller is set to off when I initially Run my Project, Apple's Code consistently shows "CONNECTED"
This totally blows my mind.
Furthermore, Apple claims that their two NotificationCenter.default.addObserver() calls are continuously called. So, I should be able to toggle my Nimbus+ off and on while playing ... and Apple claims that these two addObserver() are cotinuously called. I deliberately have print statements in each @objc and while this toggling is going on, there should be a whole slew of print statements that toggle between "connected" and "dis-connected".
Never happens??
What a 100% waste of my time = sending that TSI to Apple.
They sent back “Not enough info”.
So, this entire Chat from the get-go isn’t enough?
Well maybe it wasn’t to them because of their incompetence.
My reply to this was even more blunt.
Forget TSIs, Justin.
I will just scour around until I find the solution.
While my TSI is being worked …
I know how to solve the Gamepad Connectivity problem.
Within Apple Inc there are many, many programmers.
Premise:
there’s one set of programmers that work on System stuff, eg, the Bluetooth Menu.
there’s a 2nd set of programmers that work on Xcode stuff.
Set 1 did the Connectivity right. Stare at the Bluetooth Menu while you’re turning off & on your Game Controller. Said Menu shows within a split second this toggling. SPOT ON.
Instruct Set 2 to copy their code.
DONE!
👍👍👍
Not small Project, but I already have print statement in the @objc disconnect code and the statement is never called EVER EVER
I would like to submit the whole project to the Developer shop + a link to this very long conversation.
Anyway I will use my first TSI red flag and do that after I print out my existing changes and stare at them until Friday.
And then let them work. That oughta get me some bang for my $99 bucks, at least $49.50 worth.
Let them work for awhile. Most of the App Review process is done by inanimate bits and bytes. So it’s time to get some breathing mammals into the fray, don’t you think.
When I first submitted my very 1st App and was initially rejected for something stupid. I yelled $@!? and someone here said you’re yelling at a damn computer.
So I calmed down and submitted an Appeal which overturned the Rejection.
and BAMB .. “Monster Paddle Pong” is up on Store in all its glory.
Got work to do folks
Okay, Justin,
I turned on my Apple TV
Within Xcode, I chose the destination = "TV Room" = my Apple TV
Under Xcode's Window Menu, I selected "Devices and Simulators"
Paired with "TV Room"
Ran the App within Xcode
My App showed on the Apple TV
Same Problem(s)
(a) I guess this is definitely not your idea of a "Real Device"
OR
(b) I have a coding problem
Speaking of code, here is my updateGameStatus func
func updateGameStatus() {
if itsScene.isPaused {
// Set within the connect/disconnect @objc handlers written by Apple
// The reason for itsScene.isPaused syntax is because I moved all the
// NotificationCenter stuff from my GameScene (SKScene) class
// to my GameViewController (UIViewController) class.
itsStatusNode.fillColor = SKColor.black
itsStatusNode.strokeColor = SKColor.black
}
else if ballIsMoving { // set = true when I start/resume the Game or = false when I pause the Game
itsStatusNode.fillColor = SKColor.white
itsStatusNode.strokeColor = SKColor.white
}
else {
itsStatusNode.fillColor = SKColor.black
itsStatusNode.strokeColor = SKColor.black
}
}
This func demonstrates my problem because when the Game is running (ballIsMoving) and I press the "Home Button" of my Nimbus+ to turn it off, the light stays white.
In the meantime, I am trying to discover my coding problem. FWIW, I did attempt to insert a Timer that polls the above func, but no such luck = that would have been too easy.
John
Justin, are you 100% certain that the Simulator is the certain culprit and the only source of my problems?
I say this because you are saying the Simulator is 100 % defective on this issue.
And it’s a significant issue because you & I know game development has a very large % of all development.
You are asking me to do a whole bunch of work and so I need to be 100% certain.
I am not inclined to do all this work on a maybe.
Justin, I totally understand what you are saying about the Simulator because it has a whole slew of problems associated with Sound errors and others as well.
But ... when my Nimbus+ is connected, the Nimbus' Buttons and Joysticks work as I have coded them ... and when it is not connected, nothing works as you would expect. So, so far everything is good.
Nimbus+ on, Buttons and Joysticks work ... Nimbus off, they do not work. Simple and very good!
Two challenges:
(1) if the Nimbus+ is off when I initially Run my App, Apple's code still registers the Nimbus+ as connected. In short, the @objc func disconnectControllers() doesn't get called.
(2) if the Nimbus+ is on and the Game is running as it should, and then I press the Home Button of the Nimbus+ to turn it off, once again @objc func disconnectControllers() is not called.
A significant update =
Initially I had all the Game Controller code in my GameScene = SKScene, with the call to ObserveForGameControllers within the SKScene's didMove and all I have reported happens.
Then, I spent a bunch of time moving all the Game Controller code to my GameViewController = UIViewController, with the call to ObserveForGameControllers now moved to its viewDidLoad().
Conceptually I believe the Game Controller code properly belongs as part of a ViewController and not a UIView because, again conceptually, the Game Controller controls all Scenes, not just one Scene.
Anyway, now the Game Controller code in GameViewController, including Apple's func setupControllerControls(...). The latter calls Apple's func controllerInputDetected(...)which is also moved to my GameViewController. This last funccalls a whole slew of funds located in my GameScene... like pressing "Y" to move a Game Piece "up".
All the Buttons and Joysticks work great when the Nimbus+ is on and don't work when the Nimbus+ is off ... identical to when my Game Controller Code was part of my GameScene = SKScene.
But the problems of turning off the Nimbus+ before App is run and while the App is running remain .
One more tidbit ...
My Game runs when the Nimbus+ is on and nothing moves when the Nimbus+ is off ... so that's not the problem.
I want to programmatically find out if the Nimbus+ is on or off for the sole purpose of setting the fill color of a "Status Light" SKSpriteNode I have in my SKView. And I have a func updateStatus() that does that color change for me depending on the value of my gamepadOn var.
If it weren't for that, the Nimbus+ Buttons being inert (after I press its Home Button) would be all the "clue" the user would need.
I apologize for being so tardy in getting back to you. I assure you it's not because I don't consider this a serious problem ... because I definitely do.
Nimbus++ Extended Game Controller
My call to ObserveForGameControllers() is within my override func didMove(to view: SKView).
I definitely see within my code that the "CONNECT" message shows within the Xcode Console =
"CONNECTED - Extended Gamepad #0"
However, what is disturbing is that IF I deliberately turn OFF my Nimbus+ before I even Run my Code the 1st time, the "CONNECT" message still shows. I clearly do not understand the latter. It's OFF and it still registers as present (index = 0).
Next, I see within my Code no "DIS-CONNECTED" message if I press the "Home" Button on my Nimbus+ to turn off the Nimbus+ during the playing of the Game. Again, it's OFF and it still registers as present.
@objc func disconnectControllers() {
print("DIS-CONNECTED")
// Pause the Game if a controller is disconnected ~ This is mandated by Apple
self.isPaused = true
} // disconnectControllers
I believe the root of my problem centers on the fact that I see no "DIS-CONNECTED" message.
Because if I did, I could simply state:
gamepadOn = !self.isPaused
and I wouldn't need to bug you.
John Love
Totally messed up the formatting of my Reply to my own Question - My Bad!
No print statements show in the Debugger.
I found my Boo Boos.
Has to do with selecting the correct Bit Mask settings within didBegin.
Said selection is premised on the fact that the Bit Mask is the Category of which objects hit it.
For example:
the Room is hit by the Ball or the Player,
the UStake is hit by just the Ball.
Guess what, the Player is hit by nobody.
Once that set into my addle brain, the flood lights came on:
myRoom.contactTestBitMask = playerCategory | ballCategory
myUStake.contactTestBitMask = ballCategory
myPlayer.contactTestBitMask = noContact
If some Moderator would kindly delete my 1st Reply above, I would be grateful.
This strong reply is for you in iPad App Review and your counterparts in Apple TV App Review.
I will not provide a video that demonstrates the operation of my App on a real Device as you have demanded for the following 10 reasons:
(1) My promotional and description texts (1st sentence) clearly state the user needs a Game Controller. It doesn't get any plainer than that.
But you already know that, since the above texts are viewable to you.
(2) FYI, the above description text delineates in detail what the user needs to press on a Game Controller to get the game pieces moving.
(3) I do not own a iPad, only an iPhone + a Apple TV. My App clearly states my Builds are not the iPhone, just the iPad and for the Apple TV.
(4) Because I am very intelligent, I refuse to spend $800 just to satisfy a bunch of tyrants.
(5) With the existence of Hollywood level special effects, such a video could easily be fake.
(6) You have demonstrated that you are too blasted lazy to get a Game Controller and try it yourself. You want me to spend a boat load of $$ just because you are too damn lazy to spend 10 minutes with a Game Controller in your hands while playing my Game App either on a iPad or a Apple TV.
(7) You folk are just a bunch of tyrants who demonstrate that you think you are Almighty God who will crush developers if they do not bow to you.
(8) Even if I owned an iPad I will not bow to you!
(9) I solemnly assure you that I will spare no effort to get most of you fired. And I have already started that effort by contacting the very top of Apple.
(10) Your tyranny will not be tolerated.
Do we understand one another?
John Love
Here is my final transmission to the App Reviews:
=====
This strong reply is for you in iPad App Review and your counterparts in Apple TV App Review.
I will not provide a video that demonstrates the operation of my App on a real Device as you have demanded for the following 10 reasons:
(1) My promotional and description texts (1st sentence) clearly state the user needs a Game Controller. It doesn't get any plainer than that.
But you already know that, since the above texts are viewable to you.
(2) FYI, the above description text delineates in detail what the user needs to press on a Game Controller to get the game pieces moving.
(3) I do not own a iPad, only an iPhone + a Apple TV. My App clearly states my Builds are not the iPhone, just the iPad and for the Apple TV.
(4) You are positively dumb as a box of rocks if you think I am going to spend $800 just to satisfy a bunch of tyrants.
(5) With the existence of Hollywood level special effects, such a video could easily be fake.
(6) You have demonstrated that you are too blasted lazy to get a Game Controller and try it yourself. You want me to spend a boat load of $$ just because you are too damn lazy to spend 10 minutes with a Game Controller in your hands while playing my Game App either on a iPad or a Apple TV.
(7) You folk are just a bunch of tyrants who demonstrate that you think you think you are Almighty God who will crush developers if they do not bow to you.
(8) Even if I owned an iPad I will not bow to your dictatorial demands!
(9) I solemnly assure you that I will spare no effort to get most of you fired. And I have already started that effort by contacting the very top of Apple's App Development Directorate.
(10) Your tyranny will not be tolerated.
Do we understand one another?
John Love
I was poking holes in your logic, not you.
To quote you earlier, you shouldn’t take it personal
Bye
Let’s use some irrefutable LOGIC here.
I could easily send them a video. I definitely will NOT. But I could.
Said video would “show” using a Controller moving a game piece around a screen.
However with today’s Hollywood mentality it could all be fake.
Got a better idea … the Tester himself using their own Controller with MY App
Damn it works!!
The truth is the Tester is a lowly employee who is too lazy to get up and get a Controller.
The Tester has already proven it won’t work by poking the screen.
I have posted very poignant well crafted words via Promotion and Description that testify my App needs a Controller.
The above logic is irrefutable.
You don’t agree, but that’s your problem.