BASIC

Author Topic: 3D Entity System [DE]  (Read 116303 times)

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10714
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
Re: 3D Entity System [DE]
« Reply #210 on: 2008-Jun-26 »
Update:
// PHOO: - New parameter: EntityAddCollision: group_src, group_dest, COLLISION_MODE
//       - New commands: EntityCollisionSetRadius, EntityCollisionSetBox
//                       EntityCreateCuboid

Alles wie bei Blitz, wobei der Wert "1" u.U. falsch sein könnte.

x-tra

  • Guest
Re: 3D Entity System [DE]
« Reply #211 on: 2008-Jun-26 »
ich hab jetzt noch nicht geschaut, aber was meinst du mit wert "1"

hab das grad mit dem radius probiert.

kommt eine fehlermeldung.

Code: GLBasic [Select]
call to undefined function : X_COLLISIONSPHEREBOX
 

da fehlt wohl was....lol
« Last Edit: 2008-Jun-26 by Heiko »

Offline BumbleBee

  • Global Moderator
  • Prof. Inline
  • *******
  • Posts: 891
    • View Profile
Re: 3D Entity System [DE]
« Reply #212 on: 2008-Jun-26 »
Wie kann man sich eigentlich bei Gernot dafür bedanken, dass er immer soviel für uns macht und auch immer gleich macht, obwohl er ja wenig Zeit hat? Vielleicht mit paar tollen Spielen die mit oder ohne ES gemacht wurden? Beim GLBasic Treffen kriegt er eh alles spendiert. Das steht schon mal fest.  :booze:
Ich denke, so langsam sollte oder müßte ich wohl auch mal einen Blick auf das ES werfen. =D

Cheers
The day will come...

CPU Intel(R) Core(TM) i5-3570k, 3.4GHz, AMD Radeon 7800 , 8 GB RAM, Windows 10 Home 64Bit

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5022
  • O Rly?
    • View Profile
Re: 3D Entity System [DE]
« Reply #213 on: 2008-Jun-26 »
Total geil das Teil, ich finds subba jut dat dingendskirchen...ähhhh ... EntitySystem ;)
I <3 DGArray's :D

PC:
AMD Ryzen 7 1700 @3.9GHz, 16GB HyperX Fury 3000MHz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard

x-tra

  • Guest
Re: 3D Entity System [DE]
« Reply #214 on: 2008-Jun-26 »
Bis auf
Code: GLBasic [Select]
X_COLLISIONSPHEREBOX
, was noch nichts existiert, funktioniert es suuuper, also sphere-mesh (0) hab ich getestet, läuft bisher, muss noch bissl mitm radius testen, aber feine sache, ganz toll gernot.

kann ich weiter machen, hab derweil

