well I’m not sure why i cant do gravity, from what i get and from what i saw in roaming ralph example it should work. common sense also tells that. but im not falling when walking outside the collider of the plane
char script
from panda3d.bullet import BulletTriangleMeshShape, BulletTriangleMesh
from panda3d.bullet import BulletRigidBodyNode
from panda3d.core import CollisionHandlerPusher, CollideMask, CollisionNode, CollisionSphere, CollisionRay, \
CollisionHandlerQueue
from direct.actor.Actor import Actor
from reference import REFERENCE
from Swoosh import Swoosh
from direct.task.Timer import Timer
class Char():
speed = 20
NAMEID = 'apple_char'
ORIGIN = (0,0,0)
def __init__(self,ctrav,pusher):
x,y,z = self.ORIGIN
self.model = Actor(REFERENCE.loadTexturePath('moon6.bam'))#loader.loadModel(REFERENCE.loadTexturePath('moon.bam'))
self.model.setScale(0.5,0.5,0.5)
self.node = render.attachNewNode(self.NAMEID)
self.model.setPos(x,y,z)
self.node.setPos(x,y,z)
self.model.reparentTo(self.node)
self.futurepos = self.node.getPos()
self.qq = CollisionHandlerQueue()
self.cNode = CollisionNode(f'{self.NAMEID}')
self.cNodeP = self.model.attachNewNode(self.cNode)
self.cNodeP.setPos(x,y,z)
self.cNode.addSolid(CollisionSphere(center=(x, y, z), radius=5))
self.cNode.setFromCollideMask(CollideMask.bit(0))
self.cNode.setIntoCollideMask(CollideMask.bit(0))
self.cNodeP.setPos(self.model,0,0,2)
#self.cNodeP.show()
self.gcNode = CollisionNode(f'Gcollision_{self.NAMEID}')
self.GroundColl = CollisionRay()
self.GroundColl.setOrigin(z, y, z)
self.GroundColl.setDirection(0, 0, -1)
self.gcNode.add_solid(self.GroundColl)
self.gcNode.setFromCollideMask(CollideMask.bit(1))
self.gcNodeP = self.node.attachNewNode(self.gcNode)
self.gcNodeP.setPos(self.node,0,0,0)
#self.gcNodeP.show()
self.floater = self.node.attachNewNode(f'camera_{self.NAMEID}')
self.floater.setPos(self.node,0,0,2)
self.floater.show()
self.model.setPos(self.node,0,0,-1)
ctrav.addCollider(self.gcNodeP, self.qq)
self.controller = self.model.getAnimControl('walk.001')
print(self.controller)
#self.cNodeP.show()
pusher.horizontal = True
pusher.addCollider(self.cNodeP, self.node)
ctrav.addCollider(self.cNodeP, pusher)
self.lastDelta = [0,0]
self.node.setScale(2,2,2)
self.swoosh = Swoosh(self,ctrav)
self.cmddict = {
"up": self.Up,
"down": self.Down,
"left": self.Left,
"right": self.Right,
"shoot": self.beep,
'not shoot': self.boop,
'top' : self.top,
'bottom' : self.bottom
}
self.CanHit = False
def Update_state(self,keypass,dt, tup):
self.lastDelta = [0,0]
self.futurepos = self.node.getPos(self.node)
dx, dy = tup
valz = []
for k, v in keypass.items():
valz.append(v)
if v:
self.cmddict[k](dt)
if not any(valz[:4]):
self.model.stop()
elif True in valz[:4] and not self.controller.isPlaying():
self.model.loop('walk.001',True)
self.node.setPos(self.node,self.futurepos)
entries = list(self.qq.entries)
if len(entries) == 0:
self.node.setZ(self.node,self.node.getZ()-1)
for entry in entries:
if entry.getIntoNode().getName() == "collision_tGround":
self.node.setZ(entry.getSurfacePoint(render).getZ()+4.5)
self.qq.clear_entries()
self.node.setHpr(dx, 0, 0)
self.floater.setPos(self.node.getPos())
def Up(self, dt):
self.futurepos.x -= self.speed * dt
self.lastDelta = [0, -1]
def Down(self, dt):
self.futurepos.x += self.speed * dt
self.lastDelta = [0, 1]
def Left(self, dt):
self.futurepos.y -= self.speed * dt
self.lastDelta = [-1,0]
def Right(self, dt):
self.futurepos.y += self.speed * dt
self.lastDelta = [1, 0]
def top(self, dt):
self.futurepos.z += self.speed * dt
def bottom(self, dt):
self.futurepos.z -= self.speed * dt
def beep(self,duduh):
self.swoosh.YeetEnemy()
self.CanHit = False
def boop(self, b):
pass
#DEBUG METHODS
def changecNode(self,tup):
x,y,z = tup
self.cNodeP.setScale((x,y,z))
plane script
from panda3d.core import CollisionNode, CollisionPolygon, CollisionHandlerPusher, CollideMask, CollisionPlane, Plane, \
Point3, Vec3
from reference import REFERENCE
class test_ground():
NAMEID = 'tGround'
def __init__(self,ctrav,QQ):
self.model = loader.loadModel(REFERENCE.loadTexturePath('plane3.bam'))
self.model.setScale(0.7*10,0.7*10,0.1)
self.node = render.attachNewNode(f"{self.NAMEID}")
self.cNode = CollisionNode(f"collision_{self.NAMEID}")
self.cNode.add_solid(CollisionPlane(Plane(Vec3(0, 0, 1), Point3(0, 0, 0))))
self.cNode.setFromCollideMask(CollideMask.bit(1))
self.cNode.setIntoCollideMask(CollideMask.bit(1))
self.cNodeP = self.node.attachNewNode(self.cNode)
self.cNodeP.setScale(0.7 * 11.5, 0.7 * 11.5, 0.1)
self.model.reparentTo(self.node)
#self.cNodeP.show()
ctrav.addCollider(self.cNodeP, QQ)
and the issue:
sorry for really squeezing everything outa this place. i try to keep my questions once per day here, and like 5 a day on discord. But the urge to progress really drives me mad, and i cant just abandon the issue and work on other stuff in the meantime as it makes me feel bad