예제 #1
0
class Accelerator:

    def __init__(self, x, y, z):

        self.model = loader.loadModel("models/circle")
        self.model.reparentTo(render)
        self.model.setPos(x, y, z)
        self.model.setHpr(0, 0, 0)
        self.model.setColor(1, 1, 1, 1)
        self.model.setTexture(loader.loadTexture('textures/spiral.png'))

        self.glow = loader.loadModel("models/tube")
        self.glow.reparentTo(render)
        self.glow.setShaderOff()
        self.glow.setLightOff()
        self.glow.hide(BitMask32.allOn())
        self.glow.show(BitMask32(0x01))
        self.glow.setPos(x, y, z + 0.05)
        self.glow.setHpr(0, 0, 0)
        self.glow.setColor(1, 1, 1, 1)
        texture = loader.loadTexture('textures/green_glow.png')
        texture.setWrapU(Texture.WMClamp)
        texture.setWrapV(Texture.WMClamp)
        self.glow.setTexture(texture)
        self.glow.setTransparency(TransparencyAttrib.MAlpha)
        self._active = False
        self.visibility = 0

        taskMgr.add(self._update_task, "AcceleratorUpdateTask")

    def enable_physics(self, physics):
        self.geom = OdeCylinderGeom(physics.space, 1.5, 0.1)
        self.geom.setPosition(self.model.getPos())
        self.geom.setQuaternion(self.model.getQuat())
        physics.actions.append(self._deactivate)

    def _deactivate(self):
        self._active = False

    def _update_task(self, task):
        if self._active:
            self.visibility = min(1, self.visibility + globalClock.getDt())
        else:
            self.visibility = max(0, self.visibility - globalClock.getDt()*2)
        self.glow.setAlphaScale(self.visibility)
        return task.cont

    def player_interact(self, player):
        distance = (player.model.getPos().getXy()-
                    self.model.getPos().getXy()).length()
        if distance < .3:
            self._active = True
            return True
        else:
            return False

    def reset(self):
        pass