Code: GLBasic [Select]
                                                        CASE 2
                                        //sphere[1]->box[2]
                                        LOCAL r = object1.col_radius * MIN(object1.sx, MIN(object1.sy, object1.sz) )
                                        col = X_COLLISIONSPHEREBOX(     object1.Mg[12], object1.Mg[13], object1.Mg[14],object1.col_radius, _
                                                                                                object2.col_bx*object2.sx, _
                                                                                                object2.col_by*object2.sy, _
 

auskommentiert.
« Last Edit: 2008-Jun-26 by Heiko »

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10714
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
Re: 3D Entity System [DE]
« Reply #215 on: 2008-Jun-27 »
Oh ich Depp! Ja, das wird ein größeres Update. Muss man bis dahin auskommentieren.

x-tra

  • Guest
Re: 3D Entity System [DE]
« Reply #216 on: 2008-Jun-27 »
lol oben steht schon version 5.307, aber online ist sie noch nicht.

hab noch 5.304 und update wird mit meldung "aktuell" beendet.


Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10714
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
Re: 3D Entity System [DE]
« Reply #217 on: 2008-Jun-27 »
ganz großer Fehler in der aktuellen, darum hab ich sie vom Netz genommen.

x-tra

  • Guest
Re: 3D Entity System [DE]
« Reply #218 on: 2008-Jun-27 »
achso, nadann kein thema.

achja, kannst du die neuen kollisionsbefehle für alle die nicht von bb kommen erklären, ist sicher einfacher zu verstehen als

Code: GLBasic [Select]
0=sphere-mesh, 1=box-mesh, 2=sphere-box

ich mein ich weiß wie es funktioniert, aber für die meisten hier....

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5022
  • O Rly?
    • View Profile
Re: 3D Entity System [DE]
« Reply #219 on: 2008-Jun-28 »
Bei EntityCollisionSetBox sollte sich die Collisionbox auch mit dem Objekt mitdrehen oder?
So wie ich das seh, wird das nicht gemacht.
Und was optisches(Drahtgitter) wenn Debug an ist, wär auch super!

Sonnst soweit echt gut!

Hab bei Cuboid die Texturen richtig rum gesetzt, da hat irgendwie kein Face gepasst  :noggin:  :good:

Code: GLBasic [Select]
//! This function creates a cuboid with the dimensions:
//! sx x sy x sz
// \param sx,sy,sz - width, height and depth of the cuboid
// \return the entity entity
FUNCTION EntityCreateCuboid: sx, sy, sz
LOCAL col=RGB(0xff,0xff,0xff)

LOCAL t AS T3DEntity
LOCAL nc
        t.what = 0
        t.tex=-1
        t.ddd=0

        // Get free object slot
        nc = X_NUMFACES(t.ddd)
        WHILE nc>0
                INC t.ddd, 1
                nc = X_NUMFACES(t.ddd)
        WEND
        X_AUTONORMALS 1 // For a cube, hard edges
        sx=sx/2
        sy=sy/2
        sz=sz/2
        X_OBJSTART t.ddd
                // Front Face
                X_OBJADDVERTEX  sx, -sy,  sz, 1, 1, col // ul
                X_OBJADDVERTEX -sx, -sy,  sz, 0, 1, col // ur
                X_OBJADDVERTEX  sx,  sy,  sz, 1, 0, col // ol
                X_OBJADDVERTEX -sx,  sy,  sz, 0, 0, col // or
                X_OBJNEWGROUP
                // Back Face
                X_OBJADDVERTEX -sx,  sy, -sz, 1, 0, col // or
                X_OBJADDVERTEX -sx, -sy, -sz, 1, 1, col // ur
                X_OBJADDVERTEX  sx,  sy, -sz, 0, 0, col // ol
                X_OBJADDVERTEX  sx, -sy, -sz, 0, 1, col // ul
                X_OBJNEWGROUP
                // Top Face
                X_OBJADDVERTEX -sx,  sy,  sz, 1, 0, col // or
                X_OBJADDVERTEX -sx,  sy, -sz, 1, 1, col // ur
                X_OBJADDVERTEX  sx,  sy,  sz, 0, 0, col // ol
                X_OBJADDVERTEX  sx,  sy, -sz, 0, 1, col // ul
                X_OBJNEWGROUP
                // Bottom Face
                X_OBJADDVERTEX  sx, -sy, -sz, 0, 0, col // ol
                X_OBJADDVERTEX -sx, -sy, -sz, 1, 0, col // or
                X_OBJADDVERTEX  sx, -sy,  sz, 0, 1, col // ul
                X_OBJADDVERTEX -sx, -sy,  sz, 1, 1, col // ur
                X_OBJNEWGROUP
                // Right face
                X_OBJADDVERTEX  sx,  sy, -sz, 1, 0, col // or
                X_OBJADDVERTEX  sx, -sy, -sz, 1, 1, col // ur
                X_OBJADDVERTEX  sx,  sy,  sz, 0, 0, col // ol
                X_OBJADDVERTEX  sx, -sy,  sz, 0, 1, col // ul
                X_OBJNEWGROUP
                // Left Face
                X_OBJADDVERTEX -sx, -sy,  sz, 1, 1, col // ur
                X_OBJADDVERTEX -sx, -sy, -sz, 0, 1, col // or
                X_OBJADDVERTEX -sx,  sy,  sz, 1, 0, col // ul
                X_OBJADDVERTEX -sx,  sy, -sz, 0, 0, col // ol
                X_OBJNEWGROUP
        X_OBJEND
        IF sx=sy AND sx=sz
                t.name$="cube, s="+FORMAT$(0,1,sz*2)
        ELSE
                t.name$="cuboid, "+FORMAT$(0,1,sx*2)+"x"+FORMAT$(0,1,sy*2)+"x"+FORMAT$(0,1,sz*2)
        ENDIF
        RETURN EntityAddInternal(t)

ENDFUNCTION // sz
« Last Edit: 2008-Jun-28 by Schranz0r »
I <3 DGArray's :D

PC:
AMD Ryzen 7 1700 @3.9GHz, 16GB HyperX Fury 3000MHz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10714
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
Re: 3D Entity System [DE]
« Reply #220 on: 2008-Jun-30 »
Bei EntityCollisionSetBox sollte sich die Collisionbox auch mit dem Objekt mitdrehen oder?

Bei box->mesh Kollision sollte das so sein. Bei box->sphere nicht. Das ist etwas doof.
Ich bau nuch sphere->sphere ein, das kann man wirklich gut brauchen, und ist schnell.

x-tra

  • Guest
Re: 3D Entity System [DE]
« Reply #221 on: 2008-Jun-30 »
hast du dir unseren vorschlag wegen den kollisionen durch den kopf gehen lassen?

also standard mesh-mesh kollision, und wenn radius oder box o.ä. gesetzt, wird eben einfach auf diese kollisions"aura" gesetzt, und einfach nur bei kollisionprüfung ein true oder false ausgegeben.

hatte mich ja mit schranz0r zusammen gesetzt, und hielten das für eine gute idee, und einfacher zu handhaben, statt, einzeln festzulegen auf was für kollisionen es prüfen soll.

hier so als beispiel sozusagen

Code: GLBasic [Select]
EntitySetPosition(bla, 0, 0, 0)
EntityCollisionSetRadius(bla, 1)

EntitySetPosition(blu, 100, 100, 100)
EntityCollisionSetBox(blu, x,y,z,bx,by,bz)

EntityCollision(bla, blu, [reaktion])    reaktion=  0 nichts
                                                             1 stop
                                                             2 sliden

wobei reaktion jetzt kein muss ist, sondern nur eine idee von schranz0r, wichtig wäre sozusagen nur EntityCollision(bla, blu)     return TRUE/FALSE

es werden vorher nur kollisionsaussenhüllen festgelegt, und hinterher einfach geprüft ob diese, egal wie sie definiert sind geprüft.
« Last Edit: 2008-Jun-30 by Heiko »

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10714
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
Re: 3D Entity System [DE]
« Reply #222 on: 2008-Jun-30 »
u.U. will man aber das gleiche Objekt auf verschiedene Weisen testen. z.B. box->mesh für die Welt-spieler Kollision, und sphere->sphere für gegner->spieler Kollision.

x-tra

  • Guest
Re: 3D Entity System [DE]
« Reply #223 on: 2008-Jun-30 »
ja aber das ist doch eigentlich irrelevant.


bei EntityCollision(a,b) werden zwei entities auf collision geprüft, nur abhängig vom jeweiligen radius box etc.  wenn man spieler eine radius zugewiesen hat, ist dieser eben kollisionshülle, oder eben eine box, etc.  man gibt einfach nur sozusagen eine neue kollisionsform an.

und man prüft dann intern alles durch.

das praktisch gesehen für den anwender nur noch eine abfrage zwischen zwei entities notwendig wird.

weil man doch eh zwei entities prüft, also z.b. EntityCollision(welt, spieler)  damit wäre das ergebis true oder false, und dann kann man ja entscheiden, was nach einer kollision geschehen soll.

welt wäre eben ein mesh und spieler hätte einen radius, aber dies wäre nur intern wichtig.

jede entity bekommt den standard mesh zugewiesen, oder eben etwas was man selbst festlegt(radius/box/etc.)  und es wird einfach nur entity gegen entiy geprüft, da man ja eh unterschiedlich reagieren muss.

denn wir hatten mit schranz0r auch noch eine andere überlegung, wenn mann diese kollisionen wie bisher festlegt, dann mann man unterschiedliche parameter(box radius) etc. nicht in einen topf stecken, z.b. in eine gruppe  metallische objekte, um dann einen klang abzuspielen, aber das geht ja nicht, wenn dort durcheinander box/radius etc. ist.

frag schranz0r notfalls nochmal, wir hatten uns das eigentlich ziemlich lange überlegt, bzw. es für einfacher befunden.

[edit] alternativ könnte man ja auch bei dem befehl ja noch einen parameter für die unterschiedlichen kollisionsarten angeben, aber erst bei der abfrage der kollision http://www.blitzforum.de/help/Collisions  als beispiel.
ist da insgesamt etwas einfach zu handhaben, aber ich denke die idee die schranzi und ich hatten, wäre schon vorteilhaft.


was ich meine ist...
Code: GLBasic [Select]
// ------------------------------------------ //
//! Add collision request for the next EntityUpdateCollisions
//! calls.
// \param group_src      - source group to test collisions against
// \param group_dest     - destination group to test aginst
// \param collision_mode - 0=sphere-mesh, 1=box-mesh, 2=sphere-box
// \sa EntityUpdateCollisions, EntityClearCollisions, EntitySetGroup

es wird mit 0,1,2 EINE Kollisionsart festgelegt.

oder denk ich da jetzt zu umständlich?

wenn du das so, wie es jetzt ist für einfacher und vollständiger hältst, mach mal ein beispiel, was aussagekräftiger ist.
so müsste man ja immer gleiche objekte in eine gruppe packen, man könnte ja gegner mit radius und auch welche mit box haben, dann würde das so nicht funktionieren.

Kann man das nicht doch einfacher machen?


[editedit]
Code: GLBasic [Select]
LOCAL ncol = EntityCollisionCount(juru)
FOR i = 1 TO ncol
IF EntityCollisionEntity(juru, EntityGetName$(i)) = level THEN collevel = 1
NEXT      
       IF collevel = 1
          updown = 0.01
          IF KEY(57) THEN updown=0.5
       ELSE
        updown=updown-0.02
       ENDIF
colllevel=0

ziemlich kompliziert, oder?Ich mein, man muss ja eh hinterher noch festlegen was passieren soll.

nunja, vielleicht fällt dir ja noch was einfacheres ein...

oder red ma mit schranz0r, der hat auch gute ideen...
« Last Edit: 2008-Jun-30 by Heiko »

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10714
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
Re: 3D Entity System [DE]
« Reply #224 on: 2008-Jun-30 »
Äh... Aber ich hab das doch analog zu Collisions wie bei Blitz gemacht. Nein?