def display (self): self.camera ( position = sp.tEva ((sp.world.rocket.positionX + 4, sp.world.rocket.positionY, sp.world.rocket.positionZ)), focus = sp.tEva ((sp.world.rocket.positionX, sp.world.rocket.positionY, sp.world.rocket.positionZ + 1.5)) ) self.earth () self.moon () self.body ( position = sp.tEva ((sp.world.rocket.positionX, sp.world.rocket.positionY, sp.world.rocket.positionZ)), attitude = sp.world.rocket._shipRotMat, parts = lambda: self.nose () + self.bracket ( parts = lambda: self.tankGreen () + self.tankRed () + self.tankBlue () + self.tankYellow () + self.gimbal ( rotation = sp.world.rocket.blueYellowAngle, parts = lambda: self.thruster ( rotation = sp.world.rocket.greenRedAngle, parts = lambda: self.flame ( scale = sp.tsMul ((1, 1, 1), sp.world.rocket.thrust / sp.world.rocket.thrusterMaxForce * (0.9 + 0.1 * rd.random ())), color = (1, 0.3 + 0.7 * rd.random (), 0)) ) ) ) )
def getPlateColor(temperature): return sp.tsMul((1, 0.7, 0), (1 + temperature) / 10.)
def __call__ (self, brightness): self.color = sp.tsMul (self.originalColor, 0.2 + 0.8 * brightness) return sp.Cylinder.__call__ (self)
def __call__ (self, on): self.color = self.originalColor if on else sp.tsMul (self.originalColor, 0.2) return sp.Cylinder.__call__ (self)
def getGravVec(mass0, mass1, diam, relPos): relPos = sp.tEva(relPos) dist = sp.tNor(relPos) factor = -1 if dist > diam / 2 else 0.1 return sp.tsMul(sp.tUni(relPos), factor * gamma * mass0 * mass1 / (dist * dist))