# [Solved]Two quick questions - Finding Z pos on load

1. I need to spawn monsters at random points a model (uneven), right now what I am doing is to use a collision ray and place the monster at a very, very high place. Is there a better way to do that?

2. Can I tell panda to calculate collision of a given model? For example I have 10 collision solids added in the traverse, can I tell him do calculate the collision to a given one and not for the others?

EDIT:

I changed the topic subject so people can find it easier with the search engine.
Solved, here is the code in case anyone got the same problem:

class player:
def __init__(self, posX, posY):
# Place it in an invalid x, y and a very high z
self.posX = -1000
self.posY = -1000
self.posZ = 1000
self.angle = angle
self.model = Actor("models/panda-model", {"walk": "models/panda-walk4"})
self.model.reparentTo(render)

#Please notice that the ray is affected by the scale (if any)
self.groundRay = self.model.attachNewNode(CollisionNode('colNode'))
self.groundRay.node().addSolid(CollisionRay(0, 0, 1, 0, 0, -1))

# Remove the comment to see the ray
#self.groundRay.show()

self.collisionQueue = CollisionHandlerQueue()

# temporary traverser
specialTrav = CollisionTraverser()

# now we move the object, if the position is valid it will detect the ground
self.posX = posX
self.posY = posY

specialTrav.traverse(render)

entriesNum = self.collisionQueue.getNumEntries()
if (entriesNum > 0):
self.posZ = self.getCollisionQueue().getEntry(entriesNum-1).getSurfacePoint(render).getZ()
self.collisionQueue.clearEntries()

else:
print("Error: No collision detected.\nThe point you tried to place the model may be out of bounds or you forgot to load the other models")

# clearing the special traverser
specialTrav.clearColliders()
specialTrav = None

(1) There are other approaches, but there’s nothing wrong with that one.

(2) You can create a separate CollisionTraverser for your model, add only that one model to it, and call traverse.traverse(render) explicitly.

The only potential problem with #1 is that if you are implementing fall damage Can’t have those spawning monsters dying from hitting the ground

@drdw:
Really nice idea, should have though about that… I fell stupid now =(

Yeah, that is the main problem I am facing, I can manage to work it with a boolean variable that says if it is in process of creation… but that is an unnecessary check that will be run a load of times…

Anyways, I know how to do that now… thanks a lot.