def _doBillboard(self): if self.SHOULD_BILLBOARD: self.innerNP.setEffect( BillboardEffect.make( Vec3(0, 0, 1), True, False, self.billboardOffset, NodePath(), # Empty; look at scene camera Point3(0, 0, 0))) else: self.billboardOffset = 0.0
def setChatAbsolute(self, chatString=None): if not chatString or chatString.isspace() or len(chatString) == 0: return self.clearChat() self.taskId = random.randint(0, 1000000000000000000000000000000) if self.nameTag: self.getNameTag().hide() if self.isThought(chatString): chatString = self.removeThoughtPrefix(chatString) bubble = loader.loadModel(CIGlobals.ThoughtBubble) else: length = math.sqrt(len(chatString)) / self.LENGTH_FACTOR if length < self.MIN_LENGTH: length = self.MIN_LENGTH if length > self.MAX_LENGTH: length = self.MAX_LENGTH bubble = loader.loadModel(CIGlobals.ChatBubble) if self.autoClearChat: taskMgr.doMethodLater( length, self.clearChatTask, "clearAvatarChat-%s" % (str(self.taskId))) if self.avatarType == CIGlobals.Suit: font = CIGlobals.getSuitFont() else: font = CIGlobals.getToonFont() self.chatBubble = ChatBalloon(bubble).generate(chatString, font) self.chatBubble.setEffect( BillboardEffect.make(Vec3(0, 0, 1), True, False, 3.0, camera, Point3(0, 0, 0))) if self.nameTag: self.chatBubble.setZ(self.getNameTag().getZ()) else: if self.avatarType == CIGlobals.Suit: nametagZ = self.suitPlan.getNametagZ() self.chatBubble.setZ(nametagZ) if self.avatar and hasattr(self.avatar, 'getGhost'): if not self.avatar.getGhost( ) or self.avatar.doId == base.localAvatar.doId: self.chatBubble.reparentTo(self) else: self.chatBubble.reparentTo(self) LabelScaler().resize(self.chatBubble)
def doBillboardEffect(self): billboardEffect = BillboardEffect.make( Vec3(0, 0, 1), True, False, self.billboardOffset, base.cam, Point3(0, 0, 0)) self.contents.setEffect(billboardEffect)
def apply(self, nodePath): effect = BillboardEffect.make(self.up_vector, self.eye_relative, self.axial_rotate, 0.0, NodePath(), LPoint3f(0, 0, 0)) nodePath.setEffect(effect)