mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-24 20:22:33 -06:00
35 lines
1.2 KiB
Python
35 lines
1.2 KiB
Python
|
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)
|