Poodletooth-iLand/toontown/toontowngui/Clickable3d.py

35 lines
1.2 KiB
Python
Raw Normal View History

2015-03-03 16:10:12 -06:00
from panda3d.core import Quat, Point3, Point2
from toontown.toontowngui.Clickable import Clickable
class Clickable3d(Clickable):
def setClickRegionFrame(self, left, right, bottom, top):
transform = self.contents.getNetTransform()
# We use the inverse of the cam transform so that it will not be
# applied to the frame points twice:
camTransform = base.cam.getNetTransform().getInverse()
# Compose the inverse of the cam transform and our node's transform:
transform = camTransform.compose(transform)
# Discard its rotational components:
transform.setQuat(Quat())
# Transform the frame points into cam space:
mat = transform.getMat()
camSpaceTopLeft = mat.xformPoint(Point3(left, 0, top))
camSpaceBottomRight = mat.xformPoint(Point3(right, 0, bottom))
# Project into screen space:
screenSpaceTopLeft = Point2()
screenSpaceBottomRight = Point2()
base.camLens.project(Point3(camSpaceTopLeft), screenSpaceTopLeft)
base.camLens.project(Point3(camSpaceBottomRight), screenSpaceBottomRight)
left, top = screenSpaceTopLeft
right, bottom = screenSpaceBottomRight
self.region.setFrame(left, right, bottom, top)