309 lines
12 KiB
Python
309 lines
12 KiB
Python
from direct.distributed import DistributedObject
|
|
from direct.directnotify import DirectNotifyGlobal
|
|
from toontown.toonbase import ToontownGlobals
|
|
from panda3d.core import *
|
|
from math import *
|
|
import math
|
|
GEO_ID = 0
|
|
|
|
def circleX(angle, radius, centerX, centerY):
|
|
x = radius * cos(angle) + centerX
|
|
return x
|
|
|
|
|
|
def circleY(angle, radius, centerX, centerY):
|
|
y = radius * sin(angle) + centerY
|
|
return y
|
|
|
|
|
|
def getCirclePoints(segCount, centerX, centerY, radius, wideX = 1.0, wideY = 1.0):
|
|
returnShape = []
|
|
for seg in xrange(0, segCount):
|
|
coordX = wideX * circleX(pi * 2.0 * float(float(seg) / float(segCount)), radius, centerX, centerY)
|
|
coordY = wideY * circleY(pi * 2.0 * float(float(seg) / float(segCount)), radius, centerX, centerY)
|
|
returnShape.append((coordX, coordY, 1))
|
|
|
|
coordX = wideX * circleX(pi * 2.0 * float(0 / segCount), radius, centerX, centerY)
|
|
coordY = wideY * circleY(pi * 2.0 * float(0 / segCount), radius, centerX, centerY)
|
|
returnShape.append((coordX, coordY, 1))
|
|
return returnShape
|
|
|
|
|
|
def addCircle(attachNode, vertexCount, radius, color = Vec4(1.0, 1.0, 1.0, 1.0), layer = 0):
|
|
targetGN = GeomNode('Circle Geom')
|
|
zFloat = 0.025
|
|
targetCircleShape = getCirclePoints(5 + vertexCount, 0.0, 0.0, radius)
|
|
gFormat = GeomVertexFormat.getV3cp()
|
|
targetCircleVertexData = GeomVertexData('holds my vertices', gFormat, Geom.UHDynamic)
|
|
targetCircleVertexWriter = GeomVertexWriter(targetCircleVertexData, 'vertex')
|
|
targetCircleColorWriter = GeomVertexWriter(targetCircleVertexData, 'color')
|
|
targetCircleVertexWriter.addData3f(0.0, 0.0, zFloat)
|
|
targetCircleColorWriter.addData4f(color[0], color[1], color[2], color[3])
|
|
for vertex in targetCircleShape:
|
|
targetCircleVertexWriter.addData3f(0.0 + vertex[0], 0.0 + vertex[1], zFloat)
|
|
targetCircleColorWriter.addData4f(color[0], color[1], color[2], color[3])
|
|
|
|
targetTris = GeomTrifans(Geom.UHStatic)
|
|
sizeTarget = len(targetCircleShape)
|
|
targetTris.addVertex(0)
|
|
for countVertex in xrange(1, sizeTarget + 1):
|
|
targetTris.addVertex(countVertex)
|
|
|
|
targetTris.addVertex(1)
|
|
targetTris.closePrimitive()
|
|
targetGeom = Geom(targetCircleVertexData)
|
|
targetGeom.addPrimitive(targetTris)
|
|
attachNode.addGeom(targetGeom)
|
|
return targetGeom
|
|
|
|
|
|
def addCircleGeom(rootNode, vertexCount, radius, color = Vec4(1.0, 1.0, 1.0, 1.0), layer = 0):
|
|
global GEO_ID
|
|
GN = GeomNode('Circle %s' % GEO_ID)
|
|
GEO_ID += 1
|
|
NodePathGeom = rootNode.attachNewNode(GN)
|
|
geo = addCircle(GN, vertexCount, radius, color, layer)
|
|
return (NodePathGeom, GN, geo)
|
|
|
|
|
|
def addSquare(attachNode, sizeX, sizeY, color = Vec4(1.0, 1.0, 1.0, 1.0), layer = 0):
|
|
targetGN = GeomNode('Square Geom')
|
|
sX = sizeX / 2.0
|
|
sY = sizeY / 2.0
|
|
color1 = color
|
|
color2 = color
|
|
color3 = color
|
|
gFormat = GeomVertexFormat.getV3n3cpt2()
|
|
boxVertexData = GeomVertexData('vertices', gFormat, Geom.UHDynamic)
|
|
boxVertexWriter = GeomVertexWriter(boxVertexData, 'vertex')
|
|
boxNormalWriter = GeomVertexWriter(boxVertexData, 'normal')
|
|
boxColorWriter = GeomVertexWriter(boxVertexData, 'color')
|
|
boxTextureWriter = GeomVertexWriter(boxVertexData, 'texcoord')
|
|
boxVertexWriter.addData3f(-sX, sY, 0.0)
|
|
boxNormalWriter.addData3f(0, 0, 1)
|
|
boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
|
|
boxTextureWriter.addData2f(0.0, 1.0)
|
|
boxVertexWriter.addData3f(-sX, -sY, 0.0)
|
|
boxNormalWriter.addData3f(0, 0, 1)
|
|
boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
|
|
boxTextureWriter.addData2f(0.0, 0.0)
|
|
boxVertexWriter.addData3f(sX, -sY, 0.0)
|
|
boxNormalWriter.addData3f(0, 0, 1)
|
|
boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
|
|
boxTextureWriter.addData2f(1.0, 0.0)
|
|
boxVertexWriter.addData3f(sX, sY, 0.0)
|
|
boxNormalWriter.addData3f(0, 0, 1)
|
|
boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
|
|
boxTextureWriter.addData2f(1.0, 1.0)
|
|
boxTris = GeomTristrips(Geom.UHStatic)
|
|
boxTris.addVertex(1)
|
|
boxTris.addVertex(2)
|
|
boxTris.addVertex(0)
|
|
boxTris.addVertex(3)
|
|
boxTris.closePrimitive()
|
|
boxGeom = Geom(boxVertexData)
|
|
boxGeom.addPrimitive(boxTris)
|
|
attachNode.addGeom(boxGeom)
|
|
return boxGeom
|
|
|
|
|
|
def addSquareGeom(rootNode, sizeX, sizeY, color = Vec4(1.0, 1.0, 1.0, 1.0), layer = 0):
|
|
global GEO_ID
|
|
GN = GeomNode('Square %s' % GEO_ID)
|
|
GEO_ID += 1
|
|
NodePathGeom = rootNode.attachNewNode(GN)
|
|
geo = addSquare(GN, sizeX, sizeY, color, layer)
|
|
return (NodePathGeom, GN, geo)
|
|
|
|
|
|
def addBox(attachNode, sizeX, sizeY, sizeZ, color = Vec4(1.0, 1.0, 1.0, 1.0), darken = 0):
|
|
targetGN = GeomNode('Box Geom')
|
|
sX = sizeX / 2.0
|
|
sY = sizeY / 2.0
|
|
sZ = sizeZ / 2.0
|
|
color1 = color
|
|
color2 = color
|
|
color3 = color
|
|
if darken:
|
|
color1 = color * 0.75
|
|
color2 = color * 0.5
|
|
color3 = color * 0.25
|
|
gFormat = GeomVertexFormat.getV3n3cp()
|
|
boxVertexData = GeomVertexData('vertices', gFormat, Geom.UHDynamic)
|
|
boxVertexWriter = GeomVertexWriter(boxVertexData, 'vertex')
|
|
boxNormalWriter = GeomVertexWriter(boxVertexData, 'normal')
|
|
boxColorWriter = GeomVertexWriter(boxVertexData, 'color')
|
|
boxVertexWriter.addData3f(sX, sY, sZ)
|
|
boxNormalWriter.addData3f(0, 1, 0)
|
|
boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
|
|
boxVertexWriter.addData3f(sX, sY, -sZ)
|
|
boxNormalWriter.addData3f(0, 1, 0)
|
|
boxColorWriter.addData4f(color1[0], color1[1], color1[2], color1[3])
|
|
boxVertexWriter.addData3f(-sX, sY, -sZ)
|
|
boxNormalWriter.addData3f(0, 1, 0)
|
|
boxColorWriter.addData4f(color1[0], color1[1], color1[2], color1[3])
|
|
boxVertexWriter.addData3f(-sX, sY, sZ)
|
|
boxNormalWriter.addData3f(0, 1, 0)
|
|
boxColorWriter.addData4f(color1[0], color1[1], color1[2], color1[3])
|
|
boxVertexWriter.addData3f(-sX, -sY, sZ)
|
|
boxNormalWriter.addData3f(0, -1, 0)
|
|
boxColorWriter.addData4f(color2[0], color2[1], color2[2], color2[3])
|
|
boxVertexWriter.addData3f(-sX, -sY, -sZ)
|
|
boxNormalWriter.addData3f(0, -1, 0)
|
|
boxColorWriter.addData4f(color3[0], color3[1], color3[2], color3[3])
|
|
boxVertexWriter.addData3f(sX, -sY, -sZ)
|
|
boxNormalWriter.addData3f(0, -1, 0)
|
|
boxColorWriter.addData4f(color2[0], color2[1], color2[2], color2[3])
|
|
boxVertexWriter.addData3f(sX, -sY, sZ)
|
|
boxNormalWriter.addData3f(0, -1, 0)
|
|
boxColorWriter.addData4f(color2[0], color2[1], color2[2], color2[3])
|
|
boxVertexWriter.addData3f(-sX, sY, sZ)
|
|
boxNormalWriter.addData3f(0, 0, 1)
|
|
boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
|
|
boxVertexWriter.addData3f(-sX, -sY, sZ)
|
|
boxNormalWriter.addData3f(0, 0, 1)
|
|
boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
|
|
boxVertexWriter.addData3f(sX, -sY, sZ)
|
|
boxNormalWriter.addData3f(0, 0, 1)
|
|
boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
|
|
boxVertexWriter.addData3f(sX, sY, sZ)
|
|
boxNormalWriter.addData3f(0, 0, 1)
|
|
boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
|
|
boxVertexWriter.addData3f(sX, sY, -sZ)
|
|
boxNormalWriter.addData3f(0, 0, -1)
|
|
boxColorWriter.addData4f(color3[0], color3[1], color3[2], color3[3])
|
|
boxVertexWriter.addData3f(sX, -sY, -sZ)
|
|
boxNormalWriter.addData3f(0, 0, -1)
|
|
boxColorWriter.addData4f(color3[0], color3[1], color3[2], color3[3])
|
|
boxVertexWriter.addData3f(-sX, -sY, -sZ)
|
|
boxNormalWriter.addData3f(0, 0, -1)
|
|
boxColorWriter.addData4f(color3[0], color3[1], color3[2], color3[3])
|
|
boxVertexWriter.addData3f(-sX, sY, -sZ)
|
|
boxNormalWriter.addData3f(0, 0, -1)
|
|
boxColorWriter.addData4f(color3[0], color3[1], color3[2], color3[3])
|
|
boxVertexWriter.addData3f(sX, sY, sZ)
|
|
boxNormalWriter.addData3f(0, 0, 1)
|
|
boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
|
|
boxVertexWriter.addData3f(sX, -sY, sZ)
|
|
boxNormalWriter.addData3f(0, 0, 1)
|
|
boxColorWriter.addData4f(color1[0], color1[1], color1[2], color1[3])
|
|
boxVertexWriter.addData3f(sX, -sY, -sZ)
|
|
boxNormalWriter.addData3f(0, 0, 1)
|
|
boxColorWriter.addData4f(color1[0], color1[1], color1[2], color1[3])
|
|
boxVertexWriter.addData3f(sX, sY, -sZ)
|
|
boxNormalWriter.addData3f(0, 0, 1)
|
|
boxColorWriter.addData4f(color1[0], color1[1], color1[2], color1[3])
|
|
boxVertexWriter.addData3f(-sX, sY, -sZ)
|
|
boxNormalWriter.addData3f(0, 0, 1)
|
|
boxColorWriter.addData4f(color2[0], color2[1], color2[2], color2[3])
|
|
boxVertexWriter.addData3f(-sX, -sY, -sZ)
|
|
boxNormalWriter.addData3f(0, 0, 1)
|
|
boxColorWriter.addData4f(color3[0], color3[1], color3[2], color3[3])
|
|
boxVertexWriter.addData3f(-sX, -sY, sZ)
|
|
boxNormalWriter.addData3f(0, 0, 1)
|
|
boxColorWriter.addData4f(color2[0], color2[1], color2[2], color2[3])
|
|
boxVertexWriter.addData3f(-sX, sY, sZ)
|
|
boxNormalWriter.addData3f(0, 0, 1)
|
|
boxColorWriter.addData4f(color2[0], color2[1], color2[2], color2[3])
|
|
boxTris = GeomTristrips(Geom.UHStatic)
|
|
boxTris.addVertex(0)
|
|
boxTris.addVertex(1)
|
|
boxTris.addVertex(3)
|
|
boxTris.addVertex(2)
|
|
boxTris.closePrimitive()
|
|
boxTris.addVertex(5)
|
|
boxTris.addVertex(6)
|
|
boxTris.addVertex(4)
|
|
boxTris.addVertex(7)
|
|
boxTris.closePrimitive()
|
|
boxTris.addVertex(9)
|
|
boxTris.addVertex(10)
|
|
boxTris.addVertex(8)
|
|
boxTris.addVertex(11)
|
|
boxTris.closePrimitive()
|
|
boxTris.addVertex(13)
|
|
boxTris.addVertex(14)
|
|
boxTris.addVertex(12)
|
|
boxTris.addVertex(15)
|
|
boxTris.closePrimitive()
|
|
boxTris.addVertex(16)
|
|
boxTris.addVertex(17)
|
|
boxTris.addVertex(19)
|
|
boxTris.addVertex(18)
|
|
boxTris.closePrimitive()
|
|
boxTris.addVertex(21)
|
|
boxTris.addVertex(22)
|
|
boxTris.addVertex(20)
|
|
boxTris.addVertex(23)
|
|
boxTris.closePrimitive()
|
|
boxGeom = Geom(boxVertexData)
|
|
boxGeom.addPrimitive(boxTris)
|
|
attachNode.addGeom(boxGeom)
|
|
return boxGeom
|
|
|
|
|
|
def addBoxGeom(rootNode, sizeX, sizeY, sizeZ, color = Vec4(1.0, 1.0, 1.0, 1.0), darken = 0):
|
|
global GEO_ID
|
|
GN = GeomNode('Box %s' % GEO_ID)
|
|
GEO_ID += 1
|
|
nodePathGeom = rootNode.attachNewNode(GN)
|
|
geo = addBox(GN, sizeX, sizeY, sizeZ, color, darken)
|
|
return (nodePathGeom, GN, geo)
|
|
|
|
|
|
def addArrow(attachNode, sizeX, sizeY, color = Vec4(1.0, 1.0, 1.0, 1.0), layer = 0):
|
|
targetGN = GeomNode('Arrow Geom')
|
|
sX = sizeX / 2.0
|
|
sY = sizeY / 2.0
|
|
color1 = color
|
|
color2 = color
|
|
color3 = color
|
|
gFormat = GeomVertexFormat.getV3n3cp()
|
|
boxVertexData = GeomVertexData('vertices', gFormat, Geom.UHDynamic)
|
|
boxVertexWriter = GeomVertexWriter(boxVertexData, 'vertex')
|
|
boxNormalWriter = GeomVertexWriter(boxVertexData, 'normal')
|
|
boxColorWriter = GeomVertexWriter(boxVertexData, 'color')
|
|
boxVertexWriter.addData3f(-sX, sY, 0.0)
|
|
boxNormalWriter.addData3f(0, 0, 1)
|
|
boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
|
|
boxVertexWriter.addData3f(-sX, -sY, 0.0)
|
|
boxNormalWriter.addData3f(0, 0, 1)
|
|
boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
|
|
boxVertexWriter.addData3f(sX, -sY, 0.0)
|
|
boxNormalWriter.addData3f(0, 0, 1)
|
|
boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
|
|
boxVertexWriter.addData3f(sX, sY, 0.0)
|
|
boxNormalWriter.addData3f(0, 0, 1)
|
|
boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
|
|
boxTris = GeomTristrips(Geom.UHStatic)
|
|
boxTris.addVertex(1)
|
|
boxTris.addVertex(2)
|
|
boxTris.addVertex(0)
|
|
boxTris.addVertex(3)
|
|
boxTris.closePrimitive()
|
|
boxVertexWriter.addData3f(-sX * 2.0, sY, 0.0)
|
|
boxNormalWriter.addData3f(0, 0, 1)
|
|
boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
|
|
boxVertexWriter.addData3f(sX * 2.0, sY, 0.0)
|
|
boxNormalWriter.addData3f(0, 0, 1)
|
|
boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
|
|
boxVertexWriter.addData3f(0.0, sY * 2.0, 0.0)
|
|
boxNormalWriter.addData3f(0, 0, 1)
|
|
boxColorWriter.addData4f(color[0], color[1], color[2], color[3])
|
|
boxTris.addVertex(4)
|
|
boxTris.addVertex(5)
|
|
boxTris.addVertex(6)
|
|
boxTris.closePrimitive()
|
|
boxGeom = Geom(boxVertexData)
|
|
boxGeom.addPrimitive(boxTris)
|
|
attachNode.addGeom(boxGeom)
|
|
return boxGeom
|
|
|
|
|
|
def addArrowGeom(rootNode, sizeX, sizeY, color = Vec4(1.0, 1.0, 1.0, 1.0), layer = 0):
|
|
global GEO_ID
|
|
GN = GeomNode('Arrow %s' % GEO_ID)
|
|
GEO_ID += 1
|
|
NodePathGeom = rootNode.attachNewNode(GN)
|
|
geo = addArrow(GN, sizeX, sizeY, color, layer)
|
|
return (NodePathGeom, GN, geo)
|