Już zapomniałem jak się używa GMOgre tutaj jest moja gra w nim zrobiona open sourcowa https://forum.gmclan.org/index.php?showtopic=27709 Poszperam w projekcie to może mi się przypomni co i jak :P
edit: :o newton ponga ściągnięto 88 razy nie spodziewałem się tego :D
Edit 2:
Ok z tego co widzę w newton pongu do rozpoznawania z czym się zderzyła piłka, by odtworzyć odpowiedni do danej powierzchni i prędkości piłki dźwięk, skorzystałem z funkcji SetNewtonMaterialPairContactCallback( id materiału , skrypt który się uruchamia);
Ja akurat potrzebowałem tylko wiedzieć z jaką prędkością piłka uderzyła w powierzchnię więc w skrypcie użyłem tylko argumentu2.
argument0 i argument1 to body_id kolidujących ciał argument2 - prędkość uderzenia, argument3 4 i 5 to miejsce uderzenia X Y Z.
Po kolei co trzeba zrobić by takie rozpoznawanie kolizji działało.
1. Stworzyć 2 newton materiały. Najlepiej by id tych materiałów były w globalnych zmiennych
GML (create)
globalvar nMat, nMatPair;
nMat[0] = CreateNewtonMaterial( nWorld );
nMat[1] = CreateNewtonMaterial( nWorld );
2. Stworzyć Newton material pair i nadać mu callback
GML (create)
nMatPair[0] = CreateNewtonMaterialPair( nWorld, nMat[0] , nMat[1] );
// w 2 parametrze wpisujesz nazwe skryptu który ma się uruchomić po wykryciu kolizji
SetNewtonMaterialPairContactCallback( nMatPair[0], teleportacjaCallBack);
3. Teraz tworzysz ten skrypt który kolizja wywoła.
GML (teleportacjaCallBack)
// teleportacjaCallBack();
room_goto(castle2)
4. Nadaj newton materiały ciałom
GML (create)
// ciało pierwsze
SetNewtonBodyMaterial( id ciała gracza, nMat[0] );
// ciało drugie
SetNewtonBodyMaterial( id ciała portalu, nMat[1] );
Nie ma potrzeby wkładania żadnych warunków do stepu bo newton engine sam wywoła skrypt teleportacjaCallBack() gdy zajdzie kolizja