Start in windows 7 32bit :
3.0.0 UPDATE! NEW MECHANICS OF LIGHT!
Add to main directory :
./shaders : shaders.zip
New code :
#!/usr/bin/env python
# -*- coding: utf_8 -*-
# Π‘ΠΎΠ·Π΄Π°Π½ΠΎ : 22 ΡΠΈΡΠ»ΠΎ, ΡΠ½Π²Π°ΡΡ, 2021 Π³ΠΎΠ΄
# ΠΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ
from direct.showbase.ShowBase import ShowBase
from panda3d.core import CollisionTraverser, CollisionNode
from panda3d.core import CollisionHandlerPusher, CollisionSphere, CollisionInvSphere
from panda3d.core import Filename, AmbientLight, DirectionalLight
from panda3d.core import PandaNode, NodePath, Camera, TextNode
from direct.particles.Particles import Particles
from direct.particles.ParticleEffect import ParticleEffect
from panda3d.core import PointLight, Spotlight
from panda3d.core import CollideMask
from panda3d.core import loadPrcFileData
from panda3d.core import *
from direct.gui.OnscreenText import OnscreenText
from direct.gui.OnscreenImage import OnscreenImage
from direct.gui.DirectButton import DirectButton
from direct.gui.DirectSlider import DirectSlider
from direct.actor.Actor import Actor
import random
import sys
import time
import os
import math
VERSION = '3.0.0'
settings = ['window-title Droid Game ' + VERSION]
loadPrcFileData('', settings[0]) # Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π½Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ (Π²ΠΎΠ·ΠΌΡΠΌ Π΅Π³ΠΎ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ settings)
# Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π³Π»Π°Π²Π½ΡΠΉ ΠΊΠ»Π°ΡΡ Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ
class DroidShooter(ShowBase):
def __init__(self):
ShowBase.__init__(self) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ Π²ΡΠ΅ ΡΠ΅Π»ΡΡ ΠΈΠ· direct
self.speed = 800 # ΡΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ
self.menu() # Π·Π²ΠΏΡΡΠΊ ΠΌΠ΅Π½Ρ
def menu(self):
base.enableParticles() # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΡΡΠ΅ΠΊΡ Π΄ΡΠΌΠ°
self.win.setClearColor((0, 0, 0, 1)) # ΠΠ°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ ΡΡΡΠ½ΡΠΌ. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΡΡΠΎΠΌ ΠΈΠ³ΡΠΎΠ²ΠΎΠΌ Π΄Π²ΠΈΠΆΠΊΠ΅ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ Π·Π°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΡΠΌ.
self.font = loader.loadFont('./fonts/doom_font.ttf') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΡΠΈΡΡ ΠΈΠ· ΠΈΠ³ΡΡ doom
self.inst_font = loader.loadFont('./fonts/arial.ttf') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΡΠΈΡΡ arial
self.crackSound = loader.loadMusic('./sounds/crack.wav') # Π·Π²ΡΠΊ Π²Π·ΡΡΠ²Π° ΠΊΠΎΡΠ°Π±Π»Ρ
self.shotSound = loader.loadMusic('./sounds/shot.wav') # Π·Π²ΡΠΊ Π²ΡΡΡΡΠ΅Π»Π°
self.startSound = loader.loadMusic('./sounds/started.wav') # Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ°
self.errorSound = loader.loadMusic('./sounds/error.wav') # Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ°
self.errorSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.startSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.crackSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.shotSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.startSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ
self.button_start = DirectButton(pos=(0.7, 0, 0), text="CTAPT",
scale=.3, pad=(.2, .2),
command=self.load_game) # ΠΊΠ½ΠΎΠΏΠΊΠ° Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ
self.slider_sun = DirectSlider(pos=(0.1, 0, .75), scale=0.8, value=0,
command=self.set_sun_interval)
self.title = self.addTitle("Droid game " + VERSION)
# ΠΠ°ΠΏΠ΅ΡΠ°ΡΠ°Π΅ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅
self.inst1 = self.addInstructions(0.95, u"[ESC]: ΠΡΡ
ΠΎΠ΄")
self.inst2 = self.addInstructions(0.90, u"[Left Arrow]: ΠΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² Π»Π΅Π²ΠΎ")
self.inst3 = self.addInstructions(0.85, u"[Right Arrow]: ΠΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² ΠΏΡΠ°Π²ΠΎ")
self.inst4 = self.addInstructions(0.80, u"[Up Arrow]: ΠΠΏΠ΅ΡΠ΅Π΄")
self.inst5 = self.addInstructions(0.75, u"[a]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΎ")
self.inst6 = self.addInstructions(0.70, u"[d]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² Π»Π΅Π²ΠΎ")
self.inst7 = self.addInstructions(0.65, u"[Left Arrow + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst8 = self.addInstructions(0.60, u"[Right Arrow + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² ΠΏΡΠ°Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst9 = self.addInstructions(0.55, u"[a + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst10 = self.addInstructions(0.50, u"[d + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst11 = self.addInstructions(0.45, u"[space]: ΡΡΡΠ΅Π»ΡΠ±Π°")
self.inst12 = self.addInstructions(0.35, u"[s]: Π΄ΠΎΡΡΠ°ΡΡ ΡΠΎΠ½Π°ΡΠΈΠΊ")
self.inst13 = self.addInstructions(0.30, u"[w]: ΡΠ±ΡΠ°ΡΡ ΠΎΡΡΠΆΠΈΠ΅")
self.inst14 = self.addInstructions(0.25, u"[f]: ΠΏΠΎΠ»Π½ΡΠΉ ΡΠ°Π·Π³ΠΎΠ½(ΠΠΠΠ‘ΠΠ!)")
self.inst15 = self.addInstructions(0.20, u"[0]: ΠΏΠΎΠΆΠ°ΡΠΎΡΡΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°")
self.accept("escape", sys.exit) # ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ Esc Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ.
def set_sun_interval(self):
self.sun_interval = self.slider_sun.guiItem.getValue() * 500 # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ»Π°ΠΉΠ΄Π΅ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΎΠ΅ Π½Π° 500, Π΄Π° ΡΡΠ°ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½ΠΎ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΏΠ»Π΅Π²Π°ΡΡ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅Π½Ρ, ΠΈΠ±ΠΎ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ½ΡΡΠΈΡ ΠΏΡΠΎΡΡΠΎ Π½Π΅ΡΡ :)
def load_game(self):
self.button_start.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ ΡΡΠ°ΡΡΠ°
self.title.hide() # ΡΠ΄Π°Π»ΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠ³ΡΡ
# ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
self.inst1.hide()
self.inst2.hide()
self.inst3.hide()
self.inst4.hide()
self.inst5.hide()
self.inst6.hide()
self.inst7.hide()
self.inst8.hide()
self.inst9.hide()
self.inst10.hide()
self.inst11.hide()
self.inst12.hide()
self.inst13.hide()
self.inst14.hide()
self.inst15.hide()
self.slider_sun.hide() # ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΡΠ»Π°ΠΉΠ΄Π΅Ρ ΡΠΎΠ»Π½ΡΠ°
self.keyMap = {
"left": 0, "right": 0, "forward": 0, "cam-left": 0, "cam-right": 0} # Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ»ΠΎΠ²Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΏΠΎ ΠΈΡ
Π½Π°ΠΆΠ°ΡΠΈΡ
# Π ΠΈΡΡΠ΅ΠΌ Π·Π²ΡΠ·Π΄Ρ
self.sky = loader.loadModel("./models/sky/solar_sky_sphere") # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠΎΡΠΌΠΎΡΠ°(ΡΡΠΎ ΡΡΠ΅ΡΠ°)
self.sky_tex = loader.loadTexture("./tex/stars_1k_tex.jpg") # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ΅ΠΊΡΡΡΡΡ
self.sky.setTexture(self.sky_tex, 1) # Π·Π°ΡΠ΅Π½Π΄Π΅ΡΠΈΠΌ ΡΠ΅ΠΊΡΡΡΡΡ Π½Π° Π½Π΅Π±ΠΎ
self.sky.reparentTo(render) # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π½Π΅Π±ΠΎ
self.sky.setScale(40000) # ΡΠ°ΡΡΠΈΡΠΈΠΌ Π½Π΅Π±ΠΎ Π΄ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ panda3d
self.environ = loader.loadModel("models/world/falcon.egg") # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π² blender ΠΌΠΈΡ.
self.environ.reparentTo(render) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΌΠΈΡΠ° Π² ΠΎΠΊΠ½ΠΎ
droidStartPos = (-1, 6, 1.5 ) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΡΡΠ°ΡΡΠΎΠ²ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π² ΠΌΠΈΡΠ΅.
enemyStartPos = (-6, 1, 0.5) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ°-Π΄ΡΠΎΠΈΠ΄Π°.
self.droid = Actor("models/player/seeker.egg") # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° (ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π² blender)
self.enemy = Actor("models/enemies/r2d2/r2d2.egg") # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° (ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π² blender)
self.droid.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π² Π½Π°Ρ ΠΌΠΈΡ.
self.enemy.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π² Π½Π°Ρ ΠΌΠΈΡ.
self.droid.setScale(1) # ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° 1
self.enemy.setScale(1) # ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π½Π° 1
self.droid.setPos(droidStartPos) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ΡΡ Π½Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ
self.enemy.setPos(enemyStartPos) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π½Π° ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ΡΡ Π½Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ
self.weapon = Actor('models/weapon/lightsaber.egg') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.bullet = Actor('models/weapon/bullet/bullet.egg.pz') # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΠΏΡΠ»Ρ
self.flash = Actor('models/whishlyflash/handlamp.egg') # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.weapon.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ Π² Π½Π°Ρ ΠΌΠΈΡ
self.bullet.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΏΡΠ»Ρ Π² ΠΌΠΈΡ Π½ΠΎ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΎΠ½Π° ΡΠ°ΠΌΠ° Π½Π΅ ΡΠΊΠΎΡΠΎ
self.flash.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ Π² Π½Π°Ρ ΠΌΠΈΡ
self.weapon.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΡΠΊΠΈ
self.bullet.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΠ»ΠΈ
self.flash.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΎΠ½Π°ΡΠΈΠΊΠ°
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 1 # ΠΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΡΠΊΠΈ
self.weapon.setPos(self.weapon_pos) # ΠΠΎΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ ΡΡΡΡ Π²ΡΡΠ΅ ΠΈΠ³ΡΠΎΠΊΠ°
self.spotlight = camera.attachNewNode(Spotlight("spotlight")) # ΠΠΎΠ½ΡΠΈΠ³ΠΈ ΡΠΎΠ½Π°ΡΠΈΠΊΠ°
self.spotlight.node().setColor((.3, .3, .3, 1))
self.spotlight.node().setSpecularColor((0, 0, 0, 1))
self.floater = NodePath(PandaNode("floater"))
self.floater.reparentTo(self.droid)
self.floater.setZ(2.0)
self.accept("escape", sys.exit) # ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ Esc Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ.
self.accept("arrow_left", self.setKey, ["left", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π»Π΅Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ
self.accept("arrow_right", self.setKey, ["right", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΏΡΠ°Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²ΠΏΡΠ°Π²ΠΎ
self.accept("arrow_up", self.setKey, ["forward", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΏΠ΅ΡΡΠ΄ - ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("a", self.setKey, ["cam-left", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ a - ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΠΈ
self.accept("d", self.setKey, ["cam-right", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ s - ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΠΈ
self.accept("arrow_left-up", self.setKey, ["left", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+Π²Π»Π΅Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("arrow_right-up", self.setKey, ["right", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+ΠΏΡΠ°Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²ΠΏΡΠ°Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("arrow_up-up", self.setKey, ["forward", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+Π²Π²Π΅ΡΡ - ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("a-up", self.setKey, ["cam-left", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ a+Π²ΠΏΠ΅ΡΡΠ΄ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²Π»Π΅Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("d-up", self.setKey, ["cam-right", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ s+Π²ΠΏΠ΅ΡΡΠ΄ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΏΡΠ°Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("space", self.shot) # ΠΏΡΠΈ ΠΏΡΠΎΠ±Π΅Π»Π΅ ΡΡΡΠ΅Π»ΡΠ΅ΠΌ
self.accept("s", self.toggleLights, [[self.spotlight]]) # ΠΠΊΠ»ΡΡΠΈΡΡ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.accept("w", self.weapon_hide) # ΠΏΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ w - ΡΠ±Π΅ΡΡΠΌ ΠΎΡΡΠΆΠΈΠ΅.
base.enableParticles() # ΠΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΡΠΌΠ°
self.t = loader.loadModel("models/weapon/lightsaber.egg") # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ Π΅ΡΡ ΠΎΡΡΠΆΠΈΠ΅
self.t.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ Π² Π½Π°Ρ ΠΌΠΈΡ
self.p = ParticleEffect() # ΠΠΊΠ»ΡΡΠΈΠΌ ΡΡΡΠ΅ΠΊΡ Π΄ΡΠΌΠ°
self.accept('f', self.particle_start) # ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ f(ΠΎΡ force) - Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ°ΠΉΠ» Π΄ΡΠΌΠ° ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ Π² ΠΊΠΎΠ½ΡΠΈΠ³ ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠ° Π°Π½ΠΈΠΌΠ°ΡΠΈΡ ΡΡΠ°Π»Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΄ΡΠΌΠ°
self.accept('0', self.fountain) # ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ f+o(fountain) Π²ΠΊΠ»ΡΡΠΈΠΌ ΠΏΠΎΠΆΠ°ΡΠΎΡΡΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ
self.accept('arrow_1+s', self.shot)
taskMgr.add(self.move, "moveTask") # ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π·Π°Π΄Π°ΡΡ Π² Π½Π°Ρ Π΄Π²ΠΈΠΆΠΎΠΊ
self.isMoving = False # Π‘ΡΠ°Π²ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ isMoving Π½Π° False(ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΌΠ΅Π½ΡΡΡ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅) ΡΡΠΎΠ±Ρ ΠΈΠ³ΡΠΎΠΊ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΡΠΎΡΠ».
# ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΡΠ²Π΅Ρ Π±ΡΠ» ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π²ΡΠΊΠ»ΡΡΠ΅Π½.
self.disableMouse() # ΠΡΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· ΠΌΡΡΠΊΡ
self.camera.setPos(self.droid.getX(), self.droid.getY() + 1, 3) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΡΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ³ΡΠΎΠΊΠ°
self.black_light() # Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π²ΡΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ²Π΅Ρ
self.state = 100 # Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠΎΡΠ°Π±Π»Ρ
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.hide_weapon = False # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΎΡΡΠΆΠΈΠ΅ Π½Π΅ ΡΠ±ΡΠ°Π½ΠΎ
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 5)
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 1)
self.motor_pos1 = 25.238849639892578, 8.962211608886719, 1.5 # ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΌΠΎΡΠΎΡΠ°
self.motor_pos2 = -20.676218032836914, 10.55816650390625, 1.5 # ΠΏΠΎΠ·ΠΈΡΠΈΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΡΠΎΡΠ°
self.motor1 = self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.motor_pos1) # ΠΌΠΎΡΠΎΡ 1
self.motor2 = self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.motor_pos2) # ΠΌΠΎΡΠΎΡ 2
self.state_info2 = OnscreenText(text='', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.force = False # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ Π½Π΅ ΡΠ°Π·Π³ΠΎΠ½ΡΠ»ΠΈΡΡ
# ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ
self.cTrav = CollisionTraverser()
pusher = CollisionHandlerPusher()
environCenter = self.environ.getBounds().getCenter()
environRad = self.environ.getBounds().getRadius()
cNode = CollisionNode("environment")
cNode.addSolid(CollisionInvSphere(environCenter, environRad))
environC = self.environ.attachNewNode(cNode)
droidCenter = self.droid.getBounds().getCenter()
droidRad = self.droid.getBounds().getRadius()
cNode = CollisionNode("droid")
cNode.addSolid(CollisionSphere(droidCenter, droidRad))
droidC = self.droid.attachNewNode(cNode)
pusher.addCollider(droidC, self.droid)
self.cTrav.addCollider(droidC, pusher)
enemyCenter = self.enemy.getBounds().getCenter()
enemyRad = self.enemy.getBounds().getRadius()
cNode = CollisionNode("enemy")
cNode.addSolid(CollisionSphere(enemyCenter, enemyRad))
enemyC = self.enemy.attachNewNode(cNode)
pusher.addCollider(enemyC, self.enemy)
self.cTrav.addCollider(enemyC, pusher)
# ΡΠΎΠ»Π½ΡΠ΅(Π½ΠΎΠ²Π°Ρ ΠΌΠ΅Ρ
Π°Π½ΠΈΠΊΠ° ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΡ)
sun = DirectionalLight("sun")
sun.set_color_temperature(6000)
sun.color = sun.color * 4
sun_path = render.attach_new_node(sun)
sun_path.set_pos(10, -10, -10)
sun_path.look_at(0, 0, 0)
sun_path.hprInterval(self.sun_interval, (sun_path.get_h(), sun_path.get_p() - 360, sun_path.get_r()), bakeInStart=True).loop()
render.set_light(sun_path)
def loadParticleConfig(self, filename, pos):
self.p.cleanup()
self.p = ParticleEffect()
self.p.loadConfig(Filename(filename))
self.p.start(self.t)
self.p.setPos(pos)
def particle_start(self):
self.force = True # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΌΡ ΡΠΆΠ΅ ΡΠ°Π·Π³ΠΎΠ½ΡΠ»ΠΈΡΡ
# ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.environ.setY(self.environ.getY() + self.speed) # Π½Π΅ΡΡΠΌΡΡ Π²ΠΏΡΠ°Π²ΠΎ
self.droid.setY(self.droid.getY() + self.speed) # ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ Π΄ΡΠΎΠΈΠ΄Π° Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.enemy.setY(self.enemy.getY() + self.speed) # ΡΠ΄ΡΠΈΠ³Π°Π΅ΠΌ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.weapon.setY(self.weapon.getY() + self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.flash.setY(self.flash.getY() + self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.state -= 1 # ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΠΌΠ΅Π½ΡΡΠ΅ ΠΎΡΠΊΠΎΠ²
self.state_info.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΎΡΠΊΠΈ
camvec = self.droid.getPos() - self.camera.getPos()
camvec.setZ(0)
camdist = camvec.length()
camvec.normalize()
if camdist > 10.0:
self.camera.setPos(self.camera.getPos() + camvec * (camdist - 10))
camdist = 10.0
if camdist < 5.0:
self.camera.setPos(self.camera.getPos() - camvec * (5 - camdist))
camdist = 5.0
self.camera.lookAt(self.floater)
if self.state != 10 and self.state > 10:
self.state_info.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΠΆΠΈΠ·Π½ΡΡ
ΠΊΠΎΡΠ°Π±Π»Ρ
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam/steam.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ Π½Π΅ΠΈΡΠΏΡΠ°Π²Π΅Π½', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
else:
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam_critic/steam.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
if self.state < 10:
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='ΠΏΠ°Π΄Π°Π΅ΠΌ!', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
def fountain(self):
if self.force:
if self.state != 100:
self.state += 1
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5) + 500, random.randrange(0, 1)
self.loadParticleConfig('special_effects/fountain/fountain.ptf', self.fountain_pos)
else :
if self.state != 100:
self.state += 1
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 1)
self.loadParticleConfig('special_effects/fountain/fountain.ptf', self.fountain_pos)
def black_light(self):
# ΠΡΠΊΠ»ΡΡΠ΅Π½ΡΠΉ ΡΠ²Π΅Ρ
ambientLight = AmbientLight("ambientLight")
ambientLight.setColor((0, 0, 0, 1))
directionalLight = DirectionalLight("directionalLight")
directionalLight.setDirection((-5, -5, -5))
directionalLight.setColor((1, 1, 1, 1))
directionalLight.setSpecularColor((1, 1, 1, 1))
render.setLight(render.attachNewNode(ambientLight))
render.setLight(render.attachNewNode(directionalLight))
def weapon_hide(self):
# Π£Π±ΡΠ°ΡΡ ΠΎΡΡΠΆΠΈΠ΅
self.hide_weapon = True
self.weapon.hide()
def toggleLights(self, lights):
# Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΠ΅
if self.hide_weapon:
for light in lights:
if render.hasLight(light):
render.clearLight(light)
else:
render.setLight(light)
self.flash.setPos(self.weapon_pos)
else:
return
def shot(self):
dt = globalClock.getDt() + 0.5 # CΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
if not self.hide_weapon : # Π΅ΡΠ»ΠΈ ΠΎΡΡΠΆΠΈΠ΅ ΡΠ±ΡΠ°Π½ΠΎ ΡΠΎ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΡΠ΅Π»ΡΡΡ
self.shotSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π²ΡΡΡΡΠ΅Π»Π°
self.bullet.setPos(self.weapon_pos) # ΠΡΠ»Ρ Π±ΡΠ΄Π΅Ρ ΡΠΏΠ°Π²Π½ΠΈΡΡΡ Π²Π½ΡΡΡΠΈ ΠΏΡΡΠΊΠΈ
self.bullet.setY(self.bullet, -11 * dt) # Π‘Π΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΏΡΠ»Ρ Π½Π° ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ Π²ΠΏΠ΅ΡΡΠ΄
def check_loss(self):
if self.state == 0: # Π΅ΡΠ»ΠΈ ΠΆΠΈΠ·Π½Π΅ΠΉ Ρ ΠΊΠΎΡΠ°Π±Π»Ρ Π½Π΅ ΠΎΡΡΠ°Π»ΠΎΡΡ
self.black_light() # Π²ΠΊΠ»ΡΡΠΈΠΌ ΡΡΡΠ½ΡΠΉ ΡΠ²Π΅Ρ
self.weapon_hide() # ΡΠ±Π΅ΡΡΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.info = OnscreenText(text='ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅', style=1, font=self.font,
fg=(1,1,1,1),
pos=(-1.3, -0.5), align=TextNode.ALeft, scale=0.3) # Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΎ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠΈ
self.crackSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π²Π·ΡΡΠ²Π°
def setKey(self, key, value):
self.keyMap[key] = value # ΠΠ΅Π»Π°Π΅ΠΌ ΠΌΠ΅Ρ
aΠ½uΠ·ΠΌ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ.
def move(self, task):
''' ΠΠ΅Π»Π°Π΅ΠΌ ΡΡΡΠ½ΠΊΡΠΈΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° '''
dt = globalClock.getDt() - .005 # CΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
# ΠΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π²Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΡΠ°Π²ΠΎ
if self.keyMap["cam-left"]:
self.camera.setX(self.camera, -20 * dt) # ΠΠ΅Π½ΡΠ΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΊΠ° ΠΊΠ°ΠΌΠ΅ΡΡ ΠΏΠΎ ΠΈΠΊΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈΠ»ΡΠ·ΠΈΡ ΠΏΠΎΠ²ΠΎΡΠΎΡΠ° ΡΠ³Π»Π° Π»ΡΡΠ°. ΠΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΊΠ°ΠΌΠ΅ΡΠ° ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ.
if self.keyMap["cam-right"]:
self.camera.setX(self.camera, +20 * dt) # Π’ΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ Π½Π°Π²Π΅ΡΡ
Ρ.
startpos = self.droid.getPos() # Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ΄ΠΎΠ±Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ³ΡΠΎΠΊΠ°
if self.keyMap["left"]:
self.droid.setH(self.droid.getH() + 300 * dt)
self.enemy.setY(self.enemy, 1 * dt)
if self.keyMap["right"]:
self.droid.setH(self.droid.getH() - 300 * dt)
self.enemy.setY(self.enemy, -1 * dt)
if self.keyMap["forward"]:
self.droid.setY(self.droid, -25 * dt)
self.enemy.setX(self.enemy, 1 * dt)
# Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ±ΡΠ°Π½ΠΎ ΠΎΡΡΠΆΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ
if not self.hide_weapon:
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 3
self.weapon.setPos(self.weapon_pos) # ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΡΠΊΠΈ
else:
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 3
self.flash.setPos(self.weapon_pos)
camvec = self.droid.getPos() - self.camera.getPos()
camvec.setZ(0)
camdist = camvec.length()
camvec.normalize()
if camdist > 10.0:
self.camera.setPos(self.camera.getPos() + camvec * (camdist - 10))
camdist = 10.0
if camdist < 5.0:
self.camera.setPos(self.camera.getPos() - camvec * (5 - camdist))
camdist = 5.0
self.camera.lookAt(self.floater)
return task.cont
def addInstructions(self, pos, msg):
return OnscreenText(text=msg, style=1, fg=(1,1,1,1), font=self.inst_font, pos=(-1.3, pos), align=TextNode.ALeft, scale = .04, shadow=(0,0,0,1))
def addTitle(self, text):
return OnscreenText(text=text, style=1, fg=(1, 1, 1, 1), scale=0.2,
parent=base.a2dBottomRight, align=TextNode.ARight,
pos=(-0.1, 0.09), shadow=(0, 0, 0, 1), font=self.font)
droid = DroidShooter() # Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ
droid.run() # 3Π°ΠΏΡΡΡΠΈΠΌ ΠΈΠ³ΡΡ
# ΡΠ°Π·ΡΠΎΠ±ΠΎΡΡΠΈΠΊΠΈ :
# ΠΠ»Π°Π²Π½ΡΠΉ Π°Π²ΡΠΎΡ : ma3rx
# ΠΠΎΠΌΠΎΡΠ½ΠΈΠΊ : panda3dmastercoder( ΠΏΡΠΈΡΠΎΠ΅Π΄Π΅Π½ΠΈΠ»ΡΡ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ 31 ΡΠ½Π²Π°ΡΡ, 12:??)
Hi! I create 3.0.1 update!
Bug fix fountain!
New code :
#!/usr/bin/env python
# -*- coding: utf_8 -*-
# Π‘ΠΎΠ·Π΄Π°Π½ΠΎ : 22 ΡΠΈΡΠ»ΠΎ, ΡΠ½Π²Π°ΡΡ, 2021 Π³ΠΎΠ΄
# ΠΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ
from direct.showbase.ShowBase import ShowBase
from panda3d.core import CollisionTraverser, CollisionNode
from panda3d.core import CollisionHandlerPusher, CollisionSphere, CollisionInvSphere
from panda3d.core import Filename, AmbientLight, DirectionalLight
from panda3d.core import PandaNode, NodePath, Camera, TextNode
from direct.particles.Particles import Particles
from direct.particles.ParticleEffect import ParticleEffect
from panda3d.core import PointLight, Spotlight
from panda3d.core import CollideMask
from panda3d.core import loadPrcFileData
from panda3d.core import *
from direct.gui.OnscreenText import OnscreenText
from direct.gui.OnscreenImage import OnscreenImage
from direct.gui.DirectButton import DirectButton
from direct.gui.DirectSlider import DirectSlider
from direct.actor.Actor import Actor
import random
import sys
import time
import os
import math
VERSION = '3.0.1'
settings = ['window-title Droid Game ' + VERSION]
loadPrcFileData('', settings[0]) # Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π½Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ (Π²ΠΎΠ·ΠΌΡΠΌ Π΅Π³ΠΎ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ settings)
# Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π³Π»Π°Π²Π½ΡΠΉ ΠΊΠ»Π°ΡΡ Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ
class DroidShooter(ShowBase):
def __init__(self):
ShowBase.__init__(self) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ Π²ΡΠ΅ ΡΠ΅Π»ΡΡ ΠΈΠ· direct
self.speed = 800 # ΡΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ
self.menu() # Π·Π²ΠΏΡΡΠΊ ΠΌΠ΅Π½Ρ
def menu(self):
base.enableParticles() # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΡΡΠ΅ΠΊΡ Π΄ΡΠΌΠ°
self.win.setClearColor((0, 0, 0, 1)) # ΠΠ°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ ΡΡΡΠ½ΡΠΌ. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΡΡΠΎΠΌ ΠΈΠ³ΡΠΎΠ²ΠΎΠΌ Π΄Π²ΠΈΠΆΠΊΠ΅ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ Π·Π°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΡΠΌ.
self.font = loader.loadFont('./fonts/doom_font.ttf') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΡΠΈΡΡ ΠΈΠ· ΠΈΠ³ΡΡ doom
self.inst_font = loader.loadFont('./fonts/arial.ttf') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΡΠΈΡΡ arial
self.crackSound = loader.loadMusic('./sounds/crack.wav') # Π·Π²ΡΠΊ Π²Π·ΡΡΠ²Π° ΠΊΠΎΡΠ°Π±Π»Ρ
self.shotSound = loader.loadMusic('./sounds/shot.wav') # Π·Π²ΡΠΊ Π²ΡΡΡΡΠ΅Π»Π°
self.startSound = loader.loadMusic('./sounds/started.wav') # Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ°
self.errorSound = loader.loadMusic('./sounds/error.wav') # Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ°
self.errorSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.startSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.crackSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.shotSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.startSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ
self.button_start = DirectButton(pos=(0.7, 0, 0), text="CTAPT",
scale=.3, pad=(.2, .2),
command=self.load_game) # ΠΊΠ½ΠΎΠΏΠΊΠ° Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ
self.slider_sun = DirectSlider(pos=(0.1, 0, .75), scale=0.8, value=0,
command=self.set_sun_interval)
self.title = self.addTitle("Droid game " + VERSION)
# ΠΠ°ΠΏΠ΅ΡΠ°ΡΠ°Π΅ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅
self.inst1 = self.addInstructions(0.95, u"[ESC]: ΠΡΡ
ΠΎΠ΄")
self.inst2 = self.addInstructions(0.90, u"[Left Arrow]: ΠΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² Π»Π΅Π²ΠΎ")
self.inst3 = self.addInstructions(0.85, u"[Right Arrow]: ΠΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² ΠΏΡΠ°Π²ΠΎ")
self.inst4 = self.addInstructions(0.80, u"[Up Arrow]: ΠΠΏΠ΅ΡΠ΅Π΄")
self.inst5 = self.addInstructions(0.75, u"[a]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΎ")
self.inst6 = self.addInstructions(0.70, u"[d]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² Π»Π΅Π²ΠΎ")
self.inst7 = self.addInstructions(0.65, u"[Left Arrow + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst8 = self.addInstructions(0.60, u"[Right Arrow + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² ΠΏΡΠ°Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst9 = self.addInstructions(0.55, u"[a + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst10 = self.addInstructions(0.50, u"[d + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst11 = self.addInstructions(0.45, u"[space]: ΡΡΡΠ΅Π»ΡΠ±Π°")
self.inst12 = self.addInstructions(0.35, u"[s]: Π΄ΠΎΡΡΠ°ΡΡ ΡΠΎΠ½Π°ΡΠΈΠΊ")
self.inst13 = self.addInstructions(0.30, u"[w]: ΡΠ±ΡΠ°ΡΡ ΠΎΡΡΠΆΠΈΠ΅")
self.inst14 = self.addInstructions(0.25, u"[f]: ΠΏΠΎΠ»Π½ΡΠΉ ΡΠ°Π·Π³ΠΎΠ½(ΠΠΠΠ‘ΠΠ!)")
self.inst15 = self.addInstructions(0.20, u"[0]: ΠΏΠΎΠΆΠ°ΡΠΎΡΡΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°")
self.accept("escape", sys.exit) # ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ Esc Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ.
def set_sun_interval(self):
self.sun_interval = self.slider_sun.guiItem.getValue() * 500 # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ»Π°ΠΉΠ΄Π΅ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΎΠ΅ Π½Π° 500, Π΄Π° ΡΡΠ°ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½ΠΎ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΏΠ»Π΅Π²Π°ΡΡ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅Π½Ρ, ΠΈΠ±ΠΎ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ½ΡΡΠΈΡ ΠΏΡΠΎΡΡΠΎ Π½Π΅ΡΡ :)
def load_game(self):
self.button_start.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ ΡΡΠ°ΡΡΠ°
self.title.hide() # ΡΠ΄Π°Π»ΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠ³ΡΡ
# ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
self.inst1.hide()
self.inst2.hide()
self.inst3.hide()
self.inst4.hide()
self.inst5.hide()
self.inst6.hide()
self.inst7.hide()
self.inst8.hide()
self.inst9.hide()
self.inst10.hide()
self.inst11.hide()
self.inst12.hide()
self.inst13.hide()
self.inst14.hide()
self.inst15.hide()
self.slider_sun.hide() # ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΡΠ»Π°ΠΉΠ΄Π΅Ρ ΡΠΎΠ»Π½ΡΠ°
self.keyMap = {
"left": 0, "right": 0, "forward": 0, "cam-left": 0, "cam-right": 0} # Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ»ΠΎΠ²Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΏΠΎ ΠΈΡ
Π½Π°ΠΆΠ°ΡΠΈΡ
# Π ΠΈΡΡΠ΅ΠΌ Π·Π²ΡΠ·Π΄Ρ
self.sky = loader.loadModel("./models/sky/solar_sky_sphere") # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠΎΡΠΌΠΎΡΠ°(ΡΡΠΎ ΡΡΠ΅ΡΠ°)
self.sky_tex = loader.loadTexture("./tex/stars_1k_tex.jpg") # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ΅ΠΊΡΡΡΡΡ
self.sky.setTexture(self.sky_tex, 1) # Π·Π°ΡΠ΅Π½Π΄Π΅ΡΠΈΠΌ ΡΠ΅ΠΊΡΡΡΡΡ Π½Π° Π½Π΅Π±ΠΎ
self.sky.reparentTo(render) # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π½Π΅Π±ΠΎ
self.sky.setScale(40000) # ΡΠ°ΡΡΠΈΡΠΈΠΌ Π½Π΅Π±ΠΎ Π΄ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ panda3d
self.environ = loader.loadModel("models/world/falcon.egg") # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π² blender ΠΌΠΈΡ.
self.environ.reparentTo(render) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΌΠΈΡΠ° Π² ΠΎΠΊΠ½ΠΎ
droidStartPos = (-1, 6, 1.5 ) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΡΡΠ°ΡΡΠΎΠ²ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π² ΠΌΠΈΡΠ΅.
enemyStartPos = (-6, 1, 0.5) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ°-Π΄ΡΠΎΠΈΠ΄Π°.
self.droid = Actor("models/player/seeker.egg") # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° (ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π² blender)
self.enemy = Actor("models/enemies/r2d2/r2d2.egg") # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° (ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π² blender)
self.droid.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π² Π½Π°Ρ ΠΌΠΈΡ.
self.enemy.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π² Π½Π°Ρ ΠΌΠΈΡ.
self.droid.setScale(1) # ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° 1
self.enemy.setScale(1) # ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π½Π° 1
self.droid.setPos(droidStartPos) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ΡΡ Π½Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ
self.enemy.setPos(enemyStartPos) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π½Π° ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ΡΡ Π½Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ
self.weapon = Actor('models/weapon/lightsaber.egg') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.bullet = Actor('models/weapon/bullet/bullet.egg.pz') # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΠΏΡΠ»Ρ
self.flash = Actor('models/whishlyflash/handlamp.egg') # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.weapon.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ Π² Π½Π°Ρ ΠΌΠΈΡ
self.bullet.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΏΡΠ»Ρ Π² ΠΌΠΈΡ Π½ΠΎ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΎΠ½Π° ΡΠ°ΠΌΠ° Π½Π΅ ΡΠΊΠΎΡΠΎ
self.flash.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ Π² Π½Π°Ρ ΠΌΠΈΡ
self.weapon.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΡΠΊΠΈ
self.bullet.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΠ»ΠΈ
self.flash.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΎΠ½Π°ΡΠΈΠΊΠ°
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 1 # ΠΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΡΠΊΠΈ
self.weapon.setPos(self.weapon_pos) # ΠΠΎΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ ΡΡΡΡ Π²ΡΡΠ΅ ΠΈΠ³ΡΠΎΠΊΠ°
self.spotlight = camera.attachNewNode(Spotlight("spotlight")) # ΠΠΎΠ½ΡΠΈΠ³ΠΈ ΡΠΎΠ½Π°ΡΠΈΠΊΠ°
self.spotlight.node().setColor((.3, .3, .3, 1))
self.spotlight.node().setSpecularColor((0, 0, 0, 1))
self.floater = NodePath(PandaNode("floater"))
self.floater.reparentTo(self.droid)
self.floater.setZ(2.0)
self.accept("escape", sys.exit) # ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ Esc Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ.
self.accept("arrow_left", self.setKey, ["left", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π»Π΅Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ
self.accept("arrow_right", self.setKey, ["right", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΏΡΠ°Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²ΠΏΡΠ°Π²ΠΎ
self.accept("arrow_up", self.setKey, ["forward", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΏΠ΅ΡΡΠ΄ - ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("a", self.setKey, ["cam-left", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ a - ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΠΈ
self.accept("d", self.setKey, ["cam-right", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ s - ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΠΈ
self.accept("arrow_left-up", self.setKey, ["left", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+Π²Π»Π΅Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("arrow_right-up", self.setKey, ["right", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+ΠΏΡΠ°Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²ΠΏΡΠ°Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("arrow_up-up", self.setKey, ["forward", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+Π²Π²Π΅ΡΡ - ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("a-up", self.setKey, ["cam-left", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ a+Π²ΠΏΠ΅ΡΡΠ΄ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²Π»Π΅Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("d-up", self.setKey, ["cam-right", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ s+Π²ΠΏΠ΅ΡΡΠ΄ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΏΡΠ°Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("space", self.shot) # ΠΏΡΠΈ ΠΏΡΠΎΠ±Π΅Π»Π΅ ΡΡΡΠ΅Π»ΡΠ΅ΠΌ
self.accept("s", self.toggleLights, [[self.spotlight]]) # ΠΠΊΠ»ΡΡΠΈΡΡ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.accept("w", self.weapon_hide) # ΠΏΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ w - ΡΠ±Π΅ΡΡΠΌ ΠΎΡΡΠΆΠΈΠ΅.
base.enableParticles() # ΠΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΡΠΌΠ°
self.t = loader.loadModel("models/weapon/lightsaber.egg") # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ Π΅ΡΡ ΠΎΡΡΠΆΠΈΠ΅
self.t.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ Π² Π½Π°Ρ ΠΌΠΈΡ
self.p = ParticleEffect() # ΠΠΊΠ»ΡΡΠΈΠΌ ΡΡΡΠ΅ΠΊΡ Π΄ΡΠΌΠ°
self.accept('f', self.particle_start) # ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ f(ΠΎΡ force) - Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ°ΠΉΠ» Π΄ΡΠΌΠ° ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ Π² ΠΊΠΎΠ½ΡΠΈΠ³ ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠ° Π°Π½ΠΈΠΌΠ°ΡΠΈΡ ΡΡΠ°Π»Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΄ΡΠΌΠ°
self.accept('0', self.fountain) # ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ f+o(fountain) Π²ΠΊΠ»ΡΡΠΈΠΌ ΠΏΠΎΠΆΠ°ΡΠΎΡΡΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ
self.accept('arrow_1+s', self.shot)
taskMgr.add(self.move, "moveTask") # ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π·Π°Π΄Π°ΡΡ Π² Π½Π°Ρ Π΄Π²ΠΈΠΆΠΎΠΊ
self.isMoving = False # Π‘ΡΠ°Π²ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ isMoving Π½Π° False(ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΌΠ΅Π½ΡΡΡ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅) ΡΡΠΎΠ±Ρ ΠΈΠ³ΡΠΎΠΊ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΡΠΎΡΠ».
# ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΡΠ²Π΅Ρ Π±ΡΠ» ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π²ΡΠΊΠ»ΡΡΠ΅Π½.
self.disableMouse() # ΠΡΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· ΠΌΡΡΠΊΡ
self.camera.setPos(self.droid.getX(), self.droid.getY() + 1, 3) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΡΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ³ΡΠΎΠΊΠ°
self.black_light() # Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π²ΡΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ²Π΅Ρ
self.state = 100 # Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠΎΡΠ°Π±Π»Ρ
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.hide_weapon = False # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΎΡΡΠΆΠΈΠ΅ Π½Π΅ ΡΠ±ΡΠ°Π½ΠΎ
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 5)
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 1)
self.motor_pos1 = 25.238849639892578, 8.962211608886719, 1.5 # ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΌΠΎΡΠΎΡΠ°
self.motor_pos2 = -20.676218032836914, 10.55816650390625, 1.5 # ΠΏΠΎΠ·ΠΈΡΠΈΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΡΠΎΡΠ°
self.motor1 = self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.motor_pos1) # ΠΌΠΎΡΠΎΡ 1
self.motor2 = self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.motor_pos2) # ΠΌΠΎΡΠΎΡ 2
self.state_info2 = OnscreenText(text='', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.force = False # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ Π½Π΅ ΡΠ°Π·Π³ΠΎΠ½ΡΠ»ΠΈΡΡ
# ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ
self.cTrav = CollisionTraverser()
pusher = CollisionHandlerPusher()
environCenter = self.environ.getBounds().getCenter()
environRad = self.environ.getBounds().getRadius()
cNode = CollisionNode("environment")
cNode.addSolid(CollisionInvSphere(environCenter, environRad))
environC = self.environ.attachNewNode(cNode)
droidCenter = self.droid.getBounds().getCenter()
droidRad = self.droid.getBounds().getRadius()
cNode = CollisionNode("droid")
cNode.addSolid(CollisionSphere(droidCenter, droidRad))
droidC = self.droid.attachNewNode(cNode)
pusher.addCollider(droidC, self.droid)
self.cTrav.addCollider(droidC, pusher)
enemyCenter = self.enemy.getBounds().getCenter()
enemyRad = self.enemy.getBounds().getRadius()
cNode = CollisionNode("enemy")
cNode.addSolid(CollisionSphere(enemyCenter, enemyRad))
enemyC = self.enemy.attachNewNode(cNode)
pusher.addCollider(enemyC, self.enemy)
self.cTrav.addCollider(enemyC, pusher)
# ΡΠΎΠ»Π½ΡΠ΅(Π½ΠΎΠ²Π°Ρ ΠΌΠ΅Ρ
Π°Π½ΠΈΠΊΠ° ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΡ)
sun = DirectionalLight("sun")
sun.set_color_temperature(6000)
sun.color = sun.color * 4
sun_path = render.attach_new_node(sun)
sun_path.set_pos(10, -10, -10)
sun_path.look_at(0, 0, 0)
sun_path.hprInterval(self.sun_interval, (sun_path.get_h(), sun_path.get_p() - 360, sun_path.get_r()), bakeInStart=True).loop()
render.set_light(sun_path)
def loadParticleConfig(self, filename, pos):
self.p.cleanup()
self.p = ParticleEffect()
self.p.loadConfig(Filename(filename))
self.p.start(self.t)
self.p.setPos(pos)
def particle_start(self):
self.force = True # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΌΡ ΡΠΆΠ΅ ΡΠ°Π·Π³ΠΎΠ½ΡΠ»ΠΈΡΡ
# ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.environ.setY(self.environ.getY() + self.speed) # Π½Π΅ΡΡΠΌΡΡ Π²ΠΏΡΠ°Π²ΠΎ
self.droid.setY(self.droid.getY() + self.speed) # ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ Π΄ΡΠΎΠΈΠ΄Π° Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.enemy.setY(self.enemy.getY() + self.speed) # ΡΠ΄ΡΠΈΠ³Π°Π΅ΠΌ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.weapon.setY(self.weapon.getY() + self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.flash.setY(self.flash.getY() + self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.state -= 1 # ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΠΌΠ΅Π½ΡΡΠ΅ ΠΎΡΠΊΠΎΠ²
self.state_info.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΎΡΠΊΠΈ
camvec = self.droid.getPos() - self.camera.getPos()
camvec.setZ(0)
camdist = camvec.length()
camvec.normalize()
if camdist > 10.0:
self.camera.setPos(self.camera.getPos() + camvec * (camdist - 10))
camdist = 10.0
if camdist < 5.0:
self.camera.setPos(self.camera.getPos() - camvec * (5 - camdist))
camdist = 5.0
self.camera.lookAt(self.floater)
if self.state != 10 and self.state > 10:
self.state_info.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΠΆΠΈΠ·Π½ΡΡ
ΠΊΠΎΡΠ°Π±Π»Ρ
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam/steam.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ Π½Π΅ΠΈΡΠΏΡΠ°Π²Π΅Π½', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
else:
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam_critic/steam.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
if self.state < 10:
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='ΠΏΠ°Π΄Π°Π΅ΠΌ!', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
def fountain(self):
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΡΠ΅ΠΊΡΡ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ
if self.force:
if self.state != 100:
self.state += 1
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5) + 500, random.randrange(0, 1)
self.loadParticleConfig('special_effects/fountain/fountain.ptf', self.fountain_pos)
else :
if self.state != 100:
self.state += 1
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 1)
self.loadParticleConfig('special_effects/fountain/fountain.ptf', self.fountain_pos)
def black_light(self):
# ΠΡΠΊΠ»ΡΡΠ΅Π½ΡΠΉ ΡΠ²Π΅Ρ
ambientLight = AmbientLight("ambientLight")
ambientLight.setColor((0, 0, 0, 1))
directionalLight = DirectionalLight("directionalLight")
directionalLight.setDirection((-5, -5, -5))
directionalLight.setColor((1, 1, 1, 1))
directionalLight.setSpecularColor((1, 1, 1, 1))
render.setLight(render.attachNewNode(ambientLight))
render.setLight(render.attachNewNode(directionalLight))
def weapon_hide(self):
# Π£Π±ΡΠ°ΡΡ ΠΎΡΡΠΆΠΈΠ΅
self.hide_weapon = True
self.weapon.hide()
def toggleLights(self, lights):
# Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΠ΅
if self.hide_weapon:
for light in lights:
if render.hasLight(light):
render.clearLight(light)
else:
render.setLight(light)
self.flash.setPos(self.weapon_pos)
else:
return
def shot(self):
dt = globalClock.getDt() + 0.5 # CΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
if not self.hide_weapon : # Π΅ΡΠ»ΠΈ ΠΎΡΡΠΆΠΈΠ΅ ΡΠ±ΡΠ°Π½ΠΎ ΡΠΎ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΡΠ΅Π»ΡΡΡ
self.shotSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π²ΡΡΡΡΠ΅Π»Π°
self.bullet.setPos(self.weapon_pos) # ΠΡΠ»Ρ Π±ΡΠ΄Π΅Ρ ΡΠΏΠ°Π²Π½ΠΈΡΡΡ Π²Π½ΡΡΡΠΈ ΠΏΡΡΠΊΠΈ
self.bullet.setY(self.bullet, -11 * dt) # Π‘Π΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΏΡΠ»Ρ Π½Π° ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ Π²ΠΏΠ΅ΡΡΠ΄
def check_loss(self):
if self.state == 0: # Π΅ΡΠ»ΠΈ ΠΆΠΈΠ·Π½Π΅ΠΉ Ρ ΠΊΠΎΡΠ°Π±Π»Ρ Π½Π΅ ΠΎΡΡΠ°Π»ΠΎΡΡ
self.black_light() # Π²ΠΊΠ»ΡΡΠΈΠΌ ΡΡΡΠ½ΡΠΉ ΡΠ²Π΅Ρ
self.weapon_hide() # ΡΠ±Π΅ΡΡΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.info = OnscreenText(text='ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅', style=1, font=self.font,
fg=(1,1,1,1),
pos=(-1.3, -0.5), align=TextNode.ALeft, scale=0.3) # Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΎ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠΈ
self.crackSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π²Π·ΡΡΠ²Π°
def setKey(self, key, value):
self.keyMap[key] = value # ΠΠ΅Π»Π°Π΅ΠΌ ΠΌΠ΅Ρ
aΠ½uΠ·ΠΌ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ.
def move(self, task):
''' ΠΠ΅Π»Π°Π΅ΠΌ ΡΡΡΠ½ΠΊΡΠΈΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° '''
dt = globalClock.getDt() - .005 # CΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
# ΠΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π²Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΡΠ°Π²ΠΎ
if self.keyMap["cam-left"]:
self.camera.setX(self.camera, -20 * dt) # ΠΠ΅Π½ΡΠ΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΊΠ° ΠΊΠ°ΠΌΠ΅ΡΡ ΠΏΠΎ ΠΈΠΊΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈΠ»ΡΠ·ΠΈΡ ΠΏΠΎΠ²ΠΎΡΠΎΡΠ° ΡΠ³Π»Π° Π»ΡΡΠ°. ΠΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΊΠ°ΠΌΠ΅ΡΠ° ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ.
if self.keyMap["cam-right"]:
self.camera.setX(self.camera, +20 * dt) # Π’ΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ Π½Π°Π²Π΅ΡΡ
Ρ.
startpos = self.droid.getPos() # Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ΄ΠΎΠ±Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ³ΡΠΎΠΊΠ°
if self.keyMap["left"]:
self.droid.setH(self.droid.getH() + 300 * dt)
self.enemy.setY(self.enemy, 1 * dt)
if self.keyMap["right"]:
self.droid.setH(self.droid.getH() - 300 * dt)
self.enemy.setY(self.enemy, -1 * dt)
if self.keyMap["forward"]:
self.droid.setY(self.droid, -25 * dt)
self.enemy.setX(self.enemy, 1 * dt)
# Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ±ΡΠ°Π½ΠΎ ΠΎΡΡΠΆΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ
if not self.hide_weapon:
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 3
self.weapon.setPos(self.weapon_pos) # ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΡΠΊΠΈ
else:
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 3
self.flash.setPos(self.weapon_pos)
camvec = self.droid.getPos() - self.camera.getPos()
camvec.setZ(0)
camdist = camvec.length()
camvec.normalize()
if camdist > 10.0:
self.camera.setPos(self.camera.getPos() + camvec * (camdist - 10))
camdist = 10.0
if camdist < 5.0:
self.camera.setPos(self.camera.getPos() - camvec * (5 - camdist))
camdist = 5.0
self.camera.lookAt(self.floater)
return task.cont
def addInstructions(self, pos, msg):
return OnscreenText(text=msg, style=1, fg=(1,1,1,1), font=self.inst_font, pos=(-1.3, pos), align=TextNode.ALeft, scale = .04, shadow=(0,0,0,1))
def addTitle(self, text):
return OnscreenText(text=text, style=1, fg=(1, 1, 1, 1), scale=0.2,
parent=base.a2dBottomRight, align=TextNode.ARight,
pos=(-0.1, 0.09), shadow=(0, 0, 0, 1), font=self.font)
droid = DroidShooter() # Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ
droid.run() # 3Π°ΠΏΡΡΡΠΈΠΌ ΠΈΠ³ΡΡ
# ΡΠ°Π·ΡΠΎΠ±ΠΎΡΡΠΈΠΊΠΈ :
# ΠΠ»Π°Π²Π½ΡΠΉ Π°Π²ΡΠΎΡ : ma3rx
# ΠΠΎΠΌΠΎΡΠ½ΠΈΠΊ : panda3dmastercoder( ΠΏΡΠΈΡΠΎΠ΅Π΄Π΅Π½ΠΈΠ»ΡΡ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ 31 ΡΠ½Π²Π°ΡΡ, 12:??)
3.0.2 update! I added cosmo-fighter.
Add to directory ./models : fighter.zip
New code :
#!/usr/bin/env python
# -*- coding: utf_8 -*-
# Π‘ΠΎΠ·Π΄Π°Π½ΠΎ : 22 ΡΠΈΡΠ»ΠΎ, ΡΠ½Π²Π°ΡΡ, 2021 Π³ΠΎΠ΄
# ΠΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ
from direct.showbase.ShowBase import ShowBase
from panda3d.core import CollisionTraverser, CollisionNode
from panda3d.core import CollisionHandlerPusher, CollisionSphere, CollisionInvSphere
from panda3d.core import Filename, AmbientLight, DirectionalLight
from panda3d.core import PandaNode, NodePath, Camera, TextNode
from direct.particles.Particles import Particles
from direct.particles.ParticleEffect import ParticleEffect
from panda3d.core import PointLight, Spotlight
from panda3d.core import CollideMask
from panda3d.core import loadPrcFileData
from panda3d.core import *
from direct.gui.OnscreenText import OnscreenText
from direct.gui.OnscreenImage import OnscreenImage
from direct.gui.DirectButton import DirectButton
from direct.gui.DirectSlider import DirectSlider
from direct.actor.Actor import Actor
import random
import sys
import time
import os
import math
VERSION = '3.0.2'
settings = ['window-title Droid Game ' + VERSION,
'fullscreen 0']
loadPrcFileData('', settings[0]) # Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π½Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ (Π²ΠΎΠ·ΠΌΡΠΌ Π΅Π³ΠΎ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ settings)
loadPrcFileData('', settings[1]) # Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠΊΡΠ°Π½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ
# Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π³Π»Π°Π²Π½ΡΠΉ ΠΊΠ»Π°ΡΡ Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ
class DroidShooter(ShowBase):
def __init__(self):
ShowBase.__init__(self) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ Π²ΡΠ΅ ΡΠ΅Π»ΡΡ ΠΈΠ· direct
self.speed = 1800 # ΡΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ
self.menu() # Π·Π²ΠΏΡΡΠΊ ΠΌΠ΅Π½Ρ
def menu(self):
base.enableParticles() # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΡΡΠ΅ΠΊΡ Π΄ΡΠΌΠ°
self.win.setClearColor((0, 0, 0, 1)) # ΠΠ°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ ΡΡΡΠ½ΡΠΌ. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΡΡΠΎΠΌ ΠΈΠ³ΡΠΎΠ²ΠΎΠΌ Π΄Π²ΠΈΠΆΠΊΠ΅ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ Π·Π°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΡΠΌ.
self.font = loader.loadFont('./fonts/doom_font.ttf') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΡΠΈΡΡ ΠΈΠ· ΠΈΠ³ΡΡ doom
self.inst_font = loader.loadFont('./fonts/arial.ttf') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΡΠΈΡΡ arial
self.crackSound = loader.loadMusic('./sounds/crack.wav') # Π·Π²ΡΠΊ Π²Π·ΡΡΠ²Π° ΠΊΠΎΡΠ°Π±Π»Ρ
self.shotSound = loader.loadMusic('./sounds/shot.wav') # Π·Π²ΡΠΊ Π²ΡΡΡΡΠ΅Π»Π°
self.startSound = loader.loadMusic('./sounds/started.wav') # Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ°
self.errorSound = loader.loadMusic('./sounds/error.wav') # Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ°
self.errorSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.startSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.crackSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.shotSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.startSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ
self.button_start = DirectButton(pos=(0.7, 0, 0), text="CTAPT",
scale=.3, pad=(.2, .2),
command=self.load_game) # ΠΊΠ½ΠΎΠΏΠΊΠ° Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ
self.slider_sun = DirectSlider(pos=(0.1, 0, .75), scale=0.8, value=0,
command=self.set_sun_interval)
self.title = self.addTitle("Droid game " + VERSION)
# ΠΠ°ΠΏΠ΅ΡΠ°ΡΠ°Π΅ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅
self.inst1 = self.addInstructions(0.95, u"[ESC]: ΠΡΡ
ΠΎΠ΄")
self.inst2 = self.addInstructions(0.90, u"[Left Arrow]: ΠΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² Π»Π΅Π²ΠΎ")
self.inst3 = self.addInstructions(0.85, u"[Right Arrow]: ΠΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² ΠΏΡΠ°Π²ΠΎ")
self.inst4 = self.addInstructions(0.80, u"[Up Arrow]: ΠΠΏΠ΅ΡΠ΅Π΄")
self.inst5 = self.addInstructions(0.75, u"[a]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΎ")
self.inst6 = self.addInstructions(0.70, u"[d]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² Π»Π΅Π²ΠΎ")
self.inst7 = self.addInstructions(0.65, u"[Left Arrow + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst8 = self.addInstructions(0.60, u"[Right Arrow + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² ΠΏΡΠ°Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst9 = self.addInstructions(0.55, u"[a + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst10 = self.addInstructions(0.50, u"[d + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst11 = self.addInstructions(0.45, u"[space]: ΡΡΡΠ΅Π»ΡΠ±Π°")
self.inst12 = self.addInstructions(0.40, u"[s]: Π΄ΠΎΡΡΠ°ΡΡ ΡΠΎΠ½Π°ΡΠΈΠΊ")
self.inst13 = self.addInstructions(0.35, u"[w]: ΡΠ±ΡΠ°ΡΡ ΠΎΡΡΠΆΠΈΠ΅")
self.inst14 = self.addInstructions(0.30, u"[f]: ΠΏΠΎΠ»Π½ΡΠΉ ΡΠ°Π·Π³ΠΎΠ½(ΠΠΠΠ‘ΠΠ!)")
self.inst15 = self.addInstructions(0.25, u"[0]: ΠΏΠΎΠΆΠ°ΡΠΎΡΡΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°")
self.accept("escape", sys.exit) # ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ Esc Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ.
def set_sun_interval(self):
self.sun_interval = self.slider_sun.guiItem.getValue() * 100 # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ»Π°ΠΉΠ΄Π΅ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΎΠ΅ Π½Π° 500, Π΄Π° ΡΡΠ°ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½ΠΎ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΏΠ»Π΅Π²Π°ΡΡ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅Π½Ρ, ΠΈΠ±ΠΎ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ½ΡΡΠΈΡ ΠΏΡΠΎΡΡΠΎ Π½Π΅ΡΡ :)
def load_game(self):
self.button_start.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ ΡΡΠ°ΡΡΠ°
self.title.hide() # ΡΠ΄Π°Π»ΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠ³ΡΡ
# ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
self.inst1.hide()
self.inst2.hide()
self.inst3.hide()
self.inst4.hide()
self.inst5.hide()
self.inst6.hide()
self.inst7.hide()
self.inst8.hide()
self.inst9.hide()
self.inst10.hide()
self.inst11.hide()
self.inst12.hide()
self.inst13.hide()
self.inst14.hide()
self.inst15.hide()
self.slider_sun.hide() # ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΡΠ»Π°ΠΉΠ΄Π΅Ρ ΡΠΎΠ»Π½ΡΠ°
self.keyMap = {
"left": 0, "right": 0, "forward": 0, "cam-left": 0, "cam-right": 0} # Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ»ΠΎΠ²Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΏΠΎ ΠΈΡ
Π½Π°ΠΆΠ°ΡΠΈΡ
# Π ΠΈΡΡΠ΅ΠΌ Π·Π²ΡΠ·Π΄Ρ
self.sky = loader.loadModel("./models/sky/solar_sky_sphere") # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠΎΡΠΌΠΎΡΠ°(ΡΡΠΎ ΡΡΠ΅ΡΠ°)
self.sky_tex = loader.loadTexture("./tex/stars_1k_tex.jpg") # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ΅ΠΊΡΡΡΡΡ
self.sky.setTexture(self.sky_tex, 1) # Π·Π°ΡΠ΅Π½Π΄Π΅ΡΠΈΠΌ ΡΠ΅ΠΊΡΡΡΡΡ Π½Π° Π½Π΅Π±ΠΎ
self.sky.reparentTo(render) # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π½Π΅Π±ΠΎ
self.sky.setScale(40000) # ΡΠ°ΡΡΠΈΡΠΈΠΌ Π½Π΅Π±ΠΎ Π΄ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ panda3d
self.environ = loader.loadModel("models/world/falcon.egg") # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π² blender ΠΌΠΈΡ.
self.environ.reparentTo(render) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΌΠΈΡΠ° Π² ΠΎΠΊΠ½ΠΎ
droidStartPos = (-1, 0, 1.5 ) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΡΡΠ°ΡΡΠΎΠ²ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π² ΠΌΠΈΡΠ΅.
enemyStartPos = (-6, 1, 0.5) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ°-Π΄ΡΠΎΠΈΠ΄Π°.
self.droid = Actor("models/player/seeker.egg") # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° (ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π² blender)
self.enemy = Actor("models/enemies/r2d2/r2d2.egg") # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° (ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π² blender)
self.droid.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π² Π½Π°Ρ ΠΌΠΈΡ.
self.enemy.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π² Π½Π°Ρ ΠΌΠΈΡ.
self.droid.setScale(1) # ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° 1
self.enemy.setScale(1) # ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π½Π° 1
self.droid.setPos(droidStartPos) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ΡΡ Π½Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ
self.enemy.setPos(enemyStartPos) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π½Π° ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ΡΡ Π½Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ
self.weapon = Actor('models/weapon/lightsaber.egg') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.bullet = Actor('models/weapon/bullet/bullet.egg.pz') # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΠΏΡΠ»Ρ
self.flash = Actor('models/whishlyflash/handlamp.egg') # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.weapon.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ Π² Π½Π°Ρ ΠΌΠΈΡ
self.bullet.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΏΡΠ»Ρ Π² ΠΌΠΈΡ Π½ΠΎ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΎΠ½Π° ΡΠ°ΠΌΠ° Π½Π΅ ΡΠΊΠΎΡΠΎ
self.flash.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ Π² Π½Π°Ρ ΠΌΠΈΡ
self.weapon.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΡΠΊΠΈ
self.bullet.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΠ»ΠΈ
self.flash.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΎΠ½Π°ΡΠΈΠΊΠ°
# Π²ΡΠ°ΠΆΠ΅ΡΠΊΠΈΠΉ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter = Actor('models/fighter/fighter.egg')
self.fighter.reparentTo(render)
self.fighter.setPos(0, 90, 0)
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 1 # ΠΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΡΠΊΠΈ
self.weapon.setPos(self.weapon_pos) # ΠΠΎΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ ΡΡΡΡ Π²ΡΡΠ΅ ΠΈΠ³ΡΠΎΠΊΠ°
self.spotlight = camera.attachNewNode(Spotlight("spotlight")) # ΠΠΎΠ½ΡΠΈΠ³ΠΈ ΡΠΎΠ½Π°ΡΠΈΠΊΠ°
self.spotlight.node().setColor((.3, .3, .3, 1))
self.spotlight.node().setSpecularColor((0, 0, 0, 1))
self.floater = NodePath(PandaNode("floater"))
self.floater.reparentTo(self.droid)
self.floater.setZ(2.0)
self.accept("escape", sys.exit) # ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ Esc Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ.
self.accept("arrow_left", self.setKey, ["left", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π»Π΅Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ
self.accept("arrow_right", self.setKey, ["right", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΏΡΠ°Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²ΠΏΡΠ°Π²ΠΎ
self.accept("arrow_up", self.setKey, ["forward", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΏΠ΅ΡΡΠ΄ - ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("a", self.setKey, ["cam-left", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ a - ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΠΈ
self.accept("d", self.setKey, ["cam-right", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ s - ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΠΈ
self.accept("arrow_left-up", self.setKey, ["left", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+Π²Π»Π΅Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("arrow_right-up", self.setKey, ["right", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+ΠΏΡΠ°Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²ΠΏΡΠ°Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("arrow_up-up", self.setKey, ["forward", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+Π²Π²Π΅ΡΡ - ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("a-up", self.setKey, ["cam-left", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ a+Π²ΠΏΠ΅ΡΡΠ΄ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²Π»Π΅Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("d-up", self.setKey, ["cam-right", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ s+Π²ΠΏΠ΅ΡΡΠ΄ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΏΡΠ°Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("space", self.shot) # ΠΏΡΠΈ ΠΏΡΠΎΠ±Π΅Π»Π΅ ΡΡΡΠ΅Π»ΡΠ΅ΠΌ
self.accept("s", self.toggleLights, [[self.spotlight]]) # ΠΠΊΠ»ΡΡΠΈΡΡ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.accept("w", self.weapon_hide) # ΠΏΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ w - ΡΠ±Π΅ΡΡΠΌ ΠΎΡΡΠΆΠΈΠ΅.
base.enableParticles() # ΠΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΡΠΌΠ°
self.t = loader.loadModel("models/weapon/lightsaber.egg") # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ Π΅ΡΡ ΠΎΡΡΠΆΠΈΠ΅
self.t.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ Π² Π½Π°Ρ ΠΌΠΈΡ
self.p = ParticleEffect() # ΠΠΊΠ»ΡΡΠΈΠΌ ΡΡΡΠ΅ΠΊΡ Π΄ΡΠΌΠ°
self.accept('f', self.particle_start) # ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ f(ΠΎΡ force) - Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ°ΠΉΠ» Π΄ΡΠΌΠ° ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ Π² ΠΊΠΎΠ½ΡΠΈΠ³ ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠ° Π°Π½ΠΈΠΌΠ°ΡΠΈΡ ΡΡΠ°Π»Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΄ΡΠΌΠ°
self.accept('0', self.fountain) # ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ f+o(fountain) Π²ΠΊΠ»ΡΡΠΈΠΌ ΠΏΠΎΠΆΠ°ΡΠΎΡΡΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ
taskMgr.add(self.move, "moveTask") # ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π·Π°Π΄Π°ΡΡ Π² Π½Π°Ρ Π΄Π²ΠΈΠΆΠΎΠΊ
self.isMoving = False # Π‘ΡΠ°Π²ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ isMoving Π½Π° False(ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΌΠ΅Π½ΡΡΡ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅) ΡΡΠΎΠ±Ρ ΠΈΠ³ΡΠΎΠΊ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΡΠΎΡΠ».
# ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΡΠ²Π΅Ρ Π±ΡΠ» ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π²ΡΠΊΠ»ΡΡΠ΅Π½.
self.disableMouse() # ΠΡΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· ΠΌΡΡΠΊΡ
self.camera.setPos(self.droid.getX(), self.droid.getY() + 1, 3) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΡΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ³ΡΠΎΠΊΠ°
self.black_light() # Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π²ΡΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ²Π΅Ρ
self.state = 100 # Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠΎΡΠ°Π±Π»Ρ
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.hide_weapon = False # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΎΡΡΠΆΠΈΠ΅ Π½Π΅ ΡΠ±ΡΠ°Π½ΠΎ
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 5)
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 1)
self.motor_pos1 = 25.238849639892578, 8.962211608886719, 1.5 # ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΌΠΎΡΠΎΡΠ°
self.motor_pos2 = -20.676218032836914, 10.55816650390625, 1.5 # ΠΏΠΎΠ·ΠΈΡΠΈΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΡΠΎΡΠ°
self.motor1 = self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.motor_pos1) # ΠΌΠΎΡΠΎΡ 1
self.motor2 = self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.motor_pos2) # ΠΌΠΎΡΠΎΡ 2
self.state_info2 = OnscreenText(text='', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.force = False # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ Π½Π΅ ΡΠ°Π·Π³ΠΎΠ½ΡΠ»ΠΈΡΡ
# ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ
self.cTrav = CollisionTraverser()
pusher = CollisionHandlerPusher()
environCenter = self.environ.getBounds().getCenter()
environRad = self.environ.getBounds().getRadius()
cNode = CollisionNode("environment")
cNode.addSolid(CollisionInvSphere(environCenter, environRad))
environC = self.environ.attachNewNode(cNode)
droidCenter = self.droid.getBounds().getCenter()
droidRad = self.droid.getBounds().getRadius()
cNode = CollisionNode("droid")
cNode.addSolid(CollisionSphere(droidCenter, droidRad))
droidC = self.droid.attachNewNode(cNode)
pusher.addCollider(droidC, self.droid)
self.cTrav.addCollider(droidC, pusher)
enemyCenter = self.enemy.getBounds().getCenter()
enemyRad = self.enemy.getBounds().getRadius()
cNode = CollisionNode("enemy")
cNode.addSolid(CollisionSphere(enemyCenter, enemyRad))
enemyC = self.enemy.attachNewNode(cNode)
pusher.addCollider(enemyC, self.enemy)
self.cTrav.addCollider(enemyC, pusher)
fighterCenter = self.fighter.getBounds().getCenter()
fighterRad = self.fighter.getBounds().getRadius()
cNode = CollisionNode("fighter")
cNode.addSolid(CollisionSphere(fighterCenter, fighterRad))
fighterC = self.fighter.attachNewNode(cNode)
pusher.addCollider(fighterC, self.fighter)
self.cTrav.addCollider(fighterC, pusher)
# ΡΠΎΠ»Π½ΡΠ΅(Π½ΠΎΠ²Π°Ρ ΠΌΠ΅Ρ
Π°Π½ΠΈΠΊΠ° ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΡ)
sun = DirectionalLight("sun")
sun.set_color_temperature(6000)
sun.color = sun.color * 4
sun_path = render.attach_new_node(sun)
sun_path.set_pos(10, -10, -10)
sun_path.look_at(0, 0, 0)
sun_path.hprInterval(self.sun_interval, (sun_path.get_h(), sun_path.get_p() - 360, sun_path.get_r()), bakeInStart=True).loop()
render.set_light(sun_path)
def loadParticleConfig(self, filename, pos):
self.p.cleanup()
self.p = ParticleEffect()
self.p.loadConfig(Filename(filename))
self.p.start(self.t)
self.p.setPos(pos)
def particle_start(self):
self.force = True # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΌΡ ΡΠΆΠ΅ ΡΠ°Π·Π³ΠΎΠ½ΡΠ»ΠΈΡΡ
# ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.environ.setY(self.environ.getY() + self.speed) # Π½Π΅ΡΡΠΌΡΡ Π²ΠΏΡΠ°Π²ΠΎ
self.droid.setY(self.droid.getY() + self.speed) # ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ Π΄ΡΠΎΠΈΠ΄Π° Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.enemy.setY(self.enemy.getY() + self.speed) # ΡΠ΄ΡΠΈΠ³Π°Π΅ΠΌ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.weapon.setY(self.weapon.getY() + self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.flash.setY(self.flash.getY() + self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.state -= 1 # ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΠΌΠ΅Π½ΡΡΠ΅ ΠΎΡΠΊΠΎΠ²
self.state_info.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΎΡΠΊΠΈ
camvec = self.droid.getPos() - self.camera.getPos()
camvec.setZ(0)
camdist = camvec.length()
camvec.normalize()
if camdist > 10.0:
self.camera.setPos(self.camera.getPos() + camvec * (camdist - 10))
camdist = 10.0
if camdist < 5.0:
self.camera.setPos(self.camera.getPos() - camvec * (5 - camdist))
camdist = 5.0
self.camera.lookAt(self.floater)
if self.state != 10 and self.state > 10:
self.state_info.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΠΆΠΈΠ·Π½ΡΡ
ΠΊΠΎΡΠ°Π±Π»Ρ
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam/steam.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ Π½Π΅ΠΈΡΠΏΡΠ°Π²Π΅Π½', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
else:
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam_critic/steam.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
if self.state < 10:
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='ΠΏΠ°Π΄Π°Π΅ΠΌ!', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
def fountain(self):
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΡΠ΅ΠΊΡΡ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ
if self.force:
if self.state != 100:
self.state += 1
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5) + 500, random.randrange(0, 1)
self.loadParticleConfig('special_effects/fountain/fountain.ptf', self.fountain_pos)
else :
if self.state != 100:
self.state += 1
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 1)
self.loadParticleConfig('special_effects/fountain/fountain.ptf', self.fountain_pos)
def black_light(self):
# ΠΡΠΊΠ»ΡΡΠ΅Π½ΡΠΉ ΡΠ²Π΅Ρ
ambientLight = AmbientLight("ambientLight")
ambientLight.setColor((0, 0, 0, 1))
directionalLight = DirectionalLight("directionalLight")
directionalLight.setDirection((-5, -5, -5))
directionalLight.setColor((1, 1, 1, 1))
directionalLight.setSpecularColor((1, 1, 1, 1))
render.setLight(render.attachNewNode(ambientLight))
render.setLight(render.attachNewNode(directionalLight))
def weapon_hide(self):
# Π£Π±ΡΠ°ΡΡ ΠΎΡΡΠΆΠΈΠ΅
self.hide_weapon = True
self.weapon.hide()
def toggleLights(self, lights):
# Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΠ΅
if self.hide_weapon:
for light in lights:
if render.hasLight(light):
render.clearLight(light)
else:
render.setLight(light)
self.flash.setPos(self.weapon_pos)
else:
return
def shot(self):
dt = globalClock.getDt() + 0.5 # CΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
if not self.hide_weapon : # Π΅ΡΠ»ΠΈ ΠΎΡΡΠΆΠΈΠ΅ ΡΠ±ΡΠ°Π½ΠΎ ΡΠΎ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΡΠ΅Π»ΡΡΡ
self.shotSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π²ΡΡΡΡΠ΅Π»Π°
self.bullet.setPos(self.weapon_pos) # ΠΡΠ»Ρ Π±ΡΠ΄Π΅Ρ ΡΠΏΠ°Π²Π½ΠΈΡΡΡ Π²Π½ΡΡΡΠΈ ΠΏΡΡΠΊΠΈ
self.bullet.setY(self.bullet, -11 * dt) # Π‘Π΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΏΡΠ»Ρ Π½Π° ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ Π²ΠΏΠ΅ΡΡΠ΄
def check_loss(self):
if self.state == 0: # Π΅ΡΠ»ΠΈ ΠΆΠΈΠ·Π½Π΅ΠΉ Ρ ΠΊΠΎΡΠ°Π±Π»Ρ Π½Π΅ ΠΎΡΡΠ°Π»ΠΎΡΡ
self.black_light() # Π²ΠΊΠ»ΡΡΠΈΠΌ ΡΡΡΠ½ΡΠΉ ΡΠ²Π΅Ρ
self.weapon_hide() # ΡΠ±Π΅ΡΡΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.info = OnscreenText(text='ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅', style=1, font=self.font,
fg=(1,1,1,1),
pos=(-1.3, -0.5), align=TextNode.ALeft, scale=0.3) # Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΎ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠΈ
self.crackSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π²Π·ΡΡΠ²Π°
def setKey(self, key, value):
self.keyMap[key] = value # ΠΠ΅Π»Π°Π΅ΠΌ ΠΌΠ΅Ρ
aΠ½uΠ·ΠΌ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ.
def move(self, task):
''' ΠΠ΅Π»Π°Π΅ΠΌ ΡΡΡΠ½ΠΊΡΠΈΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° '''
dt = globalClock.getDt() - .005 # CΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
# ΠΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π²Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΡΠ°Π²ΠΎ
if self.keyMap["cam-left"]:
self.camera.setX(self.camera, -20 * dt) # ΠΠ΅Π½ΡΠ΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΊΠ° ΠΊΠ°ΠΌΠ΅ΡΡ ΠΏΠΎ ΠΈΠΊΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈΠ»ΡΠ·ΠΈΡ ΠΏΠΎΠ²ΠΎΡΠΎΡΠ° ΡΠ³Π»Π° Π»ΡΡΠ°. ΠΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΊΠ°ΠΌΠ΅ΡΠ° ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ.
if self.keyMap["cam-right"]:
self.camera.setX(self.camera, +20 * dt) # Π’ΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ Π½Π°Π²Π΅ΡΡ
Ρ.
startpos = self.droid.getPos() # Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ΄ΠΎΠ±Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ³ΡΠΎΠΊΠ°
if self.keyMap["left"]:
self.droid.setH(self.droid.getH() + 300 * dt)
self.enemy.setY(self.enemy, 1 * dt)
if self.keyMap["right"]:
self.droid.setH(self.droid.getH() - 300 * dt)
self.enemy.setY(self.enemy, -1 * dt)
if self.keyMap["forward"]:
self.droid.setY(self.droid, -25 * dt)
self.enemy.setX(self.enemy, 1 * dt)
# Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ±ΡΠ°Π½ΠΎ ΠΎΡΡΠΆΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ
if not self.hide_weapon:
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 3
self.weapon.setPos(self.weapon_pos) # ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΡΠΊΠΈ
else:
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 3
self.flash.setPos(self.weapon_pos)
camvec = self.droid.getPos() - self.camera.getPos() # Π²Π΅ΠΊΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ
camvec.setZ(0) # 0 Π²ΡΡΠΎΡΠ° Π²Π΅ΠΊΡΠΎΡΠ°
camdist = camvec.length() # Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΎΡ Π΄ΡΠΎΠΈΠ΄Π°
camvec.normalize() # Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π²Π΅ΠΊΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ
if camdist > 10.0: # Π΅ΡΠ»ΠΈ Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅ 10, ΡΠΎ ΡΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π·Π° Π΄ΡΠΎΠΎΠΈΠ΄ΠΎΠΌ
self.camera.setPos(self.camera.getPos() + camvec * (camdist - 10))
camdist = 10.0 # ΡΠ΅ΠΏΠ΅ΡΡ Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠ½ΠΎΠ²Π° 10
if camdist < 5.0: # Π΅ΡΠ»ΠΈ Π΄ΠΈΡΡΠ°Π³ΡΡΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΌΠ΅Π½ΡΡΠ΅ 5, ΡΠΎ...
self.camera.setPos(self.camera.getPos() - camvec * (5 - camdist)) # ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ
camdist = 5.0 # Π²ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ
self.camera.lookAt(self.floater) # Π²ΠΎΡ ΠΈ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΠ»ΡΡ Π½Π°Ρ floater
return task.cont # Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π·Π°Π΄Π°ΡΡ
def addInstructions(self, pos, msg):
return OnscreenText(text=msg, style=1, fg=(1,1,1,1), font=self.inst_font, pos=(-1.3, pos), align=TextNode.ALeft, scale = .04, shadow=(0,0,0,1)) # Π€ΡΠ½ΠΊΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΏΡΠ°Π²Π»ΡΡΡ
def addTitle(self, text):
return OnscreenText(text=text, style=1, fg=(1, 1, 1, 1), scale=0.2,
parent=base.a2dBottomRight, align=TextNode.ARight,
pos=(-0.1, 0.09), shadow=(0, 0, 0, 1), font=self.font) # Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Ρ ΡΡΠΈΡΡΠΎΠΌ ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΠ΅ΠΉ
droid = DroidShooter() # Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ
droid.run() # 3Π°ΠΏΡΡΡΠΈΠΌ ΠΈΠ³ΡΡ
# ΡΠ°Π·ΡΠΎΠ±ΠΎΡΡΠΈΠΊΠΈ :
# ΠΠ»Π°Π²Π½ΡΠΉ Π°Π²ΡΠΎΡ : ma3rx
# ΠΠΎΠΌΠΎΡΠ½ΠΈΠΊ : panda3dmastercoder( ΠΏΡΠΈΡΠΎΠ΅Π΄Π΅Π½ΠΈΠ»ΡΡ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ 31 ΡΠ½Π²Π°ΡΡ, 12:??)
Screenshot :
3.0.2.1 update! Bug fix fight and add collision for bullet.
New code :
#!/usr/bin/env python
# -*- coding: utf_8 -*-
# Π‘ΠΎΠ·Π΄Π°Π½ΠΎ : 22 ΡΠΈΡΠ»ΠΎ, ΡΠ½Π²Π°ΡΡ, 2021 Π³ΠΎΠ΄
# ΠΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ
from direct.showbase.ShowBase import ShowBase
from panda3d.core import CollisionTraverser, CollisionNode
from panda3d.core import CollisionHandlerPusher, CollisionSphere, CollisionInvSphere
from panda3d.core import Filename, AmbientLight, DirectionalLight
from panda3d.core import PandaNode, NodePath, Camera, TextNode
from direct.particles.Particles import Particles
from direct.particles.ParticleEffect import ParticleEffect
from panda3d.core import PointLight, Spotlight
from panda3d.core import CollideMask
from panda3d.core import loadPrcFileData
from panda3d.core import *
from direct.gui.OnscreenText import OnscreenText
from direct.gui.OnscreenImage import OnscreenImage
from direct.gui.DirectButton import DirectButton
from direct.gui.DirectSlider import DirectSlider
from direct.actor.Actor import Actor
import random
import sys
import time
import os
import math
VERSION = '3.0.2.1'
settings = ['window-title Droid Game ' + VERSION,
'fullscreen 0']
loadPrcFileData('', settings[0]) # Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π½Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ (Π²ΠΎΠ·ΠΌΡΠΌ Π΅Π³ΠΎ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ settings)
loadPrcFileData('', settings[1]) # Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠΊΡΠ°Π½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ
# Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π³Π»Π°Π²Π½ΡΠΉ ΠΊΠ»Π°ΡΡ Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ
class DroidShooter(ShowBase):
def __init__(self):
ShowBase.__init__(self) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ Π²ΡΠ΅ ΡΠ΅Π»ΡΡ ΠΈΠ· direct
self.speed = 1800 # ΡΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ
self.menu() # Π·Π²ΠΏΡΡΠΊ ΠΌΠ΅Π½Ρ
def menu(self):
base.enableParticles() # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΡΡΠ΅ΠΊΡ Π΄ΡΠΌΠ°
self.win.setClearColor((0, 0, 0, 1)) # ΠΠ°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ ΡΡΡΠ½ΡΠΌ. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΡΡΠΎΠΌ ΠΈΠ³ΡΠΎΠ²ΠΎΠΌ Π΄Π²ΠΈΠΆΠΊΠ΅ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ Π·Π°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΡΠΌ.
self.font = loader.loadFont('./fonts/doom_font.ttf') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΡΠΈΡΡ ΠΈΠ· ΠΈΠ³ΡΡ doom
self.inst_font = loader.loadFont('./fonts/arial.ttf') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΡΠΈΡΡ arial
self.crackSound = loader.loadMusic('./sounds/crack.wav') # Π·Π²ΡΠΊ Π²Π·ΡΡΠ²Π° ΠΊΠΎΡΠ°Π±Π»Ρ
self.shotSound = loader.loadMusic('./sounds/shot.wav') # Π·Π²ΡΠΊ Π²ΡΡΡΡΠ΅Π»Π°
self.startSound = loader.loadMusic('./sounds/started.wav') # Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ°
self.errorSound = loader.loadMusic('./sounds/error.wav') # Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ°
self.errorSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.startSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.crackSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.shotSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.startSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ
self.button_start = DirectButton(pos=(0.7, 0, 0), text="CTAPT",
scale=.3, pad=(.2, .2),
command=self.load_game) # ΠΊΠ½ΠΎΠΏΠΊΠ° Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ
self.slider_sun = DirectSlider(pos=(0.1, 0, .75), scale=0.8, value=0,
command=self.set_sun_interval)
self.title = self.addTitle("Droid game " + VERSION)
# ΠΠ°ΠΏΠ΅ΡΠ°ΡΠ°Π΅ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅
self.inst1 = self.addInstructions(0.95, u"[ESC]: ΠΡΡ
ΠΎΠ΄")
self.inst2 = self.addInstructions(0.90, u"[Left Arrow]: ΠΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² Π»Π΅Π²ΠΎ")
self.inst3 = self.addInstructions(0.85, u"[Right Arrow]: ΠΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² ΠΏΡΠ°Π²ΠΎ")
self.inst4 = self.addInstructions(0.80, u"[Up Arrow]: ΠΠΏΠ΅ΡΠ΅Π΄")
self.inst5 = self.addInstructions(0.75, u"[a]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΎ")
self.inst6 = self.addInstructions(0.70, u"[d]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² Π»Π΅Π²ΠΎ")
self.inst7 = self.addInstructions(0.65, u"[Left Arrow + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst8 = self.addInstructions(0.60, u"[Right Arrow + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² ΠΏΡΠ°Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst9 = self.addInstructions(0.55, u"[a + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst10 = self.addInstructions(0.50, u"[d + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst11 = self.addInstructions(0.45, u"[space]: ΡΡΡΠ΅Π»ΡΠ±Π°")
self.inst12 = self.addInstructions(0.40, u"[s]: Π΄ΠΎΡΡΠ°ΡΡ ΡΠΎΠ½Π°ΡΠΈΠΊ")
self.inst13 = self.addInstructions(0.35, u"[w]: ΡΠ±ΡΠ°ΡΡ ΠΎΡΡΠΆΠΈΠ΅")
self.inst14 = self.addInstructions(0.30, u"[f]: ΠΏΠΎΠ»Π½ΡΠΉ ΡΠ°Π·Π³ΠΎΠ½(ΠΠΠΠ‘ΠΠ!)")
self.inst15 = self.addInstructions(0.25, u"[0]: ΠΏΠΎΠΆΠ°ΡΠΎΡΡΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°")
self.accept("escape", sys.exit) # ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ Esc Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ.
def set_sun_interval(self):
self.sun_interval = self.slider_sun.guiItem.getValue() * 100 # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ»Π°ΠΉΠ΄Π΅ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΎΠ΅ Π½Π° 500, Π΄Π° ΡΡΠ°ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½ΠΎ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΏΠ»Π΅Π²Π°ΡΡ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅Π½Ρ, ΠΈΠ±ΠΎ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ½ΡΡΠΈΡ ΠΏΡΠΎΡΡΠΎ Π½Π΅ΡΡ :)
def load_game(self):
self.button_start.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ ΡΡΠ°ΡΡΠ°
self.title.hide() # ΡΠ΄Π°Π»ΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠ³ΡΡ
# ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
self.inst1.hide()
self.inst2.hide()
self.inst3.hide()
self.inst4.hide()
self.inst5.hide()
self.inst6.hide()
self.inst7.hide()
self.inst8.hide()
self.inst9.hide()
self.inst10.hide()
self.inst11.hide()
self.inst12.hide()
self.inst13.hide()
self.inst14.hide()
self.inst15.hide()
self.slider_sun.hide() # ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΡΠ»Π°ΠΉΠ΄Π΅Ρ ΡΠΎΠ»Π½ΡΠ°
self.keyMap = {
"left": 0, "right": 0, "forward": 0, "cam-left": 0, "cam-right": 0} # Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ»ΠΎΠ²Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΏΠΎ ΠΈΡ
Π½Π°ΠΆΠ°ΡΠΈΡ
# Π ΠΈΡΡΠ΅ΠΌ Π·Π²ΡΠ·Π΄Ρ
self.sky = loader.loadModel("./models/sky/solar_sky_sphere") # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠΎΡΠΌΠΎΡΠ°(ΡΡΠΎ ΡΡΠ΅ΡΠ°)
self.sky_tex = loader.loadTexture("./tex/stars_1k_tex.jpg") # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ΅ΠΊΡΡΡΡΡ
self.sky.setTexture(self.sky_tex, 1) # Π·Π°ΡΠ΅Π½Π΄Π΅ΡΠΈΠΌ ΡΠ΅ΠΊΡΡΡΡΡ Π½Π° Π½Π΅Π±ΠΎ
self.sky.reparentTo(render) # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π½Π΅Π±ΠΎ
self.sky.setScale(40000) # ΡΠ°ΡΡΠΈΡΠΈΠΌ Π½Π΅Π±ΠΎ Π΄ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ panda3d
self.environ = loader.loadModel("models/world/falcon.egg") # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π² blender ΠΌΠΈΡ.
self.environ.reparentTo(render) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΌΠΈΡΠ° Π² ΠΎΠΊΠ½ΠΎ
droidStartPos = (-1, 0, 1.5 ) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΡΡΠ°ΡΡΠΎΠ²ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π² ΠΌΠΈΡΠ΅.
enemyStartPos = (-6, 1, 0.5) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ°-Π΄ΡΠΎΠΈΠ΄Π°.
self.droid = Actor("models/player/seeker.egg") # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° (ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π² blender)
self.enemy = Actor("models/enemies/r2d2/r2d2.egg") # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° (ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π² blender)
self.droid.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π² Π½Π°Ρ ΠΌΠΈΡ.
self.enemy.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π² Π½Π°Ρ ΠΌΠΈΡ.
self.droid.setScale(1) # ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° 1
self.enemy.setScale(1) # ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π½Π° 1
self.droid.setPos(droidStartPos) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ΡΡ Π½Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ
self.enemy.setPos(enemyStartPos) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π½Π° ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ΡΡ Π½Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ
self.weapon = Actor('models/weapon/lightsaber.egg') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.bullet = Actor('models/weapon/bullet/bullet.egg.pz') # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΠΏΡΠ»Ρ
self.flash = Actor('models/whishlyflash/handlamp.egg') # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.weapon.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ Π² Π½Π°Ρ ΠΌΠΈΡ
self.bullet.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΏΡΠ»Ρ Π² ΠΌΠΈΡ Π½ΠΎ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΎΠ½Π° ΡΠ°ΠΌΠ° Π½Π΅ ΡΠΊΠΎΡΠΎ
self.flash.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ Π² Π½Π°Ρ ΠΌΠΈΡ
self.weapon.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΡΠΊΠΈ
self.bullet.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΠ»ΠΈ
self.flash.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΎΠ½Π°ΡΠΈΠΊΠ°
# Π²ΡΠ°ΠΆΠ΅ΡΠΊΠΈΠΉ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter = Actor('models/fighter/fighter.egg') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΡ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter.reparentTo(render) # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΈΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter.setPos(0, 90, 0) # ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 1 # ΠΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΡΠΊΠΈ
self.weapon.setPos(self.weapon_pos) # ΠΠΎΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ ΡΡΡΡ Π²ΡΡΠ΅ ΠΈΠ³ΡΠΎΠΊΠ°
self.spotlight = camera.attachNewNode(Spotlight("spotlight")) # ΠΠΎΠ½ΡΠΈΠ³ΠΈ ΡΠΎΠ½Π°ΡΠΈΠΊΠ°
self.spotlight.node().setColor((.3, .3, .3, 1))
self.spotlight.node().setSpecularColor((0, 0, 0, 1))
self.floater = NodePath(PandaNode("floater"))
self.floater.reparentTo(self.droid)
self.floater.setZ(2.0)
self.accept("escape", sys.exit) # ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ Esc Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ.
self.accept("arrow_left", self.setKey, ["left", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π»Π΅Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ
self.accept("arrow_right", self.setKey, ["right", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΏΡΠ°Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²ΠΏΡΠ°Π²ΠΎ
self.accept("arrow_up", self.setKey, ["forward", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΏΠ΅ΡΡΠ΄ - ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("a", self.setKey, ["cam-left", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ a - ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΠΈ
self.accept("d", self.setKey, ["cam-right", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ s - ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΠΈ
self.accept("arrow_left-up", self.setKey, ["left", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+Π²Π»Π΅Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("arrow_right-up", self.setKey, ["right", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+ΠΏΡΠ°Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²ΠΏΡΠ°Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("arrow_up-up", self.setKey, ["forward", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+Π²Π²Π΅ΡΡ - ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("a-up", self.setKey, ["cam-left", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ a+Π²ΠΏΠ΅ΡΡΠ΄ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²Π»Π΅Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("d-up", self.setKey, ["cam-right", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ s+Π²ΠΏΠ΅ΡΡΠ΄ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΏΡΠ°Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("space", self.shot) # ΠΏΡΠΈ ΠΏΡΠΎΠ±Π΅Π»Π΅ ΡΡΡΠ΅Π»ΡΠ΅ΠΌ
self.accept("s", self.toggleLights, [[self.spotlight]]) # ΠΠΊΠ»ΡΡΠΈΡΡ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.accept("w", self.weapon_hide) # ΠΏΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ w - ΡΠ±Π΅ΡΡΠΌ ΠΎΡΡΠΆΠΈΠ΅.
base.enableParticles() # ΠΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΡΠΌΠ°
self.t = loader.loadModel("models/weapon/lightsaber.egg") # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ Π΅ΡΡ ΠΎΡΡΠΆΠΈΠ΅
self.t.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ Π² Π½Π°Ρ ΠΌΠΈΡ
self.p = ParticleEffect() # ΠΠΊΠ»ΡΡΠΈΠΌ ΡΡΡΠ΅ΠΊΡ Π΄ΡΠΌΠ°
self.accept('f', self.particle_start) # ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ f(ΠΎΡ force) - Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ°ΠΉΠ» Π΄ΡΠΌΠ° ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ Π² ΠΊΠΎΠ½ΡΠΈΠ³ ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠ° Π°Π½ΠΈΠΌΠ°ΡΠΈΡ ΡΡΠ°Π»Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΄ΡΠΌΠ°
self.accept('0', self.fountain) # ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ f+o(fountain) Π²ΠΊΠ»ΡΡΠΈΠΌ ΠΏΠΎΠΆΠ°ΡΠΎΡΡΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ
taskMgr.add(self.move, "moveTask") # ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π·Π°Π΄Π°ΡΡ Π² Π½Π°Ρ Π΄Π²ΠΈΠΆΠΎΠΊ
self.isMoving = False # Π‘ΡΠ°Π²ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ isMoving Π½Π° False(ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΌΠ΅Π½ΡΡΡ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅) ΡΡΠΎΠ±Ρ ΠΈΠ³ΡΠΎΠΊ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΡΠΎΡΠ».
# ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΡΠ²Π΅Ρ Π±ΡΠ» ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π²ΡΠΊΠ»ΡΡΠ΅Π½.
self.disableMouse() # ΠΡΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· ΠΌΡΡΠΊΡ
self.camera.setPos(self.droid.getX(), self.droid.getY() + 1, 3) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΡΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ³ΡΠΎΠΊΠ°
self.black_light() # Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π²ΡΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ²Π΅Ρ
self.state = 100 # Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠΎΡΠ°Π±Π»Ρ
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.hide_weapon = False # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΎΡΡΠΆΠΈΠ΅ Π½Π΅ ΡΠ±ΡΠ°Π½ΠΎ
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 5)
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 1)
self.motor_pos1 = 25.238849639892578, 8.962211608886719, 1.5 # ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΌΠΎΡΠΎΡΠ°
self.motor_pos2 = -20.676218032836914, 10.55816650390625, 1.5 # ΠΏΠΎΠ·ΠΈΡΠΈΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΡΠΎΡΠ°
self.motor1 = self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.motor_pos1) # ΠΌΠΎΡΠΎΡ 1
self.motor2 = self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.motor_pos2) # ΠΌΠΎΡΠΎΡ 2
self.state_info2 = OnscreenText(text='', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.force = False # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ Π½Π΅ ΡΠ°Π·Π³ΠΎΠ½ΡΠ»ΠΈΡΡ
# ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ
self.cTrav = CollisionTraverser()
pusher = CollisionHandlerPusher()
environCenter = self.environ.getBounds().getCenter()
environRad = self.environ.getBounds().getRadius()
cNode = CollisionNode("environment")
cNode.addSolid(CollisionInvSphere(environCenter, environRad))
environC = self.environ.attachNewNode(cNode)
droidCenter = self.droid.getBounds().getCenter()
droidRad = self.droid.getBounds().getRadius()
cNode = CollisionNode("droid")
cNode.addSolid(CollisionSphere(droidCenter, droidRad))
droidC = self.droid.attachNewNode(cNode)
pusher.addCollider(droidC, self.droid)
self.cTrav.addCollider(droidC, pusher)
enemyCenter = self.enemy.getBounds().getCenter()
enemyRad = self.enemy.getBounds().getRadius()
cNode = CollisionNode("enemy")
cNode.addSolid(CollisionSphere(enemyCenter, enemyRad))
enemyC = self.enemy.attachNewNode(cNode)
pusher.addCollider(enemyC, self.enemy)
self.cTrav.addCollider(enemyC, pusher)
fighterCenter = self.fighter.getBounds().getCenter()
fighterRad = self.fighter.getBounds().getRadius()
cNode = CollisionNode("fighter")
cNode.addSolid(CollisionSphere(fighterCenter, fighterRad))
fighterC = self.fighter.attachNewNode(cNode)
bulletCenter = self.bullet.getBounds().getCenter()
bulletRad = self.bullet.getBounds().getRadius()
cNode = CollisionNode("bullet")
cNode.addSolid(CollisionSphere(bulletCenter, bulletRad))
bulletC = self.bullet.attachNewNode(cNode)
pusher.addCollider(bulletC, self.bullet)
self.cTrav.addCollider(bulletC, pusher)
# ΡΠΎΠ»Π½ΡΠ΅(Π½ΠΎΠ²Π°Ρ ΠΌΠ΅Ρ
Π°Π½ΠΈΠΊΠ° ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΡ)
sun = DirectionalLight("sun")
sun.set_color_temperature(6000)
sun.color = sun.color * 4
sun_path = render.attach_new_node(sun)
sun_path.set_pos(10, -10, -10)
sun_path.look_at(0, 0, 0)
sun_path.hprInterval(self.sun_interval, (sun_path.get_h(), sun_path.get_p() - 360, sun_path.get_r()), bakeInStart=True).loop()
render.set_light(sun_path)
def loadParticleConfig(self, filename, pos):
self.p.cleanup()
self.p = ParticleEffect()
self.p.loadConfig(Filename(filename))
self.p.start(self.t)
self.p.setPos(pos)
def particle_start(self):
self.force = True # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΌΡ ΡΠΆΠ΅ ΡΠ°Π·Π³ΠΎΠ½ΡΠ»ΠΈΡΡ
# ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.environ.setY(self.environ.getY() - self.speed) # Π½Π΅ΡΡΠΌΡΡ Π²ΠΏΡΠ°Π²ΠΎ
self.droid.setY(self.droid.getY() - self.speed) # ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ Π΄ΡΠΎΠΈΠ΄Π° Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.enemy.setY(self.enemy.getY() - self.speed) # ΡΠ΄ΡΠΈΠ³Π°Π΅ΠΌ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.weapon.setY(self.weapon.getY() - self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.flash.setY(self.flash.getY() - self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.fighter.setY(self.fighter.getY() - self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.state -= 1 # ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΠΌΠ΅Π½ΡΡΠ΅ ΠΎΡΠΊΠΎΠ²
self.state_info.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΎΡΠΊΠΈ
camvec = self.droid.getPos() - self.camera.getPos()
camvec.setZ(0)
camdist = camvec.length()
camvec.normalize()
if camdist > 10.0:
self.camera.setPos(self.camera.getPos() + camvec * (camdist - 10))
camdist = 10.0
if camdist < 5.0:
self.camera.setPos(self.camera.getPos() - camvec * (5 - camdist))
camdist = 5.0
self.camera.lookAt(self.floater)
if self.state != 10 and self.state > 10:
self.state_info.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΠΆΠΈΠ·Π½ΡΡ
ΠΊΠΎΡΠ°Π±Π»Ρ
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam/steam.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ Π½Π΅ΠΈΡΠΏΡΠ°Π²Π΅Π½', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
else:
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam_critic/steam.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
if self.state < 10:
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='ΠΏΠ°Π΄Π°Π΅ΠΌ!', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
def fountain(self):
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΡΠ΅ΠΊΡΡ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ
if self.force:
if self.state != 100:
self.state += 1
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5) + 500, random.randrange(0, 1)
self.loadParticleConfig('special_effects/fountain/fountain.ptf', self.fountain_pos)
else :
if self.state != 100:
self.state += 1
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 1)
self.loadParticleConfig('special_effects/fountain/fountain.ptf', self.fountain_pos)
def black_light(self):
# ΠΡΠΊΠ»ΡΡΠ΅Π½ΡΠΉ ΡΠ²Π΅Ρ
ambientLight = AmbientLight("ambientLight")
ambientLight.setColor((0, 0, 0, 1))
directionalLight = DirectionalLight("directionalLight")
directionalLight.setDirection((-5, -5, -5))
directionalLight.setColor((1, 1, 1, 1))
directionalLight.setSpecularColor((1, 1, 1, 1))
render.setLight(render.attachNewNode(ambientLight))
render.setLight(render.attachNewNode(directionalLight))
def weapon_hide(self):
# Π£Π±ΡΠ°ΡΡ ΠΎΡΡΠΆΠΈΠ΅
self.hide_weapon = True
self.weapon.hide()
def toggleLights(self, lights):
# Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΠ΅
if self.hide_weapon:
for light in lights:
if render.hasLight(light):
render.clearLight(light)
else:
render.setLight(light)
self.flash.setPos(self.weapon_pos)
else:
return
def shot(self):
dt = globalClock.getDt() + 0.5 # CΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
if not self.hide_weapon : # Π΅ΡΠ»ΠΈ ΠΎΡΡΠΆΠΈΠ΅ ΡΠ±ΡΠ°Π½ΠΎ ΡΠΎ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΡΠ΅Π»ΡΡΡ
self.shotSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π²ΡΡΡΡΠ΅Π»Π°
self.bullet.setPos(self.weapon_pos) # ΠΡΠ»Ρ Π±ΡΠ΄Π΅Ρ ΡΠΏΠ°Π²Π½ΠΈΡΡΡ Π²Π½ΡΡΡΠΈ ΠΏΡΡΠΊΠΈ
self.bullet.setY(self.bullet, -11 * dt) # Π‘Π΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΏΡΠ»Ρ Π½Π° ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ Π²ΠΏΠ΅ΡΡΠ΄
def check_loss(self):
if self.state == 0: # Π΅ΡΠ»ΠΈ ΠΆΠΈΠ·Π½Π΅ΠΉ Ρ ΠΊΠΎΡΠ°Π±Π»Ρ Π½Π΅ ΠΎΡΡΠ°Π»ΠΎΡΡ
self.black_light() # Π²ΠΊΠ»ΡΡΠΈΠΌ ΡΡΡΠ½ΡΠΉ ΡΠ²Π΅Ρ
self.weapon_hide() # ΡΠ±Π΅ΡΡΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.info = OnscreenText(text='ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅', style=1, font=self.font,
fg=(1,1,1,1),
pos=(-1.3, -0.5), align=TextNode.ALeft, scale=0.3) # Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΎ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠΈ
self.crackSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π²Π·ΡΡΠ²Π°
def setKey(self, key, value):
self.keyMap[key] = value # ΠΠ΅Π»Π°Π΅ΠΌ ΠΌΠ΅Ρ
aΠ½uΠ·ΠΌ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ.
def move(self, task):
''' ΠΠ΅Π»Π°Π΅ΠΌ ΡΡΡΠ½ΠΊΡΠΈΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° '''
dt = globalClock.getDt() - .005 # CΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
# ΠΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π²Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΡΠ°Π²ΠΎ
if self.keyMap["cam-left"]:
self.camera.setX(self.camera, -20 * dt) # ΠΠ΅Π½ΡΠ΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΊΠ° ΠΊΠ°ΠΌΠ΅ΡΡ ΠΏΠΎ ΠΈΠΊΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈΠ»ΡΠ·ΠΈΡ ΠΏΠΎΠ²ΠΎΡΠΎΡΠ° ΡΠ³Π»Π° Π»ΡΡΠ°. ΠΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΊΠ°ΠΌΠ΅ΡΠ° ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ.
if self.keyMap["cam-right"]:
self.camera.setX(self.camera, +20 * dt) # Π’ΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ Π½Π°Π²Π΅ΡΡ
Ρ.
startpos = self.droid.getPos() # Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ΄ΠΎΠ±Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ³ΡΠΎΠΊΠ°
if self.keyMap["left"]:
self.droid.setH(self.droid.getH() + 300 * dt)
self.enemy.setY(self.enemy, 1 * dt)
if self.keyMap["right"]:
self.droid.setH(self.droid.getH() - 300 * dt)
self.enemy.setY(self.enemy, -1 * dt)
if self.keyMap["forward"]:
self.droid.setY(self.droid, -25 * dt)
self.enemy.setX(self.enemy, 1 * dt)
# Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ±ΡΠ°Π½ΠΎ ΠΎΡΡΠΆΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ
if not self.hide_weapon:
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 3
self.weapon.setPos(self.weapon_pos) # ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΡΠΊΠΈ
else:
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 3
self.flash.setPos(self.weapon_pos)
camvec = self.droid.getPos() - self.camera.getPos() # Π²Π΅ΠΊΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ
camvec.setZ(0) # 0 Π²ΡΡΠΎΡΠ° Π²Π΅ΠΊΡΠΎΡΠ°
camdist = camvec.length() # Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΎΡ Π΄ΡΠΎΠΈΠ΄Π°
camvec.normalize() # Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π²Π΅ΠΊΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ
if camdist > 10.0: # Π΅ΡΠ»ΠΈ Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅ 10, ΡΠΎ ΡΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π·Π° Π΄ΡΠΎΠΎΠΈΠ΄ΠΎΠΌ
self.camera.setPos(self.camera.getPos() + camvec * (camdist - 10))
camdist = 10.0 # ΡΠ΅ΠΏΠ΅ΡΡ Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠ½ΠΎΠ²Π° 10
if camdist < 5.0: # Π΅ΡΠ»ΠΈ Π΄ΠΈΡΡΠ°Π³ΡΡΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΌΠ΅Π½ΡΡΠ΅ 5, ΡΠΎ...
self.camera.setPos(self.camera.getPos() - camvec * (5 - camdist)) # ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ
camdist = 5.0 # Π²ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ
self.camera.lookAt(self.floater) # Π²ΠΎΡ ΠΈ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΠ»ΡΡ Π½Π°Ρ floater
return task.cont # Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π·Π°Π΄Π°ΡΡ
def addInstructions(self, pos, msg):
return OnscreenText(text=msg, style=1, fg=(1,1,1,1), font=self.inst_font, pos=(-1.3, pos), align=TextNode.ALeft, scale = .04, shadow=(0,0,0,1)) # Π€ΡΠ½ΠΊΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΏΡΠ°Π²Π»ΡΡΡ
def addTitle(self, text):
return OnscreenText(text=text, style=1, fg=(1, 1, 1, 1), scale=0.2,
parent=base.a2dBottomRight, align=TextNode.ARight,
pos=(-0.1, 0.09), shadow=(0, 0, 0, 1), font=self.font) # Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Ρ ΡΡΠΈΡΡΠΎΠΌ ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΠ΅ΠΉ
droid = DroidShooter() # Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ
droid.run() # 3Π°ΠΏΡΡΡΠΈΠΌ ΠΈΠ³ΡΡ
# ΡΠ°Π·ΡΠΎΠ±ΠΎΡΡΠΈΠΊΠΈ :
# ΠΠ»Π°Π²Π½ΡΠΉ Π°Π²ΡΠΎΡ : ma3rx
# ΠΠΎΠΌΠΎΡΠ½ΠΈΠΊ : panda3dmastercoder( ΠΏΡΠΈΡΠΎΠ΅Π΄Π΅Π½ΠΈΠ»ΡΡ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ 31 ΡΠ½Π²Π°ΡΡ, 12:??)
3.0.3 update! Fighter - new intelect!!
New code :
#!/usr/bin/env python
# -*- coding: utf_8 -*-
# Π‘ΠΎΠ·Π΄Π°Π½ΠΎ : 22 ΡΠΈΡΠ»ΠΎ, ΡΠ½Π²Π°ΡΡ, 2021 Π³ΠΎΠ΄
# ΠΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ
from direct.showbase.ShowBase import ShowBase
from panda3d.core import CollisionTraverser, CollisionNode
from panda3d.core import CollisionHandlerPusher, CollisionSphere, CollisionInvSphere
from panda3d.core import Filename, AmbientLight, DirectionalLight
from panda3d.core import PandaNode, NodePath, Camera, TextNode
from direct.particles.Particles import Particles
from direct.particles.ParticleEffect import ParticleEffect
from panda3d.core import PointLight, Spotlight
from panda3d.core import CollideMask
from panda3d.core import loadPrcFileData
from panda3d.core import *
from direct.gui.OnscreenText import OnscreenText
from direct.gui.OnscreenImage import OnscreenImage
from direct.gui.DirectButton import DirectButton
from direct.gui.DirectSlider import DirectSlider
from direct.actor.Actor import Actor
import random
import sys
import time
import os
import math
VERSION = '3.0.3'
settings = ['window-title Droid Game ' + VERSION,
'fullscreen 0']
loadPrcFileData('', settings[0]) # Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π½Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ (Π²ΠΎΠ·ΠΌΡΠΌ Π΅Π³ΠΎ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ settings)
loadPrcFileData('', settings[1]) # Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠΊΡΠ°Π½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ
# Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π³Π»Π°Π²Π½ΡΠΉ ΠΊΠ»Π°ΡΡ Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ
class DroidShooter(ShowBase):
def __init__(self):
ShowBase.__init__(self) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ Π²ΡΠ΅ ΡΠ΅Π»ΡΡ ΠΈΠ· direct
self.speed = 1800 # ΡΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ
self.menu() # Π·Π²ΠΏΡΡΠΊ ΠΌΠ΅Π½Ρ
def menu(self):
base.enableParticles() # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΡΡΠ΅ΠΊΡ Π΄ΡΠΌΠ°
self.win.setClearColor((0, 0, 0, 1)) # ΠΠ°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ ΡΡΡΠ½ΡΠΌ. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΡΡΠΎΠΌ ΠΈΠ³ΡΠΎΠ²ΠΎΠΌ Π΄Π²ΠΈΠΆΠΊΠ΅ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ Π·Π°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΡΠΌ.
self.font = loader.loadFont('./fonts/doom_font.ttf') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΡΠΈΡΡ ΠΈΠ· ΠΈΠ³ΡΡ doom
self.inst_font = loader.loadFont('./fonts/arial.ttf') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΡΠΈΡΡ arial
self.crackSound = loader.loadMusic('./sounds/crack.wav') # Π·Π²ΡΠΊ Π²Π·ΡΡΠ²Π° ΠΊΠΎΡΠ°Π±Π»Ρ
self.shotSound = loader.loadMusic('./sounds/shot.wav') # Π·Π²ΡΠΊ Π²ΡΡΡΡΠ΅Π»Π°
self.startSound = loader.loadMusic('./sounds/started.wav') # Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ°
self.errorSound = loader.loadMusic('./sounds/error.wav') # Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ°
self.errorSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.startSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.crackSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.shotSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.startSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ
self.button_start = DirectButton(pos=(0.7, 0, 0), text="CTAPT",
scale=.3, pad=(.2, .2),
command=self.load_game) # ΠΊΠ½ΠΎΠΏΠΊΠ° Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ
self.slider_sun = DirectSlider(pos=(0.1, 0, .75), scale=0.8, value=0,
command=self.set_sun_interval)
self.title = self.addTitle("Droid game " + VERSION)
# ΠΠ°ΠΏΠ΅ΡΠ°ΡΠ°Π΅ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅
self.inst1 = self.addInstructions(0.95, u"[ESC]: ΠΡΡ
ΠΎΠ΄")
self.inst2 = self.addInstructions(0.90, u"[Left Arrow]: ΠΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² Π»Π΅Π²ΠΎ")
self.inst3 = self.addInstructions(0.85, u"[Right Arrow]: ΠΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² ΠΏΡΠ°Π²ΠΎ")
self.inst4 = self.addInstructions(0.80, u"[Up Arrow]: ΠΠΏΠ΅ΡΠ΅Π΄")
self.inst5 = self.addInstructions(0.75, u"[a]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΎ")
self.inst6 = self.addInstructions(0.70, u"[d]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² Π»Π΅Π²ΠΎ")
self.inst7 = self.addInstructions(0.65, u"[Left Arrow + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst8 = self.addInstructions(0.60, u"[Right Arrow + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² ΠΏΡΠ°Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst9 = self.addInstructions(0.55, u"[a + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst10 = self.addInstructions(0.50, u"[d + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst11 = self.addInstructions(0.45, u"[space]: ΡΡΡΠ΅Π»ΡΠ±Π°")
self.inst12 = self.addInstructions(0.40, u"[s]: Π΄ΠΎΡΡΠ°ΡΡ ΡΠΎΠ½Π°ΡΠΈΠΊ")
self.inst13 = self.addInstructions(0.35, u"[w]: ΡΠ±ΡΠ°ΡΡ ΠΎΡΡΠΆΠΈΠ΅")
self.inst14 = self.addInstructions(0.30, u"[f]: ΠΏΠΎΠ»Π½ΡΠΉ ΡΠ°Π·Π³ΠΎΠ½(ΠΠΠΠ‘ΠΠ!)")
self.inst15 = self.addInstructions(0.25, u"[0]: ΠΏΠΎΠΆΠ°ΡΠΎΡΡΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°")
self.accept("escape", sys.exit) # ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ Esc Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ.
def set_sun_interval(self):
self.sun_interval = self.slider_sun.guiItem.getValue() * 100 # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ»Π°ΠΉΠ΄Π΅ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΎΠ΅ Π½Π° 500, Π΄Π° ΡΡΠ°ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½ΠΎ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΏΠ»Π΅Π²Π°ΡΡ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅Π½Ρ, ΠΈΠ±ΠΎ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ½ΡΡΠΈΡ ΠΏΡΠΎΡΡΠΎ Π½Π΅ΡΡ :)
def load_game(self):
self.button_start.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ ΡΡΠ°ΡΡΠ°
self.title.hide() # ΡΠ΄Π°Π»ΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠ³ΡΡ
# ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
self.inst1.hide()
self.inst2.hide()
self.inst3.hide()
self.inst4.hide()
self.inst5.hide()
self.inst6.hide()
self.inst7.hide()
self.inst8.hide()
self.inst9.hide()
self.inst10.hide()
self.inst11.hide()
self.inst12.hide()
self.inst13.hide()
self.inst14.hide()
self.inst15.hide()
self.slider_sun.hide() # ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΡΠ»Π°ΠΉΠ΄Π΅Ρ ΡΠΎΠ»Π½ΡΠ°
self.keyMap = {
"left": 0, "right": 0, "forward": 0, "cam-left": 0, "cam-right": 0} # Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ»ΠΎΠ²Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΏΠΎ ΠΈΡ
Π½Π°ΠΆΠ°ΡΠΈΡ
# Π ΠΈΡΡΠ΅ΠΌ Π·Π²ΡΠ·Π΄Ρ
self.sky = loader.loadModel("./models/sky/solar_sky_sphere") # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠΎΡΠΌΠΎΡΠ°(ΡΡΠΎ ΡΡΠ΅ΡΠ°)
self.sky_tex = loader.loadTexture("./tex/stars_1k_tex.jpg") # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ΅ΠΊΡΡΡΡΡ
self.sky.setTexture(self.sky_tex, 1) # Π·Π°ΡΠ΅Π½Π΄Π΅ΡΠΈΠΌ ΡΠ΅ΠΊΡΡΡΡΡ Π½Π° Π½Π΅Π±ΠΎ
self.sky.reparentTo(render) # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π½Π΅Π±ΠΎ
self.sky.setScale(40000) # ΡΠ°ΡΡΠΈΡΠΈΠΌ Π½Π΅Π±ΠΎ Π΄ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ panda3d
self.environ = loader.loadModel("models/world/falcon.egg") # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π² blender ΠΌΠΈΡ.
self.environ.reparentTo(render) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΌΠΈΡΠ° Π² ΠΎΠΊΠ½ΠΎ
droidStartPos = (-1, 0, 1.5 ) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΡΡΠ°ΡΡΠΎΠ²ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π² ΠΌΠΈΡΠ΅.
enemyStartPos = (-6, 1, 0.5) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ°-Π΄ΡΠΎΠΈΠ΄Π°.
self.droid = Actor("models/player/seeker.egg") # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° (ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π² blender)
self.enemy = Actor("models/enemies/r2d2/r2d2.egg") # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° (ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π² blender)
self.droid.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π² Π½Π°Ρ ΠΌΠΈΡ.
self.enemy.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π² Π½Π°Ρ ΠΌΠΈΡ.
self.droid.setScale(1) # ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° 1
self.enemy.setScale(1) # ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π½Π° 1
self.droid.setPos(droidStartPos) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ΡΡ Π½Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ
self.enemy.setPos(enemyStartPos) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π½Π° ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ΡΡ Π½Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ
self.weapon = Actor('models/weapon/lightsaber.egg') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.bullet = Actor('models/weapon/bullet/bullet.egg.pz') # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΠΏΡΠ»Ρ
self.flash = Actor('models/whishlyflash/handlamp.egg') # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.weapon.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ Π² Π½Π°Ρ ΠΌΠΈΡ
self.bullet.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΏΡΠ»Ρ Π² ΠΌΠΈΡ Π½ΠΎ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΎΠ½Π° ΡΠ°ΠΌΠ° Π½Π΅ ΡΠΊΠΎΡΠΎ
self.flash.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ Π² Π½Π°Ρ ΠΌΠΈΡ
self.weapon.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΡΠΊΠΈ
self.bullet.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΠ»ΠΈ
self.flash.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΎΠ½Π°ΡΠΈΠΊΠ°
# Π²ΡΠ°ΠΆΠ΅ΡΠΊΠΈΠΉ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter = Actor('models/fighter/fighter.egg') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΡ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter.reparentTo(render) # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΈΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter.setPos(0, 90, 0) # ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 1 # ΠΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΡΠΊΠΈ
self.weapon.setPos(self.weapon_pos) # ΠΠΎΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ ΡΡΡΡ Π²ΡΡΠ΅ ΠΈΠ³ΡΠΎΠΊΠ°
self.spotlight = camera.attachNewNode(Spotlight("spotlight")) # ΠΠΎΠ½ΡΠΈΠ³ΠΈ ΡΠΎΠ½Π°ΡΠΈΠΊΠ°
self.spotlight.node().setColor((.3, .3, .3, 1))
self.spotlight.node().setSpecularColor((0, 0, 0, 1))
self.floater = NodePath(PandaNode("floater"))
self.floater.reparentTo(self.droid)
self.floater.setZ(2.0)
self.accept("escape", sys.exit) # ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ Esc Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ.
self.accept("arrow_left", self.setKey, ["left", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π»Π΅Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ
self.accept("arrow_right", self.setKey, ["right", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΏΡΠ°Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²ΠΏΡΠ°Π²ΠΎ
self.accept("arrow_up", self.setKey, ["forward", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΏΠ΅ΡΡΠ΄ - ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("a", self.setKey, ["cam-left", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ a - ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΠΈ
self.accept("d", self.setKey, ["cam-right", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ s - ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΠΈ
self.accept("arrow_left-up", self.setKey, ["left", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+Π²Π»Π΅Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("arrow_right-up", self.setKey, ["right", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+ΠΏΡΠ°Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²ΠΏΡΠ°Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("arrow_up-up", self.setKey, ["forward", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+Π²Π²Π΅ΡΡ - ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("a-up", self.setKey, ["cam-left", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ a+Π²ΠΏΠ΅ΡΡΠ΄ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²Π»Π΅Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("d-up", self.setKey, ["cam-right", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ s+Π²ΠΏΠ΅ΡΡΠ΄ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΏΡΠ°Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("space", self.shot) # ΠΏΡΠΈ ΠΏΡΠΎΠ±Π΅Π»Π΅ ΡΡΡΠ΅Π»ΡΠ΅ΠΌ
self.accept("s", self.toggleLights, [[self.spotlight]]) # ΠΠΊΠ»ΡΡΠΈΡΡ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.accept("w", self.weapon_hide) # ΠΏΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ w - ΡΠ±Π΅ΡΡΠΌ ΠΎΡΡΠΆΠΈΠ΅.
base.enableParticles() # ΠΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΡΠΌΠ°
self.t = loader.loadModel("models/weapon/lightsaber.egg") # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ Π΅ΡΡ ΠΎΡΡΠΆΠΈΠ΅
self.t.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ Π² Π½Π°Ρ ΠΌΠΈΡ
self.p = ParticleEffect() # ΠΠΊΠ»ΡΡΠΈΠΌ ΡΡΡΠ΅ΠΊΡ Π΄ΡΠΌΠ°
self.accept('f', self.particle_start) # ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ f(ΠΎΡ force) - Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ°ΠΉΠ» Π΄ΡΠΌΠ° ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ Π² ΠΊΠΎΠ½ΡΠΈΠ³ ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠ° Π°Π½ΠΈΠΌΠ°ΡΠΈΡ ΡΡΠ°Π»Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΄ΡΠΌΠ°
self.accept('0', self.fountain) # ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ f+o(fountain) Π²ΠΊΠ»ΡΡΠΈΠΌ ΠΏΠΎΠΆΠ°ΡΠΎΡΡΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ
taskMgr.add(self.move, "moveTask") # ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π·Π°Π΄Π°ΡΡ Π² Π½Π°Ρ Π΄Π²ΠΈΠΆΠΎΠΊ
self.isMoving = False # Π‘ΡΠ°Π²ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ isMoving Π½Π° False(ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΌΠ΅Π½ΡΡΡ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅) ΡΡΠΎΠ±Ρ ΠΈΠ³ΡΠΎΠΊ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΡΠΎΡΠ».
# ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΡΠ²Π΅Ρ Π±ΡΠ» ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π²ΡΠΊΠ»ΡΡΠ΅Π½.
self.disableMouse() # ΠΡΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· ΠΌΡΡΠΊΡ
self.camera.setPos(self.droid.getX(), self.droid.getY() + 1, 3) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΡΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ³ΡΠΎΠΊΠ°
self.black_light() # Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π²ΡΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ²Π΅Ρ
self.state = 100 # Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠΎΡΠ°Π±Π»Ρ
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.hide_weapon = False # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΎΡΡΠΆΠΈΠ΅ Π½Π΅ ΡΠ±ΡΠ°Π½ΠΎ
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 5)
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 1)
self.motor_pos1 = 25.238849639892578, 8.962211608886719, 1.5 # ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΌΠΎΡΠΎΡΠ°
self.motor_pos2 = -20.676218032836914, 10.55816650390625, 1.5 # ΠΏΠΎΠ·ΠΈΡΠΈΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΡΠΎΡΠ°
self.motor1 = self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.motor_pos1) # ΠΌΠΎΡΠΎΡ 1
self.motor2 = self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.motor_pos2) # ΠΌΠΎΡΠΎΡ 2
self.state_info2 = OnscreenText(text='', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.force = False # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ Π½Π΅ ΡΠ°Π·Π³ΠΎΠ½ΡΠ»ΠΈΡΡ
# ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ
self.cTrav = CollisionTraverser()
pusher = CollisionHandlerPusher()
environCenter = self.environ.getBounds().getCenter()
environRad = self.environ.getBounds().getRadius()
cNode = CollisionNode("environment")
cNode.addSolid(CollisionInvSphere(environCenter, environRad))
environC = self.environ.attachNewNode(cNode)
droidCenter = self.droid.getBounds().getCenter()
droidRad = self.droid.getBounds().getRadius()
cNode = CollisionNode("droid")
cNode.addSolid(CollisionSphere(droidCenter, droidRad))
droidC = self.droid.attachNewNode(cNode)
pusher.addCollider(droidC, self.droid)
self.cTrav.addCollider(droidC, pusher)
enemyCenter = self.enemy.getBounds().getCenter()
enemyRad = self.enemy.getBounds().getRadius()
cNode = CollisionNode("enemy")
cNode.addSolid(CollisionSphere(enemyCenter, enemyRad))
enemyC = self.enemy.attachNewNode(cNode)
pusher.addCollider(enemyC, self.enemy)
self.cTrav.addCollider(enemyC, pusher)
fighterCenter = self.fighter.getBounds().getCenter()
fighterRad = self.fighter.getBounds().getRadius()
cNode = CollisionNode("fighter")
cNode.addSolid(CollisionSphere(fighterCenter, fighterRad))
fighterC = self.fighter.attachNewNode(cNode)
bulletCenter = self.bullet.getBounds().getCenter()
bulletRad = self.bullet.getBounds().getRadius()
cNode = CollisionNode("bullet")
cNode.addSolid(CollisionSphere(bulletCenter, bulletRad))
bulletC = self.bullet.attachNewNode(cNode)
pusher.addCollider(bulletC, self.bullet)
self.cTrav.addCollider(bulletC, pusher)
# ΡΠΎΠ»Π½ΡΠ΅(Π½ΠΎΠ²Π°Ρ ΠΌΠ΅Ρ
Π°Π½ΠΈΠΊΠ° ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΡ)
sun = DirectionalLight("sun")
sun.set_color_temperature(6000)
sun.color = sun.color * 4
sun_path = render.attach_new_node(sun)
sun_path.set_pos(10, -10, -10)
sun_path.look_at(0, 0, 0)
sun_path.hprInterval(self.sun_interval, (sun_path.get_h(), sun_path.get_p() - 360, sun_path.get_r()), bakeInStart=True).loop()
render.set_light(sun_path)
def fight_force(self):
# ΡΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π·Π° Π½Π°ΡΠΈΠΌ ΠΊΠΎΡΠ°Π±Π»ΡΠΌ(ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Ρ ΡΠ΄Π΅Π»Π°Π» ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π·Π°ΠΆΠΈΠΌΠ°Π» Π½Π°Ρ(Π»Π΅ΡΠ°Π» Π² Π½Π°ΡΠ΅ΠΌ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ΅)) ΠΈ Π·Π°ΠΆΠΈΠΌΠ°Π΅Ρ ΠΎΠ½ ΡΠ΅Π°Π»ΡΠ½ΠΎ, ΡΠ±Π»ΠΈΠΆΠ°Ρ ΠΊ Π½Π°ΠΌ ΡΠ²ΠΎΠΉ ΠΊΠ²Π°Π΄ΡΠ°Ρ
self.fighter.setY(self.fighter.getY() - self.speed)
self.fighter.setX(self.fighter.getX() - 10)
print(self.fighter.getX())
def loadParticleConfig(self, filename, pos):
self.p.cleanup()
self.p = ParticleEffect()
self.p.loadConfig(Filename(filename))
self.p.start(self.t)
self.p.setPos(pos)
def particle_start(self):
self.force = True # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΌΡ ΡΠΆΠ΅ ΡΠ°Π·Π³ΠΎΠ½ΡΠ»ΠΈΡΡ
# ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.environ.setY(self.environ.getY() - self.speed) # Π½Π΅ΡΡΠΌΡΡ Π²ΠΏΡΠ°Π²ΠΎ
self.droid.setY(self.droid.getY() - self.speed) # ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ Π΄ΡΠΎΠΈΠ΄Π° Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.enemy.setY(self.enemy.getY() - self.speed) # ΡΠ΄ΡΠΈΠ³Π°Π΅ΠΌ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.weapon.setY(self.weapon.getY() - self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.flash.setY(self.flash.getY() - self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.fight_force()
self.state -= 1 # ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΠΌΠ΅Π½ΡΡΠ΅ ΠΎΡΠΊΠΎΠ²
self.state_info.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΎΡΠΊΠΈ
camvec = self.droid.getPos() - self.camera.getPos()
camvec.setZ(0)
camdist = camvec.length()
camvec.normalize()
if camdist > 10.0:
self.camera.setPos(self.camera.getPos() + camvec * (camdist - 10))
camdist = 10.0
if camdist < 5.0:
self.camera.setPos(self.camera.getPos() - camvec * (5 - camdist))
camdist = 5.0
self.camera.lookAt(self.floater)
if self.state != 10 and self.state > 10:
self.state_info.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΠΆΠΈΠ·Π½ΡΡ
ΠΊΠΎΡΠ°Π±Π»Ρ
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam/steam.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ Π½Π΅ΠΈΡΠΏΡΠ°Π²Π΅Π½', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
else:
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam_critic/steam.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
if self.state < 10:
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='ΠΏΠ°Π΄Π°Π΅ΠΌ!', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
def fountain(self):
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΡΠ΅ΠΊΡΡ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ
if self.force:
if self.state != 100:
self.state += 1
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5) + 500, random.randrange(0, 1)
self.loadParticleConfig('special_effects/fountain/fountain.ptf', self.fountain_pos)
else :
if self.state != 100:
self.state += 1
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 1)
self.loadParticleConfig('special_effects/fountain/fountain.ptf', self.fountain_pos)
def black_light(self):
# ΠΡΠΊΠ»ΡΡΠ΅Π½ΡΠΉ ΡΠ²Π΅Ρ
ambientLight = AmbientLight("ambientLight")
ambientLight.setColor((0, 0, 0, 1))
directionalLight = DirectionalLight("directionalLight")
directionalLight.setDirection((-5, -5, -5))
directionalLight.setColor((1, 1, 1, 1))
directionalLight.setSpecularColor((1, 1, 1, 1))
render.setLight(render.attachNewNode(ambientLight))
render.setLight(render.attachNewNode(directionalLight))
def weapon_hide(self):
# Π£Π±ΡΠ°ΡΡ ΠΎΡΡΠΆΠΈΠ΅
self.hide_weapon = True
self.weapon.hide()
def toggleLights(self, lights):
# Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΠ΅
if self.hide_weapon:
for light in lights:
if render.hasLight(light):
render.clearLight(light)
else:
render.setLight(light)
self.flash.setPos(self.weapon_pos)
else:
return
def shot(self):
dt = globalClock.getDt() + 0.5 # CΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
if not self.hide_weapon : # Π΅ΡΠ»ΠΈ ΠΎΡΡΠΆΠΈΠ΅ ΡΠ±ΡΠ°Π½ΠΎ ΡΠΎ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΡΠ΅Π»ΡΡΡ
self.shotSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π²ΡΡΡΡΠ΅Π»Π°
self.bullet.setPos(self.weapon_pos) # ΠΡΠ»Ρ Π±ΡΠ΄Π΅Ρ ΡΠΏΠ°Π²Π½ΠΈΡΡΡ Π²Π½ΡΡΡΠΈ ΠΏΡΡΠΊΠΈ
self.bullet.setY(self.bullet, -11 * dt) # Π‘Π΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΏΡΠ»Ρ Π½Π° ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ Π²ΠΏΠ΅ΡΡΠ΄
def check_loss(self):
if self.state == 0: # Π΅ΡΠ»ΠΈ ΠΆΠΈΠ·Π½Π΅ΠΉ Ρ ΠΊΠΎΡΠ°Π±Π»Ρ Π½Π΅ ΠΎΡΡΠ°Π»ΠΎΡΡ
self.black_light() # Π²ΠΊΠ»ΡΡΠΈΠΌ ΡΡΡΠ½ΡΠΉ ΡΠ²Π΅Ρ
self.weapon_hide() # ΡΠ±Π΅ΡΡΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.info = OnscreenText(text='ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅', style=1, font=self.font,
fg=(1,1,1,1),
pos=(-1.3, -0.5), align=TextNode.ALeft, scale=0.3) # Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΎ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠΈ
self.crackSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π²Π·ΡΡΠ²Π°
def setKey(self, key, value):
self.keyMap[key] = value # ΠΠ΅Π»Π°Π΅ΠΌ ΠΌΠ΅Ρ
aΠ½uΠ·ΠΌ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ.
def move(self, task):
''' ΠΠ΅Π»Π°Π΅ΠΌ ΡΡΡΠ½ΠΊΡΠΈΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° '''
dt = globalClock.getDt() - .005 # CΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
# ΠΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π²Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΡΠ°Π²ΠΎ
if self.keyMap["cam-left"]:
self.camera.setX(self.camera, -20 * dt) # ΠΠ΅Π½ΡΠ΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΊΠ° ΠΊΠ°ΠΌΠ΅ΡΡ ΠΏΠΎ ΠΈΠΊΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈΠ»ΡΠ·ΠΈΡ ΠΏΠΎΠ²ΠΎΡΠΎΡΠ° ΡΠ³Π»Π° Π»ΡΡΠ°. ΠΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΊΠ°ΠΌΠ΅ΡΠ° ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ.
if self.keyMap["cam-right"]:
self.camera.setX(self.camera, +20 * dt) # Π’ΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ Π½Π°Π²Π΅ΡΡ
Ρ.
startpos = self.droid.getPos() # Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ΄ΠΎΠ±Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ³ΡΠΎΠΊΠ°
if self.keyMap["left"]:
self.droid.setH(self.droid.getH() + 300 * dt)
self.enemy.setY(self.enemy, 1 * dt)
if self.keyMap["right"]:
self.droid.setH(self.droid.getH() - 300 * dt)
self.enemy.setY(self.enemy, -1 * dt)
if self.keyMap["forward"]:
self.droid.setY(self.droid, -25 * dt)
self.enemy.setX(self.enemy, 1 * dt)
# Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ±ΡΠ°Π½ΠΎ ΠΎΡΡΠΆΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ
if not self.hide_weapon:
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 3
self.weapon.setPos(self.weapon_pos) # ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΡΠΊΠΈ
else:
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 3
self.flash.setPos(self.weapon_pos)
camvec = self.droid.getPos() - self.camera.getPos() # Π²Π΅ΠΊΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ
camvec.setZ(0) # 0 Π²ΡΡΠΎΡΠ° Π²Π΅ΠΊΡΠΎΡΠ°
camdist = camvec.length() # Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΎΡ Π΄ΡΠΎΠΈΠ΄Π°
camvec.normalize() # Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π²Π΅ΠΊΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ
if camdist > 10.0: # Π΅ΡΠ»ΠΈ Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅ 10, ΡΠΎ ΡΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π·Π° Π΄ΡΠΎΠΎΠΈΠ΄ΠΎΠΌ
self.camera.setPos(self.camera.getPos() + camvec * (camdist - 10))
camdist = 10.0 # ΡΠ΅ΠΏΠ΅ΡΡ Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠ½ΠΎΠ²Π° 10
if camdist < 5.0: # Π΅ΡΠ»ΠΈ Π΄ΠΈΡΡΠ°Π³ΡΡΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΌΠ΅Π½ΡΡΠ΅ 5, ΡΠΎ...
self.camera.setPos(self.camera.getPos() - camvec * (5 - camdist)) # ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ
camdist = 5.0 # Π²ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ
self.camera.lookAt(self.floater) # Π²ΠΎΡ ΠΈ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΠ»ΡΡ Π½Π°Ρ floater
return task.cont # Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π·Π°Π΄Π°ΡΡ
def addInstructions(self, pos, msg):
return OnscreenText(text=msg, style=1, fg=(1,1,1,1), font=self.inst_font, pos=(-1.3, pos), align=TextNode.ALeft, scale = .04, shadow=(0,0,0,1)) # Π€ΡΠ½ΠΊΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΏΡΠ°Π²Π»ΡΡΡ
def addTitle(self, text):
return OnscreenText(text=text, style=1, fg=(1, 1, 1, 1), scale=0.2,
parent=base.a2dBottomRight, align=TextNode.ARight,
pos=(-0.1, 0.09), shadow=(0, 0, 0, 1), font=self.font) # Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Ρ ΡΡΠΈΡΡΠΎΠΌ ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΠ΅ΠΉ
droid = DroidShooter() # Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ
droid.run() # 3Π°ΠΏΡΡΡΠΈΠΌ ΠΈΠ³ΡΡ
# ΡΠ°Π·ΡΠΎΠ±ΠΎΡΡΠΈΠΊΠΈ :
# ΠΠ»Π°Π²Π½ΡΠΉ Π°Π²ΡΠΎΡ : ma3rx
# ΠΠΎΠΌΠΎΡΠ½ΠΈΠΊ : panda3dmastercoder( ΠΏΡΠΈΡΠΎΠ΅Π΄Π΅Π½ΠΈΠ»ΡΡ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ 31 ΡΠ½Π²Π°ΡΡ, 12:??)
3.0.3.1 update! Bug fix slider.
#!/usr/bin/env python
# -*- coding: utf_8 -*-
# Π‘ΠΎΠ·Π΄Π°Π½ΠΎ : 22 ΡΠΈΡΠ»ΠΎ, ΡΠ½Π²Π°ΡΡ, 2021 Π³ΠΎΠ΄
# ΠΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ
from direct.showbase.ShowBase import ShowBase
from panda3d.core import CollisionTraverser, CollisionNode
from panda3d.core import CollisionHandlerPusher, CollisionSphere, CollisionInvSphere
from panda3d.core import Filename, AmbientLight, DirectionalLight
from panda3d.core import PandaNode, NodePath, Camera, TextNode
from direct.particles.Particles import Particles
from direct.particles.ParticleEffect import ParticleEffect
from panda3d.core import PointLight, Spotlight
from panda3d.core import CollideMask
from panda3d.core import loadPrcFileData
from panda3d.core import *
from direct.gui.OnscreenText import OnscreenText
from direct.gui.OnscreenImage import OnscreenImage
from direct.gui.DirectButton import DirectButton
from direct.gui.DirectSlider import DirectSlider
from direct.actor.Actor import Actor
import random
import sys
import time
import os
import math
VERSION = '3.0.3.1'
settings = ['window-title Droid Game ' + VERSION,
'fullscreen 0']
loadPrcFileData('', settings[0]) # Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π½Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ (Π²ΠΎΠ·ΠΌΡΠΌ Π΅Π³ΠΎ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ settings)
loadPrcFileData('', settings[1]) # Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠΊΡΠ°Π½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ
# Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π³Π»Π°Π²Π½ΡΠΉ ΠΊΠ»Π°ΡΡ Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ
class DroidShooter(ShowBase):
def __init__(self):
ShowBase.__init__(self) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ Π²ΡΠ΅ ΡΠ΅Π»ΡΡ ΠΈΠ· direct
self.speed = 1800 # ΡΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ
self.menu() # Π·Π²ΠΏΡΡΠΊ ΠΌΠ΅Π½Ρ
def menu(self):
base.enableParticles() # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΡΡΠ΅ΠΊΡ Π΄ΡΠΌΠ°
self.win.setClearColor((0, 0, 0, 1)) # ΠΠ°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ ΡΡΡΠ½ΡΠΌ. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΡΡΠΎΠΌ ΠΈΠ³ΡΠΎΠ²ΠΎΠΌ Π΄Π²ΠΈΠΆΠΊΠ΅ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ Π·Π°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΡΠΌ.
self.font = loader.loadFont('./fonts/doom_font.ttf') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΡΠΈΡΡ ΠΈΠ· ΠΈΠ³ΡΡ doom
self.inst_font = loader.loadFont('./fonts/arial.ttf') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΡΠΈΡΡ arial
self.crackSound = loader.loadMusic('./sounds/crack.wav') # Π·Π²ΡΠΊ Π²Π·ΡΡΠ²Π° ΠΊΠΎΡΠ°Π±Π»Ρ
self.shotSound = loader.loadMusic('./sounds/shot.wav') # Π·Π²ΡΠΊ Π²ΡΡΡΡΠ΅Π»Π°
self.startSound = loader.loadMusic('./sounds/started.wav') # Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ°
self.errorSound = loader.loadMusic('./sounds/error.wav') # Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ°
self.errorSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.startSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.crackSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.shotSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.startSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ
self.button_start = DirectButton(pos=(0.7, 0, 0), text="CTAPT",
scale=.3, pad=(.2, .2),
command=self.load_game) # ΠΊΠ½ΠΎΠΏΠΊΠ° Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ
self.slider_sun = DirectSlider(pos=(0.1, 0, .75), scale=0.8, value=0.5,
command=self.set_sun_interval)
self.title = self.addTitle("Droid game " + VERSION)
# ΠΠ°ΠΏΠ΅ΡΠ°ΡΠ°Π΅ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅
self.inst1 = self.addInstructions(0.95, u"[ESC]: ΠΡΡ
ΠΎΠ΄")
self.inst2 = self.addInstructions(0.90, u"[Left Arrow]: ΠΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² Π»Π΅Π²ΠΎ")
self.inst3 = self.addInstructions(0.85, u"[Right Arrow]: ΠΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² ΠΏΡΠ°Π²ΠΎ")
self.inst4 = self.addInstructions(0.80, u"[Up Arrow]: ΠΠΏΠ΅ΡΠ΅Π΄")
self.inst5 = self.addInstructions(0.75, u"[a]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΎ")
self.inst6 = self.addInstructions(0.70, u"[d]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² Π»Π΅Π²ΠΎ")
self.inst7 = self.addInstructions(0.65, u"[Left Arrow + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst8 = self.addInstructions(0.60, u"[Right Arrow + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² ΠΏΡΠ°Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst9 = self.addInstructions(0.55, u"[a + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst10 = self.addInstructions(0.50, u"[d + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst11 = self.addInstructions(0.45, u"[space]: ΡΡΡΠ΅Π»ΡΠ±Π°")
self.inst12 = self.addInstructions(0.40, u"[s]: Π΄ΠΎΡΡΠ°ΡΡ ΡΠΎΠ½Π°ΡΠΈΠΊ")
self.inst13 = self.addInstructions(0.35, u"[w]: ΡΠ±ΡΠ°ΡΡ ΠΎΡΡΠΆΠΈΠ΅")
self.inst14 = self.addInstructions(0.30, u"[f]: ΠΏΠΎΠ»Π½ΡΠΉ ΡΠ°Π·Π³ΠΎΠ½(ΠΠΠΠ‘ΠΠ!)")
self.inst15 = self.addInstructions(0.25, u"[0]: ΠΏΠΎΠΆΠ°ΡΠΎΡΡΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°")
self.accept("escape", sys.exit) # ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ Esc Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ.
def set_sun_interval(self):
self.sun_interval = self.slider_sun.guiItem.getValue() * 100 # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ»Π°ΠΉΠ΄Π΅ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΎΠ΅ Π½Π° 500, Π΄Π° ΡΡΠ°ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½ΠΎ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΏΠ»Π΅Π²Π°ΡΡ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅Π½Ρ, ΠΈΠ±ΠΎ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ½ΡΡΠΈΡ ΠΏΡΠΎΡΡΠΎ Π½Π΅ΡΡ :)
def load_game(self):
self.button_start.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ ΡΡΠ°ΡΡΠ°
self.title.hide() # ΡΠ΄Π°Π»ΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠ³ΡΡ
# ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
self.inst1.hide()
self.inst2.hide()
self.inst3.hide()
self.inst4.hide()
self.inst5.hide()
self.inst6.hide()
self.inst7.hide()
self.inst8.hide()
self.inst9.hide()
self.inst10.hide()
self.inst11.hide()
self.inst12.hide()
self.inst13.hide()
self.inst14.hide()
self.inst15.hide()
self.slider_sun.hide() # ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΡΠ»Π°ΠΉΠ΄Π΅Ρ ΡΠΎΠ»Π½ΡΠ°
self.keyMap = {
"left": 0, "right": 0, "forward": 0, "cam-left": 0, "cam-right": 0} # Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ»ΠΎΠ²Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΏΠΎ ΠΈΡ
Π½Π°ΠΆΠ°ΡΠΈΡ
# Π ΠΈΡΡΠ΅ΠΌ Π·Π²ΡΠ·Π΄Ρ
self.sky = loader.loadModel("./models/sky/solar_sky_sphere") # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠΎΡΠΌΠΎΡΠ°(ΡΡΠΎ ΡΡΠ΅ΡΠ°)
self.sky_tex = loader.loadTexture("./tex/stars_1k_tex.jpg") # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ΅ΠΊΡΡΡΡΡ
self.sky.setTexture(self.sky_tex, 1) # Π·Π°ΡΠ΅Π½Π΄Π΅ΡΠΈΠΌ ΡΠ΅ΠΊΡΡΡΡΡ Π½Π° Π½Π΅Π±ΠΎ
self.sky.reparentTo(render) # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π½Π΅Π±ΠΎ
self.sky.setScale(40000) # ΡΠ°ΡΡΠΈΡΠΈΠΌ Π½Π΅Π±ΠΎ Π΄ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ panda3d
self.environ = loader.loadModel("models/world/falcon.egg") # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π² blender ΠΌΠΈΡ.
self.environ.reparentTo(render) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΌΠΈΡΠ° Π² ΠΎΠΊΠ½ΠΎ
droidStartPos = (-1, 0, 1.5 ) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΡΡΠ°ΡΡΠΎΠ²ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π² ΠΌΠΈΡΠ΅.
enemyStartPos = (-6, 1, 0.5) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ°-Π΄ΡΠΎΠΈΠ΄Π°.
self.droid = Actor("models/player/seeker.egg") # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° (ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π² blender)
self.enemy = Actor("models/enemies/r2d2/r2d2.egg") # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° (ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π² blender)
self.droid.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π² Π½Π°Ρ ΠΌΠΈΡ.
self.enemy.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π² Π½Π°Ρ ΠΌΠΈΡ.
self.droid.setScale(1) # ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° 1
self.enemy.setScale(1) # ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π½Π° 1
self.droid.setPos(droidStartPos) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ΡΡ Π½Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ
self.enemy.setPos(enemyStartPos) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π½Π° ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ΡΡ Π½Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ
self.weapon = Actor('models/weapon/lightsaber.egg') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.bullet = Actor('models/weapon/bullet/bullet.egg.pz') # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΠΏΡΠ»Ρ
self.flash = Actor('models/whishlyflash/handlamp.egg') # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.weapon.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ Π² Π½Π°Ρ ΠΌΠΈΡ
self.bullet.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΏΡΠ»Ρ Π² ΠΌΠΈΡ Π½ΠΎ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΎΠ½Π° ΡΠ°ΠΌΠ° Π½Π΅ ΡΠΊΠΎΡΠΎ
self.flash.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ Π² Π½Π°Ρ ΠΌΠΈΡ
self.weapon.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΡΠΊΠΈ
self.bullet.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΠ»ΠΈ
self.flash.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΎΠ½Π°ΡΠΈΠΊΠ°
# Π²ΡΠ°ΠΆΠ΅ΡΠΊΠΈΠΉ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter = Actor('models/fighter/fighter.egg') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΡ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter.reparentTo(render) # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΈΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter.setPos(0, 90, 0) # ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 1 # ΠΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΡΠΊΠΈ
self.weapon.setPos(self.weapon_pos) # ΠΠΎΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ ΡΡΡΡ Π²ΡΡΠ΅ ΠΈΠ³ΡΠΎΠΊΠ°
self.spotlight = camera.attachNewNode(Spotlight("spotlight")) # ΠΠΎΠ½ΡΠΈΠ³ΠΈ ΡΠΎΠ½Π°ΡΠΈΠΊΠ°
self.spotlight.node().setColor((.3, .3, .3, 1))
self.spotlight.node().setSpecularColor((0, 0, 0, 1))
self.floater = NodePath(PandaNode("floater"))
self.floater.reparentTo(self.droid)
self.floater.setZ(2.0)
self.accept("escape", sys.exit) # ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ Esc Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ.
self.accept("arrow_left", self.setKey, ["left", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π»Π΅Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ
self.accept("arrow_right", self.setKey, ["right", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΏΡΠ°Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²ΠΏΡΠ°Π²ΠΎ
self.accept("arrow_up", self.setKey, ["forward", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΏΠ΅ΡΡΠ΄ - ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("a", self.setKey, ["cam-left", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ a - ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΠΈ
self.accept("d", self.setKey, ["cam-right", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ s - ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΠΈ
self.accept("arrow_left-up", self.setKey, ["left", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+Π²Π»Π΅Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("arrow_right-up", self.setKey, ["right", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+ΠΏΡΠ°Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²ΠΏΡΠ°Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("arrow_up-up", self.setKey, ["forward", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+Π²Π²Π΅ΡΡ - ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("a-up", self.setKey, ["cam-left", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ a+Π²ΠΏΠ΅ΡΡΠ΄ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²Π»Π΅Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("d-up", self.setKey, ["cam-right", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ s+Π²ΠΏΠ΅ΡΡΠ΄ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΏΡΠ°Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("space", self.shot) # ΠΏΡΠΈ ΠΏΡΠΎΠ±Π΅Π»Π΅ ΡΡΡΠ΅Π»ΡΠ΅ΠΌ
self.accept("s", self.toggleLights, [[self.spotlight]]) # ΠΠΊΠ»ΡΡΠΈΡΡ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.accept("w", self.weapon_hide) # ΠΏΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ w - ΡΠ±Π΅ΡΡΠΌ ΠΎΡΡΠΆΠΈΠ΅.
base.enableParticles() # ΠΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΡΠΌΠ°
self.t = loader.loadModel("models/weapon/lightsaber.egg") # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ Π΅ΡΡ ΠΎΡΡΠΆΠΈΠ΅
self.t.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ Π² Π½Π°Ρ ΠΌΠΈΡ
self.p = ParticleEffect() # ΠΠΊΠ»ΡΡΠΈΠΌ ΡΡΡΠ΅ΠΊΡ Π΄ΡΠΌΠ°
self.accept('f', self.particle_start) # ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ f(ΠΎΡ force) - Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ°ΠΉΠ» Π΄ΡΠΌΠ° ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ Π² ΠΊΠΎΠ½ΡΠΈΠ³ ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠ° Π°Π½ΠΈΠΌΠ°ΡΠΈΡ ΡΡΠ°Π»Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΄ΡΠΌΠ°
self.accept('0', self.fountain) # ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ f+o(fountain) Π²ΠΊΠ»ΡΡΠΈΠΌ ΠΏΠΎΠΆΠ°ΡΠΎΡΡΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ
taskMgr.add(self.move, "moveTask") # ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π·Π°Π΄Π°ΡΡ Π² Π½Π°Ρ Π΄Π²ΠΈΠΆΠΎΠΊ
self.isMoving = False # Π‘ΡΠ°Π²ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ isMoving Π½Π° False(ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΌΠ΅Π½ΡΡΡ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅) ΡΡΠΎΠ±Ρ ΠΈΠ³ΡΠΎΠΊ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΡΠΎΡΠ».
# ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΡΠ²Π΅Ρ Π±ΡΠ» ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π²ΡΠΊΠ»ΡΡΠ΅Π½.
self.disableMouse() # ΠΡΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· ΠΌΡΡΠΊΡ
self.camera.setPos(self.droid.getX(), self.droid.getY() + 1, 3) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΡΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ³ΡΠΎΠΊΠ°
self.black_light() # Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π²ΡΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ²Π΅Ρ
self.state = 100 # Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠΎΡΠ°Π±Π»Ρ
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.hide_weapon = False # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΎΡΡΠΆΠΈΠ΅ Π½Π΅ ΡΠ±ΡΠ°Π½ΠΎ
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 5)
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 1)
self.motor_pos1 = 25.238849639892578, 8.962211608886719, 1.5 # ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΌΠΎΡΠΎΡΠ°
self.motor_pos2 = -20.676218032836914, 10.55816650390625, 1.5 # ΠΏΠΎΠ·ΠΈΡΠΈΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΡΠΎΡΠ°
self.motor1 = self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.motor_pos1) # ΠΌΠΎΡΠΎΡ 1
self.motor2 = self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.motor_pos2) # ΠΌΠΎΡΠΎΡ 2
self.state_info2 = OnscreenText(text='', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.force = False # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ Π½Π΅ ΡΠ°Π·Π³ΠΎΠ½ΡΠ»ΠΈΡΡ
# ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ
self.cTrav = CollisionTraverser()
pusher = CollisionHandlerPusher()
environCenter = self.environ.getBounds().getCenter()
environRad = self.environ.getBounds().getRadius()
cNode = CollisionNode("environment")
cNode.addSolid(CollisionInvSphere(environCenter, environRad))
environC = self.environ.attachNewNode(cNode)
droidCenter = self.droid.getBounds().getCenter()
droidRad = self.droid.getBounds().getRadius()
cNode = CollisionNode("droid")
cNode.addSolid(CollisionSphere(droidCenter, droidRad))
droidC = self.droid.attachNewNode(cNode)
pusher.addCollider(droidC, self.droid)
self.cTrav.addCollider(droidC, pusher)
enemyCenter = self.enemy.getBounds().getCenter()
enemyRad = self.enemy.getBounds().getRadius()
cNode = CollisionNode("enemy")
cNode.addSolid(CollisionSphere(enemyCenter, enemyRad))
enemyC = self.enemy.attachNewNode(cNode)
pusher.addCollider(enemyC, self.enemy)
self.cTrav.addCollider(enemyC, pusher)
fighterCenter = self.fighter.getBounds().getCenter()
fighterRad = self.fighter.getBounds().getRadius()
cNode = CollisionNode("fighter")
cNode.addSolid(CollisionSphere(fighterCenter, fighterRad))
fighterC = self.fighter.attachNewNode(cNode)
bulletCenter = self.bullet.getBounds().getCenter()
bulletRad = self.bullet.getBounds().getRadius()
cNode = CollisionNode("bullet")
cNode.addSolid(CollisionSphere(bulletCenter, bulletRad))
bulletC = self.bullet.attachNewNode(cNode)
pusher.addCollider(bulletC, self.bullet)
self.cTrav.addCollider(bulletC, pusher)
# ΡΠΎΠ»Π½ΡΠ΅(Π½ΠΎΠ²Π°Ρ ΠΌΠ΅Ρ
Π°Π½ΠΈΠΊΠ° ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΡ)
sun = DirectionalLight("sun")
sun.set_color_temperature(6000)
sun.color = sun.color * 4
sun_path = render.attach_new_node(sun)
sun_path.set_pos(10, -10, -10)
sun_path.look_at(0, 0, 0)
sun_path.hprInterval(self.sun_interval, (sun_path.get_h(), sun_path.get_p() - 360, sun_path.get_r()), bakeInStart=True).loop()
render.set_light(sun_path)
def fight_force(self):
# ΡΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π·Π° Π½Π°ΡΠΈΠΌ ΠΊΠΎΡΠ°Π±Π»ΡΠΌ(ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Ρ ΡΠ΄Π΅Π»Π°Π» ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π·Π°ΠΆΠΈΠΌΠ°Π» Π½Π°Ρ(Π»Π΅ΡΠ°Π» Π² Π½Π°ΡΠ΅ΠΌ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ΅)) ΠΈ Π·Π°ΠΆΠΈΠΌΠ°Π΅Ρ ΠΎΠ½ ΡΠ΅Π°Π»ΡΠ½ΠΎ, ΡΠ±Π»ΠΈΠΆΠ°Ρ ΠΊ Π½Π°ΠΌ ΡΠ²ΠΎΠΉ ΠΊΠ²Π°Π΄ΡΠ°Ρ
self.fighter.setY(self.fighter.getY() - self.speed)
self.fighter.setX(self.fighter.getX() - 10)
print(self.fighter.getX())
def loadParticleConfig(self, filename, pos):
self.p.cleanup()
self.p = ParticleEffect()
self.p.loadConfig(Filename(filename))
self.p.start(self.t)
self.p.setPos(pos)
def particle_start(self):
self.force = True # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΌΡ ΡΠΆΠ΅ ΡΠ°Π·Π³ΠΎΠ½ΡΠ»ΠΈΡΡ
# ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.environ.setY(self.environ.getY() - self.speed) # Π½Π΅ΡΡΠΌΡΡ Π²ΠΏΡΠ°Π²ΠΎ
self.droid.setY(self.droid.getY() - self.speed) # ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ Π΄ΡΠΎΠΈΠ΄Π° Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.enemy.setY(self.enemy.getY() - self.speed) # ΡΠ΄ΡΠΈΠ³Π°Π΅ΠΌ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.weapon.setY(self.weapon.getY() - self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.flash.setY(self.flash.getY() - self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.fight_force()
self.state -= 1 # ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΠΌΠ΅Π½ΡΡΠ΅ ΠΎΡΠΊΠΎΠ²
self.state_info.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΎΡΠΊΠΈ
camvec = self.droid.getPos() - self.camera.getPos()
camvec.setZ(0)
camdist = camvec.length()
camvec.normalize()
if camdist > 10.0:
self.camera.setPos(self.camera.getPos() + camvec * (camdist - 10))
camdist = 10.0
if camdist < 5.0:
self.camera.setPos(self.camera.getPos() - camvec * (5 - camdist))
camdist = 5.0
self.camera.lookAt(self.floater)
if self.state != 10 and self.state > 10:
self.state_info.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΠΆΠΈΠ·Π½ΡΡ
ΠΊΠΎΡΠ°Π±Π»Ρ
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam/steam.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ Π½Π΅ΠΈΡΠΏΡΠ°Π²Π΅Π½', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
else:
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam_critic/steam.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
if self.state < 10:
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='ΠΏΠ°Π΄Π°Π΅ΠΌ!', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
def fountain(self):
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΡΠ΅ΠΊΡΡ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ
if self.force:
if self.state != 100:
self.state += 1
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5) + 500, random.randrange(0, 1)
self.loadParticleConfig('special_effects/fountain/fountain.ptf', self.fountain_pos)
else :
if self.state != 100:
self.state += 1
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 1)
self.loadParticleConfig('special_effects/fountain/fountain.ptf', self.fountain_pos)
def black_light(self):
# ΠΡΠΊΠ»ΡΡΠ΅Π½ΡΠΉ ΡΠ²Π΅Ρ
ambientLight = AmbientLight("ambientLight")
ambientLight.setColor((0, 0, 0, 1))
directionalLight = DirectionalLight("directionalLight")
directionalLight.setDirection((-5, -5, -5))
directionalLight.setColor((1, 1, 1, 1))
directionalLight.setSpecularColor((1, 1, 1, 1))
render.setLight(render.attachNewNode(ambientLight))
render.setLight(render.attachNewNode(directionalLight))
def weapon_hide(self):
# Π£Π±ΡΠ°ΡΡ ΠΎΡΡΠΆΠΈΠ΅
self.hide_weapon = True
self.weapon.hide()
def toggleLights(self, lights):
# Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΠ΅
if self.hide_weapon:
for light in lights:
if render.hasLight(light):
render.clearLight(light)
else:
render.setLight(light)
self.flash.setPos(self.weapon_pos)
else:
return
def shot(self):
dt = globalClock.getDt() + 0.5 # CΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
if not self.hide_weapon : # Π΅ΡΠ»ΠΈ ΠΎΡΡΠΆΠΈΠ΅ ΡΠ±ΡΠ°Π½ΠΎ ΡΠΎ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΡΠ΅Π»ΡΡΡ
self.shotSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π²ΡΡΡΡΠ΅Π»Π°
self.bullet.setPos(self.weapon_pos) # ΠΡΠ»Ρ Π±ΡΠ΄Π΅Ρ ΡΠΏΠ°Π²Π½ΠΈΡΡΡ Π²Π½ΡΡΡΠΈ ΠΏΡΡΠΊΠΈ
self.bullet.setY(self.bullet, -11 * dt) # Π‘Π΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΏΡΠ»Ρ Π½Π° ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ Π²ΠΏΠ΅ΡΡΠ΄
def check_loss(self):
if self.state == 0: # Π΅ΡΠ»ΠΈ ΠΆΠΈΠ·Π½Π΅ΠΉ Ρ ΠΊΠΎΡΠ°Π±Π»Ρ Π½Π΅ ΠΎΡΡΠ°Π»ΠΎΡΡ
self.black_light() # Π²ΠΊΠ»ΡΡΠΈΠΌ ΡΡΡΠ½ΡΠΉ ΡΠ²Π΅Ρ
self.weapon_hide() # ΡΠ±Π΅ΡΡΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.info = OnscreenText(text='ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅', style=1, font=self.font,
fg=(1,1,1,1),
pos=(-1.3, -0.5), align=TextNode.ALeft, scale=0.3) # Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΎ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠΈ
self.crackSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π²Π·ΡΡΠ²Π°
def setKey(self, key, value):
self.keyMap[key] = value # ΠΠ΅Π»Π°Π΅ΠΌ ΠΌΠ΅Ρ
aΠ½uΠ·ΠΌ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ.
def move(self, task):
''' ΠΠ΅Π»Π°Π΅ΠΌ ΡΡΡΠ½ΠΊΡΠΈΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° '''
dt = globalClock.getDt() - .005 # CΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
# ΠΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π²Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΡΠ°Π²ΠΎ
if self.keyMap["cam-left"]:
self.camera.setX(self.camera, -20 * dt) # ΠΠ΅Π½ΡΠ΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΊΠ° ΠΊΠ°ΠΌΠ΅ΡΡ ΠΏΠΎ ΠΈΠΊΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈΠ»ΡΠ·ΠΈΡ ΠΏΠΎΠ²ΠΎΡΠΎΡΠ° ΡΠ³Π»Π° Π»ΡΡΠ°. ΠΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΊΠ°ΠΌΠ΅ΡΠ° ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ.
if self.keyMap["cam-right"]:
self.camera.setX(self.camera, +20 * dt) # Π’ΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ Π½Π°Π²Π΅ΡΡ
Ρ.
startpos = self.droid.getPos() # Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ΄ΠΎΠ±Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ³ΡΠΎΠΊΠ°
if self.keyMap["left"]:
self.droid.setH(self.droid.getH() + 300 * dt)
self.enemy.setY(self.enemy, 1 * dt)
if self.keyMap["right"]:
self.droid.setH(self.droid.getH() - 300 * dt)
self.enemy.setY(self.enemy, -1 * dt)
if self.keyMap["forward"]:
self.droid.setY(self.droid, -25 * dt)
self.enemy.setX(self.enemy, 1 * dt)
# Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ±ΡΠ°Π½ΠΎ ΠΎΡΡΠΆΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ
if not self.hide_weapon:
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 3
self.weapon.setPos(self.weapon_pos) # ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΡΠΊΠΈ
else:
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 3
self.flash.setPos(self.weapon_pos)
camvec = self.droid.getPos() - self.camera.getPos() # Π²Π΅ΠΊΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ
camvec.setZ(0) # 0 Π²ΡΡΠΎΡΠ° Π²Π΅ΠΊΡΠΎΡΠ°
camdist = camvec.length() # Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΎΡ Π΄ΡΠΎΠΈΠ΄Π°
camvec.normalize() # Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π²Π΅ΠΊΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ
if camdist > 10.0: # Π΅ΡΠ»ΠΈ Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅ 10, ΡΠΎ ΡΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π·Π° Π΄ΡΠΎΠΎΠΈΠ΄ΠΎΠΌ
self.camera.setPos(self.camera.getPos() + camvec * (camdist - 10))
camdist = 10.0 # ΡΠ΅ΠΏΠ΅ΡΡ Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠ½ΠΎΠ²Π° 10
if camdist < 5.0: # Π΅ΡΠ»ΠΈ Π΄ΠΈΡΡΠ°Π³ΡΡΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΌΠ΅Π½ΡΡΠ΅ 5, ΡΠΎ...
self.camera.setPos(self.camera.getPos() - camvec * (5 - camdist)) # ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ
camdist = 5.0 # Π²ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ
self.camera.lookAt(self.floater) # Π²ΠΎΡ ΠΈ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΠ»ΡΡ Π½Π°Ρ floater
return task.cont # Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π·Π°Π΄Π°ΡΡ
def addInstructions(self, pos, msg):
return OnscreenText(text=msg, style=1, fg=(1,1,1,1), font=self.inst_font, pos=(-1.3, pos), align=TextNode.ALeft, scale = .04, shadow=(0,0,0,1)) # Π€ΡΠ½ΠΊΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΏΡΠ°Π²Π»ΡΡΡ
def addTitle(self, text):
return OnscreenText(text=text, style=1, fg=(1, 1, 1, 1), scale=0.2,
parent=base.a2dBottomRight, align=TextNode.ARight,
pos=(-0.1, 0.09), shadow=(0, 0, 0, 1), font=self.font) # Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Ρ ΡΡΠΈΡΡΠΎΠΌ ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΠ΅ΠΉ
droid = DroidShooter() # Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ
droid.run() # 3Π°ΠΏΡΡΡΠΈΠΌ ΠΈΠ³ΡΡ
# ΡΠ°Π·ΡΠΎΠ±ΠΎΡΡΠΈΠΊΠΈ :
# ΠΠ»Π°Π²Π½ΡΠΉ Π°Π²ΡΠΎΡ : ma3rx
# ΠΠΎΠΌΠΎΡΠ½ΠΈΠΊ : panda3dmastercoder( ΠΏΡΠΈΡΠΎΠ΅Π΄Π΅Π½ΠΈΠ»ΡΡ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ 31 ΡΠ½Π²Π°ΡΡ, 12:??)
Structure(no update!) :
./models :
./models/enemies : enemies.zip
./models/fighter : fighter.zip
./models/player : player.zip
./models/sky : sky.zip
./models/weapon : weapon.zip (234.3 KB)
./models/whishlyflash : whishlyflash.zip
./models/world : Now, download panda3d art from https://www.panda3d.org/download/noversion/art-gallery.zip
Go to the cat-environment folder. In it you will see a millenium falcon folder. Take all the files from it and put it in the directory ./models/world
./fonts : fonts.zip
./shaders : shaders.zip
./sounds : sounds.zip
./special_effects : special_effects.zip
./tex : tex.zip (95.1 KB)
droid.py :
#!/usr/bin/env python
# -*- coding: utf_8 -*-
# Π‘ΠΎΠ·Π΄Π°Π½ΠΎ : 22 ΡΠΈΡΠ»ΠΎ, ΡΠ½Π²Π°ΡΡ, 2021 Π³ΠΎΠ΄
# ΠΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ
from direct.showbase.ShowBase import ShowBase
from panda3d.core import CollisionTraverser, CollisionNode
from panda3d.core import CollisionHandlerPusher, CollisionSphere, CollisionInvSphere
from panda3d.core import Filename, AmbientLight, DirectionalLight
from panda3d.core import PandaNode, NodePath, Camera, TextNode
from direct.particles.Particles import Particles
from direct.particles.ParticleEffect import ParticleEffect
from panda3d.core import PointLight, Spotlight
from panda3d.core import CollideMask
from panda3d.core import loadPrcFileData
from panda3d.core import *
from direct.gui.OnscreenText import OnscreenText
from direct.gui.OnscreenImage import OnscreenImage
from direct.gui.DirectButton import DirectButton
from direct.gui.DirectSlider import DirectSlider
from direct.actor.Actor import Actor
import random
import sys
import time
import os
import math
VERSION = '3.0.3.1'
settings = ['window-title Droid Game ' + VERSION,
'fullscreen 0']
loadPrcFileData('', settings[0]) # Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π½Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ (Π²ΠΎΠ·ΠΌΡΠΌ Π΅Π³ΠΎ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ settings)
loadPrcFileData('', settings[1]) # Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠΊΡΠ°Π½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ
# Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π³Π»Π°Π²Π½ΡΠΉ ΠΊΠ»Π°ΡΡ Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ
class DroidShooter(ShowBase):
def __init__(self):
ShowBase.__init__(self) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ Π²ΡΠ΅ ΡΠ΅Π»ΡΡ ΠΈΠ· direct
self.speed = 1800 # ΡΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ
self.menu() # Π·Π²ΠΏΡΡΠΊ ΠΌΠ΅Π½Ρ
def menu(self):
base.enableParticles() # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΡΡΠ΅ΠΊΡ Π΄ΡΠΌΠ°
self.win.setClearColor((0, 0, 0, 1)) # ΠΠ°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ ΡΡΡΠ½ΡΠΌ. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΡΡΠΎΠΌ ΠΈΠ³ΡΠΎΠ²ΠΎΠΌ Π΄Π²ΠΈΠΆΠΊΠ΅ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ Π·Π°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΡΠΌ.
self.font = loader.loadFont('./fonts/doom_font.ttf') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΡΠΈΡΡ ΠΈΠ· ΠΈΠ³ΡΡ doom
self.inst_font = loader.loadFont('./fonts/arial.ttf') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΡΠΈΡΡ arial
self.crackSound = loader.loadMusic('./sounds/crack.wav') # Π·Π²ΡΠΊ Π²Π·ΡΡΠ²Π° ΠΊΠΎΡΠ°Π±Π»Ρ
self.shotSound = loader.loadMusic('./sounds/shot.wav') # Π·Π²ΡΠΊ Π²ΡΡΡΡΠ΅Π»Π°
self.startSound = loader.loadMusic('./sounds/started.wav') # Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ°
self.errorSound = loader.loadMusic('./sounds/error.wav') # Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ°
self.errorSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.startSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.crackSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.shotSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.startSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ
self.button_start = DirectButton(pos=(0.7, 0, 0), text="CTAPT",
scale=.3, pad=(.2, .2),
command=self.load_game) # ΠΊΠ½ΠΎΠΏΠΊΠ° Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ
self.slider_sun = DirectSlider(pos=(0.1, 0, .75), scale=0.8, value=0.5,
command=self.set_sun_interval)
self.title = self.addTitle("Droid game " + VERSION)
# ΠΠ°ΠΏΠ΅ΡΠ°ΡΠ°Π΅ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅
self.inst1 = self.addInstructions(0.95, u"[ESC]: ΠΡΡ
ΠΎΠ΄")
self.inst2 = self.addInstructions(0.90, u"[Left Arrow]: ΠΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² Π»Π΅Π²ΠΎ")
self.inst3 = self.addInstructions(0.85, u"[Right Arrow]: ΠΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² ΠΏΡΠ°Π²ΠΎ")
self.inst4 = self.addInstructions(0.80, u"[Up Arrow]: ΠΠΏΠ΅ΡΠ΅Π΄")
self.inst5 = self.addInstructions(0.75, u"[a]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΎ")
self.inst6 = self.addInstructions(0.70, u"[d]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² Π»Π΅Π²ΠΎ")
self.inst7 = self.addInstructions(0.65, u"[Left Arrow + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst8 = self.addInstructions(0.60, u"[Right Arrow + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² ΠΏΡΠ°Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst9 = self.addInstructions(0.55, u"[a + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst10 = self.addInstructions(0.50, u"[d + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst11 = self.addInstructions(0.45, u"[space]: ΡΡΡΠ΅Π»ΡΠ±Π°")
self.inst12 = self.addInstructions(0.40, u"[s]: Π΄ΠΎΡΡΠ°ΡΡ ΡΠΎΠ½Π°ΡΠΈΠΊ")
self.inst13 = self.addInstructions(0.35, u"[w]: ΡΠ±ΡΠ°ΡΡ ΠΎΡΡΠΆΠΈΠ΅")
self.inst14 = self.addInstructions(0.30, u"[f]: ΠΏΠΎΠ»Π½ΡΠΉ ΡΠ°Π·Π³ΠΎΠ½(ΠΠΠΠ‘ΠΠ!)")
self.inst15 = self.addInstructions(0.25, u"[0]: ΠΏΠΎΠΆΠ°ΡΠΎΡΡΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°")
self.accept("escape", sys.exit) # ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ Esc Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ.
def set_sun_interval(self):
self.sun_interval = self.slider_sun.guiItem.getValue() * 100 # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ»Π°ΠΉΠ΄Π΅ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΎΠ΅ Π½Π° 500, Π΄Π° ΡΡΠ°ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½ΠΎ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΏΠ»Π΅Π²Π°ΡΡ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅Π½Ρ, ΠΈΠ±ΠΎ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ½ΡΡΠΈΡ ΠΏΡΠΎΡΡΠΎ Π½Π΅ΡΡ :)
def load_game(self):
self.button_start.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ ΡΡΠ°ΡΡΠ°
self.title.hide() # ΡΠ΄Π°Π»ΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠ³ΡΡ
# ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
self.inst1.hide()
self.inst2.hide()
self.inst3.hide()
self.inst4.hide()
self.inst5.hide()
self.inst6.hide()
self.inst7.hide()
self.inst8.hide()
self.inst9.hide()
self.inst10.hide()
self.inst11.hide()
self.inst12.hide()
self.inst13.hide()
self.inst14.hide()
self.inst15.hide()
self.slider_sun.hide() # ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΡΠ»Π°ΠΉΠ΄Π΅Ρ ΡΠΎΠ»Π½ΡΠ°
self.keyMap = {
"left": 0, "right": 0, "forward": 0, "cam-left": 0, "cam-right": 0} # Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ»ΠΎΠ²Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΏΠΎ ΠΈΡ
Π½Π°ΠΆΠ°ΡΠΈΡ
# Π ΠΈΡΡΠ΅ΠΌ Π·Π²ΡΠ·Π΄Ρ
self.sky = loader.loadModel("./models/sky/solar_sky_sphere") # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠΎΡΠΌΠΎΡΠ°(ΡΡΠΎ ΡΡΠ΅ΡΠ°)
self.sky_tex = loader.loadTexture("./tex/stars_1k_tex.jpg") # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ΅ΠΊΡΡΡΡΡ
self.sky.setTexture(self.sky_tex, 1) # Π·Π°ΡΠ΅Π½Π΄Π΅ΡΠΈΠΌ ΡΠ΅ΠΊΡΡΡΡΡ Π½Π° Π½Π΅Π±ΠΎ
self.sky.reparentTo(render) # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π½Π΅Π±ΠΎ
self.sky.setScale(40000) # ΡΠ°ΡΡΠΈΡΠΈΠΌ Π½Π΅Π±ΠΎ Π΄ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ panda3d
self.environ = loader.loadModel("models/world/falcon.egg") # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π² blender ΠΌΠΈΡ.
self.environ.reparentTo(render) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΌΠΈΡΠ° Π² ΠΎΠΊΠ½ΠΎ
droidStartPos = (-1, 0, 1.5 ) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΡΡΠ°ΡΡΠΎΠ²ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π² ΠΌΠΈΡΠ΅.
enemyStartPos = (-6, 1, 0.5) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ°-Π΄ΡΠΎΠΈΠ΄Π°.
self.droid = Actor("models/player/seeker.egg") # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° (ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π² blender)
self.enemy = Actor("models/enemies/r2d2/r2d2.egg") # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° (ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π² blender)
self.droid.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π² Π½Π°Ρ ΠΌΠΈΡ.
self.enemy.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π² Π½Π°Ρ ΠΌΠΈΡ.
self.droid.setScale(1) # ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° 1
self.enemy.setScale(1) # ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π½Π° 1
self.droid.setPos(droidStartPos) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ΡΡ Π½Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ
self.enemy.setPos(enemyStartPos) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π½Π° ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ΡΡ Π½Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ
self.weapon = Actor('models/weapon/lightsaber.egg') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.bullet = Actor('models/weapon/bullet/bullet.egg.pz') # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΠΏΡΠ»Ρ
self.flash = Actor('models/whishlyflash/handlamp.egg') # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.weapon.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ Π² Π½Π°Ρ ΠΌΠΈΡ
self.bullet.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΏΡΠ»Ρ Π² ΠΌΠΈΡ Π½ΠΎ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΎΠ½Π° ΡΠ°ΠΌΠ° Π½Π΅ ΡΠΊΠΎΡΠΎ
self.flash.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ Π² Π½Π°Ρ ΠΌΠΈΡ
self.weapon.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΡΠΊΠΈ
self.bullet.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΠ»ΠΈ
self.flash.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΎΠ½Π°ΡΠΈΠΊΠ°
# Π²ΡΠ°ΠΆΠ΅ΡΠΊΠΈΠΉ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter = Actor('models/fighter/fighter.egg') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΡ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter.reparentTo(render) # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΈΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter.setPos(0, 90, 0) # ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 1 # ΠΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΡΠΊΠΈ
self.weapon.setPos(self.weapon_pos) # ΠΠΎΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ ΡΡΡΡ Π²ΡΡΠ΅ ΠΈΠ³ΡΠΎΠΊΠ°
self.spotlight = camera.attachNewNode(Spotlight("spotlight")) # ΠΠΎΠ½ΡΠΈΠ³ΠΈ ΡΠΎΠ½Π°ΡΠΈΠΊΠ°
self.spotlight.node().setColor((.3, .3, .3, 1))
self.spotlight.node().setSpecularColor((0, 0, 0, 1))
self.floater = NodePath(PandaNode("floater"))
self.floater.reparentTo(self.droid)
self.floater.setZ(2.0)
self.accept("escape", sys.exit) # ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ Esc Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ.
self.accept("arrow_left", self.setKey, ["left", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π»Π΅Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ
self.accept("arrow_right", self.setKey, ["right", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΏΡΠ°Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²ΠΏΡΠ°Π²ΠΎ
self.accept("arrow_up", self.setKey, ["forward", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΏΠ΅ΡΡΠ΄ - ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("a", self.setKey, ["cam-left", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ a - ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΠΈ
self.accept("d", self.setKey, ["cam-right", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ s - ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΠΈ
self.accept("arrow_left-up", self.setKey, ["left", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+Π²Π»Π΅Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("arrow_right-up", self.setKey, ["right", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+ΠΏΡΠ°Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²ΠΏΡΠ°Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("arrow_up-up", self.setKey, ["forward", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+Π²Π²Π΅ΡΡ - ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("a-up", self.setKey, ["cam-left", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ a+Π²ΠΏΠ΅ΡΡΠ΄ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²Π»Π΅Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("d-up", self.setKey, ["cam-right", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ s+Π²ΠΏΠ΅ΡΡΠ΄ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΏΡΠ°Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("space", self.shot) # ΠΏΡΠΈ ΠΏΡΠΎΠ±Π΅Π»Π΅ ΡΡΡΠ΅Π»ΡΠ΅ΠΌ
self.accept("s", self.toggleLights, [[self.spotlight]]) # ΠΠΊΠ»ΡΡΠΈΡΡ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.accept("w", self.weapon_hide) # ΠΏΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ w - ΡΠ±Π΅ΡΡΠΌ ΠΎΡΡΠΆΠΈΠ΅.
base.enableParticles() # ΠΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΡΠΌΠ°
self.t = loader.loadModel("models/weapon/lightsaber.egg") # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ Π΅ΡΡ ΠΎΡΡΠΆΠΈΠ΅
self.t.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ Π² Π½Π°Ρ ΠΌΠΈΡ
self.p = ParticleEffect() # ΠΠΊΠ»ΡΡΠΈΠΌ ΡΡΡΠ΅ΠΊΡ Π΄ΡΠΌΠ°
self.accept('f', self.particle_start) # ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ f(ΠΎΡ force) - Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ°ΠΉΠ» Π΄ΡΠΌΠ° ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ Π² ΠΊΠΎΠ½ΡΠΈΠ³ ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠ° Π°Π½ΠΈΠΌΠ°ΡΠΈΡ ΡΡΠ°Π»Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΄ΡΠΌΠ°
self.accept('0', self.fountain) # ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ f+o(fountain) Π²ΠΊΠ»ΡΡΠΈΠΌ ΠΏΠΎΠΆΠ°ΡΠΎΡΡΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ
taskMgr.add(self.move, "moveTask") # ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π·Π°Π΄Π°ΡΡ Π² Π½Π°Ρ Π΄Π²ΠΈΠΆΠΎΠΊ
self.isMoving = False # Π‘ΡΠ°Π²ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ isMoving Π½Π° False(ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΌΠ΅Π½ΡΡΡ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅) ΡΡΠΎΠ±Ρ ΠΈΠ³ΡΠΎΠΊ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΡΠΎΡΠ».
# ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΡΠ²Π΅Ρ Π±ΡΠ» ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π²ΡΠΊΠ»ΡΡΠ΅Π½.
self.disableMouse() # ΠΡΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· ΠΌΡΡΠΊΡ
self.camera.setPos(self.droid.getX(), self.droid.getY() + 1, 3) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΡΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ³ΡΠΎΠΊΠ°
self.black_light() # Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π²ΡΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ²Π΅Ρ
self.state = 100 # Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠΎΡΠ°Π±Π»Ρ
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.hide_weapon = False # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΎΡΡΠΆΠΈΠ΅ Π½Π΅ ΡΠ±ΡΠ°Π½ΠΎ
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 5)
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 1)
self.motor_pos1 = 25.238849639892578, 8.962211608886719, 1.5 # ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΌΠΎΡΠΎΡΠ°
self.motor_pos2 = -20.676218032836914, 10.55816650390625, 1.5 # ΠΏΠΎΠ·ΠΈΡΠΈΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΡΠΎΡΠ°
self.motor1 = self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.motor_pos1) # ΠΌΠΎΡΠΎΡ 1
self.motor2 = self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.motor_pos2) # ΠΌΠΎΡΠΎΡ 2
self.state_info2 = OnscreenText(text='', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.force = False # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ Π½Π΅ ΡΠ°Π·Π³ΠΎΠ½ΡΠ»ΠΈΡΡ
# ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ
self.cTrav = CollisionTraverser()
pusher = CollisionHandlerPusher()
environCenter = self.environ.getBounds().getCenter()
environRad = self.environ.getBounds().getRadius()
cNode = CollisionNode("environment")
cNode.addSolid(CollisionInvSphere(environCenter, environRad))
environC = self.environ.attachNewNode(cNode)
droidCenter = self.droid.getBounds().getCenter()
droidRad = self.droid.getBounds().getRadius()
cNode = CollisionNode("droid")
cNode.addSolid(CollisionSphere(droidCenter, droidRad))
droidC = self.droid.attachNewNode(cNode)
pusher.addCollider(droidC, self.droid)
self.cTrav.addCollider(droidC, pusher)
enemyCenter = self.enemy.getBounds().getCenter()
enemyRad = self.enemy.getBounds().getRadius()
cNode = CollisionNode("enemy")
cNode.addSolid(CollisionSphere(enemyCenter, enemyRad))
enemyC = self.enemy.attachNewNode(cNode)
pusher.addCollider(enemyC, self.enemy)
self.cTrav.addCollider(enemyC, pusher)
fighterCenter = self.fighter.getBounds().getCenter()
fighterRad = self.fighter.getBounds().getRadius()
cNode = CollisionNode("fighter")
cNode.addSolid(CollisionSphere(fighterCenter, fighterRad))
fighterC = self.fighter.attachNewNode(cNode)
bulletCenter = self.bullet.getBounds().getCenter()
bulletRad = self.bullet.getBounds().getRadius()
cNode = CollisionNode("bullet")
cNode.addSolid(CollisionSphere(bulletCenter, bulletRad))
bulletC = self.bullet.attachNewNode(cNode)
bulletCenter = self.bullet.getBounds().getCenter()
bulletRad = self.bullet.getBounds().getRadius()
cNode = CollisionNode("bullet")
cNode.addSolid(CollisionSphere(bulletCenter, bulletRad))
bulletC = self.bullet.attachNewNode(cNode)
pusher.addCollider(bulletC, self.bullet)
self.cTrav.addCollider(bulletC, pusher)
# ΡΠΎΠ»Π½ΡΠ΅(Π½ΠΎΠ²Π°Ρ ΠΌΠ΅Ρ
Π°Π½ΠΈΠΊΠ° ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΡ)
sun = DirectionalLight("sun")
sun.set_color_temperature(6000)
sun.color = sun.color * 4
sun_path = render.attach_new_node(sun)
sun_path.set_pos(10, -10, -10)
sun_path.look_at(0, 0, 0)
sun_path.hprInterval(self.sun_interval, (sun_path.get_h(), sun_path.get_p() - 360, sun_path.get_r()), bakeInStart=True).loop()
render.set_light(sun_path)
def fight_force(self):
# ΡΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π·Π° Π½Π°ΡΠΈΠΌ ΠΊΠΎΡΠ°Π±Π»ΡΠΌ(ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Ρ ΡΠ΄Π΅Π»Π°Π» ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π·Π°ΠΆΠΈΠΌΠ°Π» Π½Π°Ρ(Π»Π΅ΡΠ°Π» Π² Π½Π°ΡΠ΅ΠΌ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ΅)) ΠΈ Π·Π°ΠΆΠΈΠΌΠ°Π΅Ρ ΠΎΠ½ ΡΠ΅Π°Π»ΡΠ½ΠΎ, ΡΠ±Π»ΠΈΠΆΠ°Ρ ΠΊ Π½Π°ΠΌ ΡΠ²ΠΎΠΉ ΠΊΠ²Π°Π΄ΡΠ°Ρ
self.fighter.setY(self.fighter.getY() - self.speed)
self.fighter.setX(self.fighter.getX() - 10)
print(self.fighter.getX())
def loadParticleConfig(self, filename, pos):
self.p.cleanup()
self.p = ParticleEffect()
self.p.loadConfig(Filename(filename))
self.p.start(self.t)
self.p.setPos(pos)
def particle_start(self):
self.force = True # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΌΡ ΡΠΆΠ΅ ΡΠ°Π·Π³ΠΎΠ½ΡΠ»ΠΈΡΡ
# ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.environ.setY(self.environ.getY() - self.speed) # Π½Π΅ΡΡΠΌΡΡ Π²ΠΏΡΠ°Π²ΠΎ
self.droid.setY(self.droid.getY() - self.speed) # ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ Π΄ΡΠΎΠΈΠ΄Π° Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.enemy.setY(self.enemy.getY() - self.speed) # ΡΠ΄ΡΠΈΠ³Π°Π΅ΠΌ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.weapon.setY(self.weapon.getY() - self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.flash.setY(self.flash.getY() - self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.fight_force()
self.state -= 1 # ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΠΌΠ΅Π½ΡΡΠ΅ ΠΎΡΠΊΠΎΠ²
self.state_info.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΎΡΠΊΠΈ
if self.state != 10 and self.state > 10:
self.state_info.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΠΆΠΈΠ·Π½ΡΡ
ΠΊΠΎΡΠ°Π±Π»Ρ
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam/steam.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ Π½Π΅ΠΈΡΠΏΡΠ°Π²Π΅Π½', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
else:
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam_critic/steam.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
if self.state < 10:
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='ΠΏΠ°Π΄Π°Π΅ΠΌ!', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
def fountain(self):
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΡΠ΅ΠΊΡΡ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ
if self.force:
if self.state != 100:
self.state += 1
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5) + 500, random.randrange(0, 1)
self.loadParticleConfig('special_effects/fountain/fountain.ptf', self.fountain_pos)
else :
if self.state != 100:
self.state += 1
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 1)
self.loadParticleConfig('special_effects/fountain/fountain.ptf', self.fountain_pos)
def black_light(self):
# ΠΡΠΊΠ»ΡΡΠ΅Π½ΡΠΉ ΡΠ²Π΅Ρ
ambientLight = AmbientLight("ambientLight")
ambientLight.setColor((0, 0, 0, 1))
directionalLight = DirectionalLight("directionalLight")
directionalLight.setDirection((-5, -5, -5))
directionalLight.setColor((1, 1, 1, 1))
directionalLight.setSpecularColor((1, 1, 1, 1))
render.setLight(render.attachNewNode(ambientLight))
render.setLight(render.attachNewNode(directionalLight))
def weapon_hide(self):
# Π£Π±ΡΠ°ΡΡ ΠΎΡΡΠΆΠΈΠ΅
self.hide_weapon = True
self.weapon.hide()
def toggleLights(self, lights):
# Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΠ΅
if self.hide_weapon:
for light in lights:
if render.hasLight(light):
render.clearLight(light)
else:
render.setLight(light)
self.flash.setPos(self.weapon_pos)
else:
return
def shot(self):
dt = globalClock.getDt() + 0.5 # CΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
if not self.hide_weapon : # Π΅ΡΠ»ΠΈ ΠΎΡΡΠΆΠΈΠ΅ ΡΠ±ΡΠ°Π½ΠΎ ΡΠΎ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΡΠ΅Π»ΡΡΡ
self.shotSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π²ΡΡΡΡΠ΅Π»Π°
self.bullet.setPos(self.weapon_pos) # ΠΡΠ»Ρ Π±ΡΠ΄Π΅Ρ ΡΠΏΠ°Π²Π½ΠΈΡΡΡ Π²Π½ΡΡΡΠΈ ΠΏΡΡΠΊΠΈ
self.bullet.setY(self.bullet, -11 * dt) # Π‘Π΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΏΡΠ»Ρ Π½Π° ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ Π²ΠΏΠ΅ΡΡΠ΄
def check_loss(self):
if self.state == 0: # Π΅ΡΠ»ΠΈ ΠΆΠΈΠ·Π½Π΅ΠΉ Ρ ΠΊΠΎΡΠ°Π±Π»Ρ Π½Π΅ ΠΎΡΡΠ°Π»ΠΎΡΡ
self.black_light() # Π²ΠΊΠ»ΡΡΠΈΠΌ ΡΡΡΠ½ΡΠΉ ΡΠ²Π΅Ρ
self.weapon_hide() # ΡΠ±Π΅ΡΡΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.info = OnscreenText(text='ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅', style=1, font=self.font,
fg=(1,1,1,1),
pos=(-1.3, -0.5), align=TextNode.ALeft, scale=0.3) # Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΎ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠΈ
self.crackSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π²Π·ΡΡΠ²Π°
def setKey(self, key, value):
self.keyMap[key] = value # ΠΠ΅Π»Π°Π΅ΠΌ ΠΌΠ΅Ρ
aΠ½uΠ·ΠΌ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ.
def move(self, task):
''' ΠΠ΅Π»Π°Π΅ΠΌ ΡΡΡΠ½ΠΊΡΠΈΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° '''
dt = globalClock.getDt() - .005 # CΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
# ΠΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π²Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΡΠ°Π²ΠΎ
if self.keyMap["cam-left"]:
self.camera.setX(self.camera, -20 * dt) # ΠΠ΅Π½ΡΠ΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΊΠ° ΠΊΠ°ΠΌΠ΅ΡΡ ΠΏΠΎ ΠΈΠΊΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈΠ»ΡΠ·ΠΈΡ ΠΏΠΎΠ²ΠΎΡΠΎΡΠ° ΡΠ³Π»Π° Π»ΡΡΠ°. ΠΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΊΠ°ΠΌΠ΅ΡΠ° ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ.
if self.keyMap["cam-right"]:
self.camera.setX(self.camera, +20 * dt) # Π’ΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ Π½Π°Π²Π΅ΡΡ
Ρ.
startpos = self.droid.getPos() # Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ΄ΠΎΠ±Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ³ΡΠΎΠΊΠ°
if self.keyMap["left"]:
self.droid.setH(self.droid.getH() + 300 * dt)
self.enemy.setY(self.enemy, 1 * dt)
if self.keyMap["right"]:
self.droid.setH(self.droid.getH() - 300 * dt)
self.enemy.setY(self.enemy, -1 * dt)
if self.keyMap["forward"]:
self.droid.setY(self.droid, -25 * dt)
self.enemy.setX(self.enemy, 1 * dt)
# Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ±ΡΠ°Π½ΠΎ ΠΎΡΡΠΆΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ
if not self.hide_weapon:
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 3
self.weapon.setPos(self.weapon_pos) # ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΡΠΊΠΈ
else:
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 3
self.flash.setPos(self.weapon_pos)
camvec = self.droid.getPos() - self.camera.getPos() # Π²Π΅ΠΊΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ
camvec.setZ(0) # 0 Π²ΡΡΠΎΡΠ° Π²Π΅ΠΊΡΠΎΡΠ°
camdist = camvec.length() # Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΎΡ Π΄ΡΠΎΠΈΠ΄Π°
camvec.normalize() # Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π²Π΅ΠΊΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ
if camdist > 10.0: # Π΅ΡΠ»ΠΈ Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅ 10, ΡΠΎ ΡΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π·Π° Π΄ΡΠΎΠΎΠΈΠ΄ΠΎΠΌ
self.camera.setPos(self.camera.getPos() + camvec * (camdist - 10))
camdist = 10.0 # ΡΠ΅ΠΏΠ΅ΡΡ Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠ½ΠΎΠ²Π° 10
if camdist < 5.0: # Π΅ΡΠ»ΠΈ Π΄ΠΈΡΡΠ°Π³ΡΡΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΌΠ΅Π½ΡΡΠ΅ 5, ΡΠΎ...
self.camera.setPos(self.camera.getPos() - camvec * (5 - camdist)) # ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ
camdist = 5.0 # Π²ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ
self.camera.lookAt(self.floater) # Π²ΠΎΡ ΠΈ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΠ»ΡΡ Π½Π°Ρ floater
return task.cont # Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π·Π°Π΄Π°ΡΡ
def addInstructions(self, pos, msg):
return OnscreenText(text=msg, style=1, fg=(1,1,1,1), font=self.inst_font, pos=(-1.3, pos), align=TextNode.ALeft, scale = .04, shadow=(0,0,0,1)) # Π€ΡΠ½ΠΊΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΏΡΠ°Π²Π»ΡΡΡ
def addTitle(self, text):
return OnscreenText(text=text, style=1, fg=(1, 1, 1, 1), scale=0.2,
parent=base.a2dBottomRight, align=TextNode.ARight,
pos=(-0.1, 0.09), shadow=(0, 0, 0, 1), font=self.font) # Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Ρ ΡΡΠΈΡΡΠΎΠΌ ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΠ΅ΠΉ
droid = DroidShooter() # Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ
droid.run() # 3Π°ΠΏΡΡΡΠΈΠΌ ΠΈΠ³ΡΡ
# ΡΠ°Π·ΡΠΎΠ±ΠΎΡΡΠΈΠΊΠΈ :
# ΠΠ»Π°Π²Π½ΡΠΉ Π°Π²ΡΠΎΡ : ma3rx
# ΠΠΎΠΌΠΎΡΠ½ΠΈΠΊ : panda3dmastercoder( ΠΏΡΠΈΡΠΎΠ΅Π΄Π΅Π½ΠΈΠ»ΡΡ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ 31 ΡΠ½Π²Π°ΡΡ, 12:??)
Wouldnβt it be easier to upload just a single zip file containing the code and all the folders, including the
panda3d art?
@rdb, Instruction to panda3d art :
- Download panda 3d art - https://www.panda3d.org/download/noversion/art-gallery.zip
- Select directory cat-enviroments
- Select bvw-f2004βmilleniumfalcon
- Select all files and drop to world directory.
That doesnβt work. I have tried it as I am helping him make the game. They are saying that the file is too large.
If itβs too large, I recommend uploading it to either itch.io or GitHub instead. Both are free and have large limits.
I canβt, sorry
You can do?
Hi! I create 3.0.4 updating!
New code :
#!/usr/bin/env python
# -*- coding: utf_8 -*-
# Π‘ΠΎΠ·Π΄Π°Π½ΠΎ : 22 ΡΠΈΡΠ»ΠΎ, ΡΠ½Π²Π°ΡΡ, 2021 Π³ΠΎΠ΄
# ΠΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ
from direct.showbase.ShowBase import ShowBase
from panda3d.core import CollisionTraverser, CollisionNode
from panda3d.core import CollisionHandlerPusher, CollisionSphere, CollisionInvSphere
from panda3d.core import Filename, AmbientLight, DirectionalLight
from panda3d.core import PandaNode, NodePath, Camera, TextNode
from direct.particles.Particles import Particles
from direct.particles.ParticleEffect import ParticleEffect
from panda3d.core import PointLight, Spotlight
from panda3d.core import CollideMask
from panda3d.core import loadPrcFileData
from panda3d.core import *
from direct.gui.OnscreenText import OnscreenText
from direct.gui.OnscreenImage import OnscreenImage
from direct.gui.DirectButton import DirectButton
from direct.gui.DirectSlider import DirectSlider
from direct.actor.Actor import Actor
import random
import sys
import time
import os
import math
VERSION = '3.0.4'
settings = ['window-title Droid Game ' + VERSION,
'fullscreen 0']
loadPrcFileData('', settings[0]) # Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π½Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ (Π²ΠΎΠ·ΠΌΡΠΌ Π΅Π³ΠΎ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ settings)
loadPrcFileData('', settings[1]) # Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠΊΡΠ°Π½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ
# Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π³Π»Π°Π²Π½ΡΠΉ ΠΊΠ»Π°ΡΡ Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ
class DroidShooter(ShowBase):
def __init__(self):
ShowBase.__init__(self) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ Π²ΡΠ΅ ΡΠ΅Π»ΡΡ ΠΈΠ· direct
self.speed = 1800 # ΡΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ
self.menu() # Π·Π²ΠΏΡΡΠΊ ΠΌΠ΅Π½Ρ
def menu(self):
base.enableParticles() # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΡΡΠ΅ΠΊΡ Π΄ΡΠΌΠ°
self.win.setClearColor((0, 0, 0, 1)) # ΠΠ°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ ΡΡΡΠ½ΡΠΌ. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΡΡΠΎΠΌ ΠΈΠ³ΡΠΎΠ²ΠΎΠΌ Π΄Π²ΠΈΠΆΠΊΠ΅ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ Π·Π°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΡΠΌ.
self.font = loader.loadFont('./fonts/doom_font.ttf') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΡΠΈΡΡ ΠΈΠ· ΠΈΠ³ΡΡ doom
self.inst_font = loader.loadFont('./fonts/arial.ttf') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΡΠΈΡΡ arial
self.crackSound = loader.loadMusic('./sounds/crack.wav') # Π·Π²ΡΠΊ Π²Π·ΡΡΠ²Π° ΠΊΠΎΡΠ°Π±Π»Ρ
self.shotSound = loader.loadMusic('./sounds/shot.wav') # Π·Π²ΡΠΊ Π²ΡΡΡΡΠ΅Π»Π°
self.startSound = loader.loadMusic('./sounds/started.wav') # Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ°
self.errorSound = loader.loadMusic('./sounds/error.wav') # Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ°
self.errorSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.startSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.crackSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.shotSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.startSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ
self.button_start = DirectButton(pos=(0.7, 0, 0), text="CTAPT",
scale=.3, pad=(.2, .2),
command=self.load_game) # ΠΊΠ½ΠΎΠΏΠΊΠ° Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ
self.slider_sun = DirectSlider(pos=(0.1, 0, .75), scale=0.8, value=0.5,
command=self.set_sun_interval)
self.title = self.addTitle("Droid game " + VERSION)
# ΠΠ°ΠΏΠ΅ΡΠ°ΡΠ°Π΅ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅
self.inst1 = self.addInstructions(0.95, u"[ESC]: ΠΡΡ
ΠΎΠ΄")
self.inst2 = self.addInstructions(0.90, u"[Left Arrow]: ΠΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² Π»Π΅Π²ΠΎ")
self.inst3 = self.addInstructions(0.85, u"[Right Arrow]: ΠΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² ΠΏΡΠ°Π²ΠΎ")
self.inst4 = self.addInstructions(0.80, u"[Up Arrow]: ΠΠΏΠ΅ΡΠ΅Π΄")
self.inst5 = self.addInstructions(0.75, u"[a]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΎ")
self.inst6 = self.addInstructions(0.70, u"[d]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² Π»Π΅Π²ΠΎ")
self.inst7 = self.addInstructions(0.65, u"[Left Arrow + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst8 = self.addInstructions(0.60, u"[Right Arrow + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² ΠΏΡΠ°Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst9 = self.addInstructions(0.55, u"[a + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst10 = self.addInstructions(0.50, u"[d + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst11 = self.addInstructions(0.45, u"[space]: ΡΡΡΠ΅Π»ΡΠ±Π°")
self.inst12 = self.addInstructions(0.40, u"[s]: Π΄ΠΎΡΡΠ°ΡΡ ΡΠΎΠ½Π°ΡΠΈΠΊ")
self.inst13 = self.addInstructions(0.35, u"[w]: ΡΠ±ΡΠ°ΡΡ ΠΎΡΡΠΆΠΈΠ΅")
self.inst14 = self.addInstructions(0.30, u"[f]: ΠΏΠΎΠ»Π½ΡΠΉ ΡΠ°Π·Π³ΠΎΠ½(ΠΠΠΠ‘ΠΠ!)")
self.inst15 = self.addInstructions(0.25, u"[0]: ΠΏΠΎΠΆΠ°ΡΠΎΡΡΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°")
self.accept("escape", sys.exit) # ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ Esc Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ.
def set_sun_interval(self):
self.sun_interval = self.slider_sun.guiItem.getValue() * 100 # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ»Π°ΠΉΠ΄Π΅ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΎΠ΅ Π½Π° 500, Π΄Π° ΡΡΠ°ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½ΠΎ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΏΠ»Π΅Π²Π°ΡΡ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅Π½Ρ, ΠΈΠ±ΠΎ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ½ΡΡΠΈΡ ΠΏΡΠΎΡΡΠΎ Π½Π΅ΡΡ :)
def load_game(self):
self.button_start.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ ΡΡΠ°ΡΡΠ°
self.title.hide() # ΡΠ΄Π°Π»ΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠ³ΡΡ
# ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
self.inst1.hide()
self.inst2.hide()
self.inst3.hide()
self.inst4.hide()
self.inst5.hide()
self.inst6.hide()
self.inst7.hide()
self.inst8.hide()
self.inst9.hide()
self.inst10.hide()
self.inst11.hide()
self.inst12.hide()
self.inst13.hide()
self.inst14.hide()
self.inst15.hide()
self.slider_sun.hide() # ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΡΠ»Π°ΠΉΠ΄Π΅Ρ ΡΠΎΠ»Π½ΡΠ°
self.keyMap = {
"left": 0, "right": 0, "forward": 0, "cam-left": 0, "cam-right": 0} # Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ»ΠΎΠ²Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΏΠΎ ΠΈΡ
Π½Π°ΠΆΠ°ΡΠΈΡ
# Π ΠΈΡΡΠ΅ΠΌ Π·Π²ΡΠ·Π΄Ρ
self.sky = loader.loadModel("./models/sky/solar_sky_sphere") # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠΎΡΠΌΠΎΡΠ°(ΡΡΠΎ ΡΡΠ΅ΡΠ°)
self.sky_tex = loader.loadTexture("./tex/stars_1k_tex.jpg") # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ΅ΠΊΡΡΡΡΡ
self.sky.setTexture(self.sky_tex, 1) # Π·Π°ΡΠ΅Π½Π΄Π΅ΡΠΈΠΌ ΡΠ΅ΠΊΡΡΡΡΡ Π½Π° Π½Π΅Π±ΠΎ
self.sky.reparentTo(render) # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π½Π΅Π±ΠΎ
self.sky.setScale(40000) # ΡΠ°ΡΡΠΈΡΠΈΠΌ Π½Π΅Π±ΠΎ Π΄ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ panda3d
self.environ = loader.loadModel("models/world/falcon.egg") # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π² blender ΠΌΠΈΡ.
self.environ.reparentTo(render) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΌΠΈΡΠ° Π² ΠΎΠΊΠ½ΠΎ
droidStartPos = (-1, 0, 1.5 ) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΡΡΠ°ΡΡΠΎΠ²ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π² ΠΌΠΈΡΠ΅.
enemyStartPos = (-6, 1, 0.5) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ°-Π΄ΡΠΎΠΈΠ΄Π°.
self.droid = Actor("models/player/seeker.egg") # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° (ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π² blender)
self.enemy = Actor("models/enemies/r2d2/r2d2.egg") # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° (ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π² blender)
self.droid.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π² Π½Π°Ρ ΠΌΠΈΡ.
self.enemy.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π² Π½Π°Ρ ΠΌΠΈΡ.
self.droid.setScale(1) # ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° 1
self.enemy.setScale(1) # ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π½Π° 1
self.droid.setPos(droidStartPos) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ΡΡ Π½Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ
self.enemy.setPos(enemyStartPos) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π½Π° ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ΡΡ Π½Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ
self.weapon = Actor('models/weapon/lightsaber.egg') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.bullet = Actor('models/weapon/bullet/bullet.egg.pz') # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΠΏΡΠ»Ρ
self.flash = Actor('models/whishlyflash/handlamp.egg') # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.weapon.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ Π² Π½Π°Ρ ΠΌΠΈΡ
self.bullet.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΏΡΠ»Ρ Π² ΠΌΠΈΡ Π½ΠΎ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΎΠ½Π° ΡΠ°ΠΌΠ° Π½Π΅ ΡΠΊΠΎΡΠΎ
self.flash.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ Π² Π½Π°Ρ ΠΌΠΈΡ
self.weapon.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΡΠΊΠΈ
self.bullet.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΠ»ΠΈ
self.flash.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΎΠ½Π°ΡΠΈΠΊΠ°
# Π²ΡΠ°ΠΆΠ΅ΡΠΊΠΈΠΉ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter = Actor('models/fighter/fighter.egg') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΡ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter.reparentTo(render) # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΈΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter.setPos(0, 90, 0) # ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 1 # ΠΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΡΠΊΠΈ
self.weapon.setPos(self.weapon_pos) # ΠΠΎΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ ΡΡΡΡ Π²ΡΡΠ΅ ΠΈΠ³ΡΠΎΠΊΠ°
self.spotlight = camera.attachNewNode(Spotlight("spotlight")) # ΠΠΎΠ½ΡΠΈΠ³ΠΈ ΡΠΎΠ½Π°ΡΠΈΠΊΠ°
self.spotlight.node().setColor((.3, .3, .3, 1))
self.spotlight.node().setSpecularColor((0, 0, 0, 1))
self.floater = NodePath(PandaNode("floater"))
self.floater.reparentTo(self.droid)
self.floater.setZ(2.0)
self.accept("escape", sys.exit) # ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ Esc Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ.
self.accept("arrow_left", self.setKey, ["left", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π»Π΅Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ
self.accept("arrow_right", self.setKey, ["right", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΏΡΠ°Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²ΠΏΡΠ°Π²ΠΎ
self.accept("arrow_up", self.setKey, ["forward", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΏΠ΅ΡΡΠ΄ - ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("a", self.setKey, ["cam-left", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ a - ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΠΈ
self.accept("d", self.setKey, ["cam-right", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ s - ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΠΈ
self.accept("arrow_left-up", self.setKey, ["left", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+Π²Π»Π΅Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("arrow_right-up", self.setKey, ["right", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+ΠΏΡΠ°Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²ΠΏΡΠ°Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("arrow_up-up", self.setKey, ["forward", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+Π²Π²Π΅ΡΡ - ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("a-up", self.setKey, ["cam-left", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ a+Π²ΠΏΠ΅ΡΡΠ΄ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²Π»Π΅Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("d-up", self.setKey, ["cam-right", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ s+Π²ΠΏΠ΅ΡΡΠ΄ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΏΡΠ°Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("space", self.shot) # ΠΏΡΠΈ ΠΏΡΠΎΠ±Π΅Π»Π΅ ΡΡΡΠ΅Π»ΡΠ΅ΠΌ
self.accept("s", self.toggleLights, [[self.spotlight]]) # ΠΠΊΠ»ΡΡΠΈΡΡ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.accept("w", self.weapon_hide) # ΠΏΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ w - ΡΠ±Π΅ΡΡΠΌ ΠΎΡΡΠΆΠΈΠ΅.
base.enableParticles() # ΠΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΡΠΌΠ°
self.t = loader.loadModel("models/weapon/lightsaber.egg") # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ Π΅ΡΡ ΠΎΡΡΠΆΠΈΠ΅
self.t.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ Π² Π½Π°Ρ ΠΌΠΈΡ
self.p = ParticleEffect() # ΠΠΊΠ»ΡΡΠΈΠΌ ΡΡΡΠ΅ΠΊΡ Π΄ΡΠΌΠ°
self.accept('f', self.particle_start) # ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ f(ΠΎΡ force) - Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ°ΠΉΠ» Π΄ΡΠΌΠ° ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ Π² ΠΊΠΎΠ½ΡΠΈΠ³ ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠ° Π°Π½ΠΈΠΌΠ°ΡΠΈΡ ΡΡΠ°Π»Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΄ΡΠΌΠ°
self.accept('0', self.fountain) # ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ f+o(fountain) Π²ΠΊΠ»ΡΡΠΈΠΌ ΠΏΠΎΠΆΠ°ΡΠΎΡΡΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ
taskMgr.add(self.move, "moveTask") # ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π·Π°Π΄Π°ΡΡ Π² Π½Π°Ρ Π΄Π²ΠΈΠΆΠΎΠΊ
self.isMoving = False # Π‘ΡΠ°Π²ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ isMoving Π½Π° False(ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΌΠ΅Π½ΡΡΡ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅) ΡΡΠΎΠ±Ρ ΠΈΠ³ΡΠΎΠΊ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΡΠΎΡΠ».
# ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΡΠ²Π΅Ρ Π±ΡΠ» ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π²ΡΠΊΠ»ΡΡΠ΅Π½.
self.disableMouse() # ΠΡΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· ΠΌΡΡΠΊΡ
self.camera.setPos(self.droid.getX(), self.droid.getY() + 1, 3) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΡΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ³ΡΠΎΠΊΠ°
self.black_light() # Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π²ΡΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ²Π΅Ρ
self.state = 100 # Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠΎΡΠ°Π±Π»Ρ
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.hide_weapon = False # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΎΡΡΠΆΠΈΠ΅ Π½Π΅ ΡΠ±ΡΠ°Π½ΠΎ
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 5)
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 1)
self.motor_pos1 = 25.238849639892578, 8.962211608886719, 1.5 # ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΌΠΎΡΠΎΡΠ°
self.motor_pos2 = -20.676218032836914, 10.55816650390625, 1.5 # ΠΏΠΎΠ·ΠΈΡΠΈΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΡΠΎΡΠ°
self.motor1 = self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.motor_pos1) # ΠΌΠΎΡΠΎΡ 1
self.motor2 = self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.motor_pos2) # ΠΌΠΎΡΠΎΡ 2
self.state_info2 = OnscreenText(text='', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.force = False # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ Π½Π΅ ΡΠ°Π·Π³ΠΎΠ½ΡΠ»ΠΈΡΡ
# ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ ΠΊΠΎΡΠ°Π±Π»Ρ(ΠΎΠ½ Ρ Π½Π°Ρ ΠΊΠ°ΠΊ Π³Π»Π°Π²Π½Π°Ρ ΠΊΠ°ΡΡΠ°).
self.cTrav = CollisionTraverser()
pusher = CollisionHandlerPusher()
environCenter = self.environ.getBounds().getCenter()
environRad = self.environ.getBounds().getRadius()
cNode = CollisionNode("environment")
cNode.addSolid(CollisionInvSphere(environCenter, environRad))
environC = self.environ.attachNewNode(cNode)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ Π΄ΡΠΎΠΈΠ΄Π°.
droidCenter = self.droid.getBounds().getCenter()
droidRad = self.droid.getBounds().getRadius()
cNode = CollisionNode("droid")
cNode.addSolid(CollisionSphere(droidCenter, droidRad))
droidC = self.droid.attachNewNode(cNode)
pusher.addCollider(droidC, self.droid)
self.cTrav.addCollider(droidC, pusher)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ°.
enemyCenter = self.enemy.getBounds().getCenter()
enemyRad = self.enemy.getBounds().getRadius()
cNode = CollisionNode("enemy")
cNode.addSolid(CollisionSphere(enemyCenter, enemyRad))
enemyC = self.enemy.attachNewNode(cNode)
pusher.addCollider(enemyC, self.enemy)
self.cTrav.addCollider(enemyC, pusher)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ Π²ΡΠ°ΠΆΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ.
fighterCenter = self.fighter.getBounds().getCenter()
fighterRad = self.fighter.getBounds().getRadius()
cNode = CollisionNode("fighter")
cNode.addSolid(CollisionSphere(fighterCenter, fighterRad))
fighterC = self.fighter.attachNewNode(cNode)
pusher.addCollider(fighterC, self.fighter)
self.cTrav.addCollider(fighterC, pusher)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ ΠΏΡΠ»ΠΈ.
bulletCenter = self.bullet.getBounds().getCenter()
bulletRad = self.bullet.getBounds().getRadius()
cNode = CollisionNode("bullet")
cNode.addSolid(CollisionSphere(bulletCenter, bulletRad))
bulletC = self.bullet.attachNewNode(cNode)
bulletCenter = self.bullet.getBounds().getCenter()
bulletRad = self.bullet.getBounds().getRadius()
cNode = CollisionNode("bullet")
cNode.addSolid(CollisionSphere(bulletCenter, bulletRad))
bulletC = self.bullet.attachNewNode(cNode)
pusher.addCollider(bulletC, self.bullet)
self.cTrav.addCollider(bulletC, pusher)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ ΠΏΡΡΠΊΠΈ. Π― Π±Ρ Π½Π΅ ΡΠΊΠ°Π·Π°Π», ΡΡΠΎ ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΡ, ΡΠΊΠΎΡΠ΅Π΅ ΡΡΠΎ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΠΎΡΡΠΈ
weaponCenter = self.weapon.getBounds().getCenter()
weaponRad = self.weapon.getBounds().getRadius()
cNode = CollisionNode("weapon")
cNode.addSolid(CollisionSphere(weaponCenter, weaponRad))
weaponC = self.weapon.attachNewNode(cNode)
pusher.addCollider(weaponC, self.weapon)
self.cTrav.addCollider(weaponC, pusher)
# ΡΠΎΠ»Π½ΡΠ΅(Π½ΠΎΠ²Π°Ρ ΠΌΠ΅Ρ
Π°Π½ΠΈΠΊΠ° ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΡ)
sun = DirectionalLight("sun")
sun.set_color_temperature(6000)
sun.color = sun.color * 4
sun_path = render.attach_new_node(sun)
sun_path.set_pos(10, -10, -10)
sun_path.look_at(0, 0, 0)
sun_path.hprInterval(self.sun_interval, (sun_path.get_h(), sun_path.get_p() - 360, sun_path.get_r()), bakeInStart=True).loop()
render.set_light(sun_path)
def fight_force(self):
# ΡΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π·Π° Π½Π°ΡΠΈΠΌ ΠΊΠΎΡΠ°Π±Π»ΡΠΌ(ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Ρ ΡΠ΄Π΅Π»Π°Π» ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π·Π°ΠΆΠΈΠΌΠ°Π» Π½Π°Ρ(Π»Π΅ΡΠ°Π» Π² Π½Π°ΡΠ΅ΠΌ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ΅)) ΠΈ Π·Π°ΠΆΠΈΠΌΠ°Π΅Ρ ΠΎΠ½ ΡΠ΅Π°Π»ΡΠ½ΠΎ, ΡΠ±Π»ΠΈΠΆΠ°Ρ ΠΊ Π½Π°ΠΌ ΡΠ²ΠΎΠΉ ΠΊΠ²Π°Π΄ΡΠ°Ρ
self.fighter.setY(self.fighter.getY() - self.speed)
self.fighter.setX(self.fighter.getX() - 10)
print(self.fighter.getX())
def loadParticleConfig(self, filename, pos):
self.p.cleanup()
self.p = ParticleEffect()
self.p.loadConfig(Filename(filename))
self.p.start(self.t)
self.p.setPos(pos)
def particle_start(self):
self.force = True # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΌΡ ΡΠΆΠ΅ ΡΠ°Π·Π³ΠΎΠ½ΡΠ»ΠΈΡΡ
# ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.environ.setY(self.environ.getY() - self.speed) # Π½Π΅ΡΡΠΌΡΡ Π²ΠΏΡΠ°Π²ΠΎ
self.droid.setY(self.droid.getY() - self.speed) # ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ Π΄ΡΠΎΠΈΠ΄Π° Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.enemy.setY(self.enemy.getY() - self.speed) # ΡΠ΄ΡΠΈΠ³Π°Π΅ΠΌ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.weapon.setY(self.weapon.getY() - self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.flash.setY(self.flash.getY() - self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.fight_force()
self.state -= 1 # ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΠΌΠ΅Π½ΡΡΠ΅ ΠΎΡΠΊΠΎΠ²
self.state_info.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΎΡΠΊΠΈ
if self.state != 10 and self.state > 10:
self.state_info.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΠΆΠΈΠ·Π½ΡΡ
ΠΊΠΎΡΠ°Π±Π»Ρ
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam/steam.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ Π½Π΅ΠΈΡΠΏΡΠ°Π²Π΅Π½', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
else:
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam_critic/steam.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
if self.state < 10:
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='ΠΏΠ°Π΄Π°Π΅ΠΌ!', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
def fountain(self):
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΡΠ΅ΠΊΡΡ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ
if self.force:
if self.state != 100:
self.state += 1
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5) + 500, random.randrange(0, 1)
self.loadParticleConfig('special_effects/fountain/fountain.ptf', self.fountain_pos)
else :
if self.state != 100:
self.state += 1
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 1)
self.loadParticleConfig('special_effects/fountain/fountain.ptf', self.fountain_pos)
def black_light(self):
# ΠΡΠΊΠ»ΡΡΠ΅Π½ΡΠΉ ΡΠ²Π΅Ρ
ambientLight = AmbientLight("ambientLight")
ambientLight.setColor((0, 0, 0, 1))
directionalLight = DirectionalLight("directionalLight")
directionalLight.setDirection((-5, -5, -5))
directionalLight.setColor((1, 1, 1, 1))
directionalLight.setSpecularColor((1, 1, 1, 1))
render.setLight(render.attachNewNode(ambientLight))
render.setLight(render.attachNewNode(directionalLight))
def weapon_hide(self):
# Π£Π±ΡΠ°ΡΡ ΠΎΡΡΠΆΠΈΠ΅
self.hide_weapon = True
self.weapon.hide()
def toggleLights(self, lights):
# Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΠ΅
if self.hide_weapon:
for light in lights:
if render.hasLight(light):
render.clearLight(light)
else:
render.setLight(light)
self.flash.setPos(self.weapon_pos)
else:
return
def shot(self):
dt = globalClock.getDt() + 0.5 # CΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
if not self.hide_weapon : # Π΅ΡΠ»ΠΈ ΠΎΡΡΠΆΠΈΠ΅ ΡΠ±ΡΠ°Π½ΠΎ ΡΠΎ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΡΠ΅Π»ΡΡΡ
self.shotSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π²ΡΡΡΡΠ΅Π»Π°
self.bullet.setPos(self.weapon_pos) # ΠΡΠ»Ρ Π±ΡΠ΄Π΅Ρ ΡΠΏΠ°Π²Π½ΠΈΡΡΡ Π²Π½ΡΡΡΠΈ ΠΏΡΡΠΊΠΈ
self.bullet.setY(self.bullet, -11 * dt) # Π‘Π΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΏΡΠ»Ρ Π½Π° ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ Π²ΠΏΠ΅ΡΡΠ΄
def check_loss(self):
if self.state == 0: # Π΅ΡΠ»ΠΈ ΠΆΠΈΠ·Π½Π΅ΠΉ Ρ ΠΊΠΎΡΠ°Π±Π»Ρ Π½Π΅ ΠΎΡΡΠ°Π»ΠΎΡΡ
self.black_light() # Π²ΠΊΠ»ΡΡΠΈΠΌ ΡΡΡΠ½ΡΠΉ ΡΠ²Π΅Ρ
self.weapon_hide() # ΡΠ±Π΅ΡΡΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.info = OnscreenText(text='ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅', style=1, font=self.font,
fg=(1,1,1,1),
pos=(-1.3, -0.5), align=TextNode.ALeft, scale=0.3) # Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΎ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠΈ
self.crackSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π²Π·ΡΡΠ²Π°
def setKey(self, key, value):
self.keyMap[key] = value # ΠΠ΅Π»Π°Π΅ΠΌ ΠΌΠ΅Ρ
aΠ½uΠ·ΠΌ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ.
def move(self, task):
''' ΠΠ΅Π»Π°Π΅ΠΌ ΡΡΡΠ½ΠΊΡΠΈΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° '''
dt = globalClock.getDt() - .005 # CΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
# ΠΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π²Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΡΠ°Π²ΠΎ
if self.keyMap["cam-left"]:
self.camera.setX(self.camera, -20 * dt) # ΠΠ΅Π½ΡΠ΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΊΠ° ΠΊΠ°ΠΌΠ΅ΡΡ ΠΏΠΎ ΠΈΠΊΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈΠ»ΡΠ·ΠΈΡ ΠΏΠΎΠ²ΠΎΡΠΎΡΠ° ΡΠ³Π»Π° Π»ΡΡΠ°. ΠΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΊΠ°ΠΌΠ΅ΡΠ° ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ.
if self.keyMap["cam-right"]:
self.camera.setX(self.camera, +20 * dt) # Π’ΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ Π½Π°Π²Π΅ΡΡ
Ρ.
startpos = self.droid.getPos() # Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ΄ΠΎΠ±Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ³ΡΠΎΠΊΠ°
if self.keyMap["left"]:
self.droid.setH(self.droid.getH() + 300 * dt)
self.enemy.setY(self.enemy, 1 * dt)
if self.keyMap["right"]:
self.droid.setH(self.droid.getH() - 300 * dt)
self.enemy.setY(self.enemy, -1 * dt)
if self.keyMap["forward"]:
self.droid.setY(self.droid, -25 * dt)
self.enemy.setX(self.enemy, 1 * dt)
# Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ±ΡΠ°Π½ΠΎ ΠΎΡΡΠΆΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ
if not self.hide_weapon:
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 3
self.weapon.setPos(self.weapon_pos) # ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΡΠΊΠΈ
else:
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 3
self.flash.setPos(self.weapon_pos)
camvec = self.droid.getPos() - self.camera.getPos() # Π²Π΅ΠΊΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ
camvec.setZ(0) # 0 Π²ΡΡΠΎΡΠ° Π²Π΅ΠΊΡΠΎΡΠ°
camdist = camvec.length() # Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΎΡ Π΄ΡΠΎΠΈΠ΄Π°
camvec.normalize() # Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π²Π΅ΠΊΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ
if camdist > 10.0: # Π΅ΡΠ»ΠΈ Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅ 10, ΡΠΎ ΡΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π·Π° Π΄ΡΠΎΠΎΠΈΠ΄ΠΎΠΌ
self.camera.setPos(self.camera.getPos() + camvec * (camdist - 10))
camdist = 10.0 # ΡΠ΅ΠΏΠ΅ΡΡ Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠ½ΠΎΠ²Π° 10
if camdist < 5.0: # Π΅ΡΠ»ΠΈ Π΄ΠΈΡΡΠ°Π³ΡΡΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΌΠ΅Π½ΡΡΠ΅ 5, ΡΠΎ...
self.camera.setPos(self.camera.getPos() - camvec * (5 - camdist)) # ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ
camdist = 5.0 # Π²ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ
self.camera.lookAt(self.floater) # Π²ΠΎΡ ΠΈ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΠ»ΡΡ Π½Π°Ρ floater
return task.cont # Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π·Π°Π΄Π°ΡΡ
def addInstructions(self, pos, msg):
return OnscreenText(text=msg, style=1, fg=(1,1,1,1), font=self.inst_font, pos=(-1.3, pos), align=TextNode.ALeft, scale = .04, shadow=(0,0,0,1)) # Π€ΡΠ½ΠΊΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΏΡΠ°Π²Π»ΡΡΡ
def addTitle(self, text):
return OnscreenText(text=text, style=1, fg=(1, 1, 1, 1), scale=0.2,
parent=base.a2dBottomRight, align=TextNode.ARight,
pos=(-0.1, 0.09), shadow=(0, 0, 0, 1), font=self.font) # Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Ρ ΡΡΠΈΡΡΠΎΠΌ ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΠ΅ΠΉ
droid = DroidShooter() # Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ
droid.run() # 3Π°ΠΏΡΡΡΠΈΠΌ ΠΈΠ³ΡΡ
# ΡΠ°Π·ΡΠΎΠ±ΠΎΡΡΠΈΠΊΠΈ :
# ΠΠ»Π°Π²Π½ΡΠΉ Π°Π²ΡΠΎΡ : ma3rx
# ΠΠΎΠΌΠΎΡΠ½ΠΈΠΊ : panda3dmastercoder( ΠΏΡΠΈΡΠΎΠ΅Π΄Π΅Π½ΠΈΠ»ΡΡ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ 31 ΡΠ½Π²Π°ΡΡ, 2021 Π³ΠΎΠ΄Π°, 12:??)
# Π Π΅ΠΊΠ»Π°ΠΌΡΠΈΠΊ : rdb (Π½Π°ΠΏΠΈΡΠ°Π» ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΎΡΡΠΌΠ΅ 6 ΡΠ΅Π²ΡΠ°Π»Ρ 2021 Π³ΠΎΠ΄Π°, 20:11)
Added collision for weapon, bug fixes fight and more!
Download now!
Hi! I create 3.0.5 update - add White-Black mode.
Delete directory ./shaders.
New code droid.py :
#!/usr/bin/env python
# -*- coding: utf_8 -*-
# Π‘ΠΎΠ·Π΄Π°Π½ΠΎ : 22 ΡΠΈΡΠ»ΠΎ, ΡΠ½Π²Π°ΡΡ, 2021 Π³ΠΎΠ΄
# ΠΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ
from direct.showbase.ShowBase import ShowBase
from panda3d.core import CollisionTraverser, CollisionNode
from panda3d.core import CollisionHandlerPusher, CollisionSphere, CollisionInvSphere
from panda3d.core import Filename, AmbientLight, DirectionalLight
from panda3d.core import PandaNode, NodePath, Camera, TextNode
from direct.particles.Particles import Particles
from direct.particles.ParticleEffect import ParticleEffect
from panda3d.core import PointLight, Spotlight
from panda3d.core import CollideMask
from panda3d.core import loadPrcFileData
from panda3d.core import *
from direct.gui.OnscreenText import OnscreenText
from direct.gui.OnscreenImage import OnscreenImage
from direct.gui.DirectButton import DirectButton
from direct.gui.DirectSlider import DirectSlider
from direct.actor.Actor import Actor
import random
import sys
import time
import os
import math
VERSION = '3.0.5'
settings = ['window-title Droid Game ' + VERSION,
'fullscreen 0']
loadPrcFileData('', settings[0]) # Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π½Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ (Π²ΠΎΠ·ΠΌΡΠΌ Π΅Π³ΠΎ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ settings)
loadPrcFileData('', settings[1]) # Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠΊΡΠ°Π½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ
# Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π³Π»Π°Π²Π½ΡΠΉ ΠΊΠ»Π°ΡΡ Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ
class DroidShooter(ShowBase):
def __init__(self):
ShowBase.__init__(self) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ Π²ΡΠ΅ ΡΠ΅Π»ΡΡ ΠΈΠ· direct
self.speed = 1800 # ΡΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ
self.GB = False # ΠΠ ΡΡΡΠ½ΠΎ-Π±Π΅Π»ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ
self.menu() # Π·Π²ΠΏΡΡΠΊ ΠΌΠ΅Π½Ρ
def menu(self):
base.enableParticles() # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΡΡΠ΅ΠΊΡ Π΄ΡΠΌΠ°
self.win.setClearColor((0, 0, 0, 1)) # ΠΠ°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ ΡΡΡΠ½ΡΠΌ. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΡΡΠΎΠΌ ΠΈΠ³ΡΠΎΠ²ΠΎΠΌ Π΄Π²ΠΈΠΆΠΊΠ΅ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ Π·Π°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΡΠΌ.
self.font = loader.loadFont('./fonts/doom_font.ttf') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΡΠΈΡΡ ΠΈΠ· ΠΈΠ³ΡΡ doom
self.inst_font = loader.loadFont('./fonts/arial.ttf') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΡΠΈΡΡ arial
self.crackSound = loader.loadMusic('./sounds/crack.wav') # Π·Π²ΡΠΊ Π²Π·ΡΡΠ²Π° ΠΊΠΎΡΠ°Π±Π»Ρ
self.shotSound = loader.loadMusic('./sounds/shot.wav') # Π·Π²ΡΠΊ Π²ΡΡΡΡΠ΅Π»Π°
self.startSound = loader.loadMusic('./sounds/started.wav') # Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ°
self.errorSound = loader.loadMusic('./sounds/error.wav') # Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ°
self.errorSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.startSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.crackSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.shotSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.startSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ
self.button_start = DirectButton(pos=(0.7, 0, 0.4), text="CTAPT",
scale=.2, pad=(.2, .2),
command=self.load_game) # ΠΊΠ½ΠΎΠΏΠΊΠ° Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ
self.gb_start = DirectButton(pos=(0.7, 0, 0.1), text="GB",
scale=.2, pad=(.2, .2),
command=self.gb_mode) # ΠΊΠ½ΠΎΠΏΠΊΠ° Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ Π² ΡΡΡΠ½ΠΎ-Π±Π΅Π»ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅
self.slider_sun = DirectSlider(pos=(0.1, 0, .75), scale=0.8, value=0.5,
command=self.set_sun_interval)
self.title = self.addTitle("Droid game " + VERSION)
# ΠΠ°ΠΏΠ΅ΡΠ°ΡΠ°Π΅ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅
self.inst1 = self.addInstructions(0.95, u"[ESC]: ΠΡΡ
ΠΎΠ΄")
self.inst2 = self.addInstructions(0.90, u"[Left Arrow]: ΠΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² Π»Π΅Π²ΠΎ")
self.inst3 = self.addInstructions(0.85, u"[Right Arrow]: ΠΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² ΠΏΡΠ°Π²ΠΎ")
self.inst4 = self.addInstructions(0.80, u"[Up Arrow]: ΠΠΏΠ΅ΡΠ΅Π΄")
self.inst5 = self.addInstructions(0.75, u"[a]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΎ")
self.inst6 = self.addInstructions(0.70, u"[d]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² Π»Π΅Π²ΠΎ")
self.inst7 = self.addInstructions(0.65, u"[Left Arrow + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst8 = self.addInstructions(0.60, u"[Right Arrow + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² ΠΏΡΠ°Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst9 = self.addInstructions(0.55, u"[a + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst10 = self.addInstructions(0.50, u"[d + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst11 = self.addInstructions(0.45, u"[space]: ΡΡΡΠ΅Π»ΡΠ±Π°")
self.inst12 = self.addInstructions(0.40, u"[s]: Π΄ΠΎΡΡΠ°ΡΡ ΡΠΎΠ½Π°ΡΠΈΠΊ")
self.inst13 = self.addInstructions(0.35, u"[w]: ΡΠ±ΡΠ°ΡΡ ΠΎΡΡΠΆΠΈΠ΅")
self.inst14 = self.addInstructions(0.30, u"[f]: ΠΏΠΎΠ»Π½ΡΠΉ ΡΠ°Π·Π³ΠΎΠ½(ΠΠΠΠ‘ΠΠ!)")
self.inst15 = self.addInstructions(0.25, u"[0]: ΠΏΠΎΠΆΠ°ΡΠΎΡΡΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°")
self.accept("escape", sys.exit) # ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ Esc Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ.
def set_sun_interval(self):
self.sun_interval = self.slider_sun.guiItem.getValue() * 100 # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ»Π°ΠΉΠ΄Π΅ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΎΠ΅ Π½Π° 500, Π΄Π° ΡΡΠ°ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½ΠΎ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΏΠ»Π΅Π²Π°ΡΡ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅Π½Ρ, ΠΈΠ±ΠΎ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ½ΡΡΠΈΡ ΠΏΡΠΎΡΡΠΎ Π½Π΅ΡΡ :)
def gb_mode(self):
'''Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠ½ΠΎΠ±Π΅Π»ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ°'''
self.GB = True
def load_game(self):
self.button_start.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ ΡΡΠ°ΡΡΠ°
self.gb_start.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ ΡΡΡΠ½ΠΎ Π±Π΅Π»ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ°.
self.title.hide() # ΡΠ΄Π°Π»ΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠ³ΡΡ
# ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
self.inst1.hide()
self.inst2.hide()
self.inst3.hide()
self.inst4.hide()
self.inst5.hide()
self.inst6.hide()
self.inst7.hide()
self.inst8.hide()
self.inst9.hide()
self.inst10.hide()
self.inst11.hide()
self.inst12.hide()
self.inst13.hide()
self.inst14.hide()
self.inst15.hide()
self.slider_sun.hide() # ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΡΠ»Π°ΠΉΠ΄Π΅Ρ ΡΠΎΠ»Π½ΡΠ°
self.keyMap = {
"left": 0, "right": 0, "forward": 0, "cam-left": 0, "cam-right": 0} # Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ»ΠΎΠ²Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΏΠΎ ΠΈΡ
Π½Π°ΠΆΠ°ΡΠΈΡ
# Π ΠΈΡΡΠ΅ΠΌ Π·Π²ΡΠ·Π΄Ρ
self.sky = loader.loadModel("./models/sky/solar_sky_sphere") # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠΎΡΠΌΠΎΡΠ°(ΡΡΠΎ ΡΡΠ΅ΡΠ°)
self.sky_tex = loader.loadTexture("./tex/stars_1k_tex.jpg") # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ΅ΠΊΡΡΡΡΡ
self.sky.setTexture(self.sky_tex, 1) # Π·Π°ΡΠ΅Π½Π΄Π΅ΡΠΈΠΌ ΡΠ΅ΠΊΡΡΡΡΡ Π½Π° Π½Π΅Π±ΠΎ
self.sky.reparentTo(render) # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π½Π΅Π±ΠΎ
self.sky.setScale(40000) # ΡΠ°ΡΡΠΈΡΠΈΠΌ Π½Π΅Π±ΠΎ Π΄ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ panda3d
self.environ = loader.loadModel("models/world/falcon.egg") # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π² blender ΠΌΠΈΡ.
self.environ.reparentTo(render) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΌΠΈΡΠ° Π² ΠΎΠΊΠ½ΠΎ
droidStartPos = (-1, 0, 1.5 ) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΡΡΠ°ΡΡΠΎΠ²ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π² ΠΌΠΈΡΠ΅.
enemyStartPos = (-6, 1, 0.5) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ°-Π΄ΡΠΎΠΈΠ΄Π°.
self.droid = Actor("models/player/seeker.egg") # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° (ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π² blender)
self.enemy = Actor("models/enemies/r2d2/r2d2.egg") # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° (ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π² blender)
self.droid.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π² Π½Π°Ρ ΠΌΠΈΡ.
self.enemy.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π² Π½Π°Ρ ΠΌΠΈΡ.
self.droid.setScale(1) # ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° 1
self.enemy.setScale(1) # ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π½Π° 1
self.droid.setPos(droidStartPos) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ΡΡ Π½Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ
self.enemy.setPos(enemyStartPos) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π½Π° ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ΡΡ Π½Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ
self.weapon = Actor('models/weapon/lightsaber.egg') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.bullet = Actor('models/weapon/bullet/bullet.egg.pz') # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΠΏΡΠ»Ρ
self.flash = Actor('models/whishlyflash/handlamp.egg') # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.weapon.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ Π² Π½Π°Ρ ΠΌΠΈΡ
self.bullet.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΏΡΠ»Ρ Π² ΠΌΠΈΡ Π½ΠΎ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΎΠ½Π° ΡΠ°ΠΌΠ° Π½Π΅ ΡΠΊΠΎΡΠΎ
self.flash.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ Π² Π½Π°Ρ ΠΌΠΈΡ
self.weapon.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΡΠΊΠΈ
self.bullet.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΠ»ΠΈ
self.flash.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΎΠ½Π°ΡΠΈΠΊΠ°
# Π²ΡΠ°ΠΆΠ΅ΡΠΊΠΈΠΉ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter = Actor('models/fighter/fighter.egg') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΡ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter.reparentTo(render) # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΈΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter.setPos(0, 90, 0) # ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 1 # ΠΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΡΠΊΠΈ
self.weapon.setPos(self.weapon_pos) # ΠΠΎΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ ΡΡΡΡ Π²ΡΡΠ΅ ΠΈΠ³ΡΠΎΠΊΠ°
self.spotlight = camera.attachNewNode(Spotlight("spotlight")) # ΠΠΎΠ½ΡΠΈΠ³ΠΈ ΡΠΎΠ½Π°ΡΠΈΠΊΠ°
self.spotlight.node().setColor((.3, .3, .3, 1))
self.spotlight.node().setSpecularColor((0, 0, 0, 1))
self.floater = NodePath(PandaNode("floater"))
self.floater.reparentTo(self.droid)
self.floater.setZ(2.0)
self.accept("escape", sys.exit) # ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ Esc Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ.
self.accept("arrow_left", self.setKey, ["left", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π»Π΅Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ
self.accept("arrow_right", self.setKey, ["right", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΏΡΠ°Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²ΠΏΡΠ°Π²ΠΎ
self.accept("arrow_up", self.setKey, ["forward", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΏΠ΅ΡΡΠ΄ - ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("a", self.setKey, ["cam-left", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ a - ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΠΈ
self.accept("d", self.setKey, ["cam-right", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ s - ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΠΈ
self.accept("arrow_left-up", self.setKey, ["left", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+Π²Π»Π΅Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("arrow_right-up", self.setKey, ["right", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+ΠΏΡΠ°Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²ΠΏΡΠ°Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("arrow_up-up", self.setKey, ["forward", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+Π²Π²Π΅ΡΡ - ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("a-up", self.setKey, ["cam-left", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ a+Π²ΠΏΠ΅ΡΡΠ΄ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²Π»Π΅Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("d-up", self.setKey, ["cam-right", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ s+Π²ΠΏΠ΅ΡΡΠ΄ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΏΡΠ°Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("space", self.shot) # ΠΏΡΠΈ ΠΏΡΠΎΠ±Π΅Π»Π΅ ΡΡΡΠ΅Π»ΡΠ΅ΠΌ
self.accept("s", self.toggleLights, [[self.spotlight]]) # ΠΠΊΠ»ΡΡΠΈΡΡ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.accept("w", self.weapon_hide) # ΠΏΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ w - ΡΠ±Π΅ΡΡΠΌ ΠΎΡΡΠΆΠΈΠ΅.
base.enableParticles() # ΠΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΡΠΌΠ°
self.t = loader.loadModel("models/weapon/lightsaber.egg") # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ Π΅ΡΡ ΠΎΡΡΠΆΠΈΠ΅
self.t.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ Π² Π½Π°Ρ ΠΌΠΈΡ
self.p = ParticleEffect() # ΠΠΊΠ»ΡΡΠΈΠΌ ΡΡΡΠ΅ΠΊΡ Π΄ΡΠΌΠ°
self.accept('f', self.particle_start) # ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ f(ΠΎΡ force) - Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ°ΠΉΠ» Π΄ΡΠΌΠ° ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ Π² ΠΊΠΎΠ½ΡΠΈΠ³ ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠ° Π°Π½ΠΈΠΌΠ°ΡΠΈΡ ΡΡΠ°Π»Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΄ΡΠΌΠ°
self.accept('0', self.fountain) # ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ f+o(fountain) Π²ΠΊΠ»ΡΡΠΈΠΌ ΠΏΠΎΠΆΠ°ΡΠΎΡΡΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ
taskMgr.add(self.move, "moveTask") # ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π·Π°Π΄Π°ΡΡ Π² Π½Π°Ρ Π΄Π²ΠΈΠΆΠΎΠΊ
self.isMoving = False # Π‘ΡΠ°Π²ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ isMoving Π½Π° False(ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΌΠ΅Π½ΡΡΡ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅) ΡΡΠΎΠ±Ρ ΠΈΠ³ΡΠΎΠΊ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΡΠΎΡΠ».
# ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΡΠ²Π΅Ρ Π±ΡΠ» ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π²ΡΠΊΠ»ΡΡΠ΅Π½.
self.disableMouse() # ΠΡΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· ΠΌΡΡΠΊΡ
self.camera.setPos(self.droid.getX(), self.droid.getY() + 1, 3) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΡΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ³ΡΠΎΠΊΠ°
self.black_light() # Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π²ΡΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ²Π΅Ρ
self.state = 100 # Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠΎΡΠ°Π±Π»Ρ
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.hide_weapon = False # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΎΡΡΠΆΠΈΠ΅ Π½Π΅ ΡΠ±ΡΠ°Π½ΠΎ
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 5)
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 1)
self.motor_pos1 = 25.238849639892578, 8.962211608886719, 1.5 # ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΌΠΎΡΠΎΡΠ°
self.motor_pos2 = -20.676218032836914, 10.55816650390625, 1.5 # ΠΏΠΎΠ·ΠΈΡΠΈΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΡΠΎΡΠ°
self.motor1 = self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.motor_pos1) # ΠΌΠΎΡΠΎΡ 1
self.motor2 = self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.motor_pos2) # ΠΌΠΎΡΠΎΡ 2
self.state_info2 = OnscreenText(text='', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.force = False # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ Π½Π΅ ΡΠ°Π·Π³ΠΎΠ½ΡΠ»ΠΈΡΡ
# ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ ΠΊΠΎΡΠ°Π±Π»Ρ(ΠΎΠ½ Ρ Π½Π°Ρ ΠΊΠ°ΠΊ Π³Π»Π°Π²Π½Π°Ρ ΠΊΠ°ΡΡΠ°).
self.cTrav = CollisionTraverser()
pusher = CollisionHandlerPusher()
environCenter = self.environ.getBounds().getCenter()
environRad = self.environ.getBounds().getRadius()
cNode = CollisionNode("environment")
cNode.addSolid(CollisionInvSphere(environCenter, environRad))
environC = self.environ.attachNewNode(cNode)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ Π΄ΡΠΎΠΈΠ΄Π°.
droidCenter = self.droid.getBounds().getCenter()
droidRad = self.droid.getBounds().getRadius()
cNode = CollisionNode("droid")
cNode.addSolid(CollisionSphere(droidCenter, droidRad))
droidC = self.droid.attachNewNode(cNode)
pusher.addCollider(droidC, self.droid)
self.cTrav.addCollider(droidC, pusher)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ°.
enemyCenter = self.enemy.getBounds().getCenter()
enemyRad = self.enemy.getBounds().getRadius()
cNode = CollisionNode("enemy")
cNode.addSolid(CollisionSphere(enemyCenter, enemyRad))
enemyC = self.enemy.attachNewNode(cNode)
pusher.addCollider(enemyC, self.enemy)
self.cTrav.addCollider(enemyC, pusher)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ Π²ΡΠ°ΠΆΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ.
fighterCenter = self.fighter.getBounds().getCenter()
fighterRad = self.fighter.getBounds().getRadius()
cNode = CollisionNode("fighter")
cNode.addSolid(CollisionSphere(fighterCenter, fighterRad))
fighterC = self.fighter.attachNewNode(cNode)
pusher.addCollider(fighterC, self.fighter)
self.cTrav.addCollider(fighterC, pusher)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ ΠΏΡΠ»ΠΈ.
bulletCenter = self.bullet.getBounds().getCenter()
bulletRad = self.bullet.getBounds().getRadius()
cNode = CollisionNode("bullet")
cNode.addSolid(CollisionSphere(bulletCenter, bulletRad))
bulletC = self.bullet.attachNewNode(cNode)
bulletCenter = self.bullet.getBounds().getCenter()
bulletRad = self.bullet.getBounds().getRadius()
cNode = CollisionNode("bullet")
cNode.addSolid(CollisionSphere(bulletCenter, bulletRad))
bulletC = self.bullet.attachNewNode(cNode)
pusher.addCollider(bulletC, self.bullet)
self.cTrav.addCollider(bulletC, pusher)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ ΠΏΡΡΠΊΠΈ. Π― Π±Ρ Π½Π΅ ΡΠΊΠ°Π·Π°Π», ΡΡΠΎ ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΡ, ΡΠΊΠΎΡΠ΅Π΅ ΡΡΠΎ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΠΎΡΡΠΈ
weaponCenter = self.weapon.getBounds().getCenter()
weaponRad = self.weapon.getBounds().getRadius()
cNode = CollisionNode("weapon")
cNode.addSolid(CollisionSphere(weaponCenter, weaponRad))
weaponC = self.weapon.attachNewNode(cNode)
pusher.addCollider(weaponC, self.weapon)
self.cTrav.addCollider(weaponC, pusher)
# ΡΠΎΠ»Π½ΡΠ΅(Π½ΠΎΠ²Π°Ρ ΠΌΠ΅Ρ
Π°Π½ΠΈΠΊΠ° ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΡ)
sun = DirectionalLight("sun")
sun.set_color_temperature(6000)
sun.color = sun.color * 4
sun_path = render.attach_new_node(sun)
sun_path.set_pos(10, -10, -10)
sun_path.look_at(0, 0, 0)
sun_path.hprInterval(self.sun_interval, (sun_path.get_h(), sun_path.get_p() - 360, sun_path.get_r()), bakeInStart=True).loop()
render.set_light(sun_path)
# ΠΡΠ»ΠΈ ΠΈΠ³ΡΠΎΠΊ Π·Π°Ρ
ΠΎΡΠ΅Π» ΠΏΠΎΠΈΠ³ΡΠ°ΡΡ Π² ΡΡΡΠ½ΠΎΠ±Π΅Π»ΡΡ ΠΈΠ³ΡΡ, ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΡΡΠΎ
if self.GB :
render.set_shader(Shader.load(Shader.SL_GLSL, "lighting.vert", "lighting.frag")) # ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ΅ΠΉΠ΄Π΅ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ!
def fight_force(self):
# ΡΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π·Π° Π½Π°ΡΠΈΠΌ ΠΊΠΎΡΠ°Π±Π»ΡΠΌ(ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Ρ ΡΠ΄Π΅Π»Π°Π» ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π·Π°ΠΆΠΈΠΌΠ°Π» Π½Π°Ρ(Π»Π΅ΡΠ°Π» Π² Π½Π°ΡΠ΅ΠΌ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ΅)) ΠΈ Π·Π°ΠΆΠΈΠΌΠ°Π΅Ρ ΠΎΠ½ ΡΠ΅Π°Π»ΡΠ½ΠΎ, ΡΠ±Π»ΠΈΠΆΠ°Ρ ΠΊ Π½Π°ΠΌ ΡΠ²ΠΎΠΉ ΠΊΠ²Π°Π΄ΡΠ°Ρ
self.fighter.setY(self.fighter.getY() - self.speed)
self.fighter.setX(self.fighter.getX() - 10)
print(self.fighter.getX())
def loadParticleConfig(self, filename, pos):
self.p.cleanup()
self.p = ParticleEffect()
self.p.loadConfig(Filename(filename))
self.p.start(self.t)
self.p.setPos(pos)
def particle_start(self):
self.force = True # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΌΡ ΡΠΆΠ΅ ΡΠ°Π·Π³ΠΎΠ½ΡΠ»ΠΈΡΡ
# ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.environ.setY(self.environ.getY() - self.speed) # Π½Π΅ΡΡΠΌΡΡ Π²ΠΏΡΠ°Π²ΠΎ
self.droid.setY(self.droid.getY() - self.speed) # ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ Π΄ΡΠΎΠΈΠ΄Π° Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.enemy.setY(self.enemy.getY() - self.speed) # ΡΠ΄ΡΠΈΠ³Π°Π΅ΠΌ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.weapon.setY(self.weapon.getY() - self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.flash.setY(self.flash.getY() - self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.fight_force()
self.state -= 1 # ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΠΌΠ΅Π½ΡΡΠ΅ ΠΎΡΠΊΠΎΠ²
self.state_info.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΎΡΠΊΠΈ
if self.state != 10 and self.state > 10:
self.state_info.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΠΆΠΈΠ·Π½ΡΡ
ΠΊΠΎΡΠ°Π±Π»Ρ
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam/steam.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ Π½Π΅ΠΈΡΠΏΡΠ°Π²Π΅Π½', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
else:
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam_critic/steam.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
if self.state < 10:
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='ΠΏΠ°Π΄Π°Π΅ΠΌ!', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
def fountain(self):
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΡΠ΅ΠΊΡΡ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ
if self.force:
if self.state != 100:
self.state += 1
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5) + 500, random.randrange(0, 1)
self.loadParticleConfig('special_effects/fountain/fountain.ptf', self.fountain_pos)
else :
if self.state != 100:
self.state += 1
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 1)
self.loadParticleConfig('special_effects/fountain/fountain.ptf', self.fountain_pos)
def black_light(self):
# ΠΡΠΊΠ»ΡΡΠ΅Π½ΡΠΉ ΡΠ²Π΅Ρ
ambientLight = AmbientLight("ambientLight")
ambientLight.setColor((0, 0, 0, 1))
directionalLight = DirectionalLight("directionalLight")
directionalLight.setDirection((-5, -5, -5))
directionalLight.setColor((1, 1, 1, 1))
directionalLight.setSpecularColor((1, 1, 1, 1))
render.setLight(render.attachNewNode(ambientLight))
render.setLight(render.attachNewNode(directionalLight))
def weapon_hide(self):
# Π£Π±ΡΠ°ΡΡ ΠΎΡΡΠΆΠΈΠ΅
self.hide_weapon = True
self.weapon.hide()
def toggleLights(self, lights):
# Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΠ΅
if self.hide_weapon:
for light in lights:
if render.hasLight(light):
render.clearLight(light)
else:
render.setLight(light)
self.flash.setPos(self.weapon_pos)
else:
return
def shot(self):
dt = globalClock.getDt() + 0.5 # CΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
if not self.hide_weapon : # Π΅ΡΠ»ΠΈ ΠΎΡΡΠΆΠΈΠ΅ ΡΠ±ΡΠ°Π½ΠΎ ΡΠΎ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΡΠ΅Π»ΡΡΡ
self.shotSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π²ΡΡΡΡΠ΅Π»Π°
self.bullet.setPos(self.weapon_pos) # ΠΡΠ»Ρ Π±ΡΠ΄Π΅Ρ ΡΠΏΠ°Π²Π½ΠΈΡΡΡ Π²Π½ΡΡΡΠΈ ΠΏΡΡΠΊΠΈ
self.bullet.setY(self.bullet, -11 * dt) # Π‘Π΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΏΡΠ»Ρ Π½Π° ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ Π²ΠΏΠ΅ΡΡΠ΄
def check_loss(self):
if self.state == 0: # Π΅ΡΠ»ΠΈ ΠΆΠΈΠ·Π½Π΅ΠΉ Ρ ΠΊΠΎΡΠ°Π±Π»Ρ Π½Π΅ ΠΎΡΡΠ°Π»ΠΎΡΡ
self.black_light() # Π²ΠΊΠ»ΡΡΠΈΠΌ ΡΡΡΠ½ΡΠΉ ΡΠ²Π΅Ρ
self.weapon_hide() # ΡΠ±Π΅ΡΡΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.info = OnscreenText(text='ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅', style=1, font=self.font,
fg=(1,1,1,1),
pos=(-1.3, -0.5), align=TextNode.ALeft, scale=0.3) # Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΎ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠΈ
self.crackSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π²Π·ΡΡΠ²Π°
def setKey(self, key, value):
self.keyMap[key] = value # ΠΠ΅Π»Π°Π΅ΠΌ ΠΌΠ΅Ρ
aΠ½uΠ·ΠΌ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ.
def move(self, task):
''' ΠΠ΅Π»Π°Π΅ΠΌ ΡΡΡΠ½ΠΊΡΠΈΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° '''
dt = globalClock.getDt() - .005 # CΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
# ΠΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π²Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΡΠ°Π²ΠΎ
if self.keyMap["cam-left"]:
self.camera.setX(self.camera, -20 * dt) # ΠΠ΅Π½ΡΠ΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΊΠ° ΠΊΠ°ΠΌΠ΅ΡΡ ΠΏΠΎ ΠΈΠΊΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈΠ»ΡΠ·ΠΈΡ ΠΏΠΎΠ²ΠΎΡΠΎΡΠ° ΡΠ³Π»Π° Π»ΡΡΠ°. ΠΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΊΠ°ΠΌΠ΅ΡΠ° ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ.
if self.keyMap["cam-right"]:
self.camera.setX(self.camera, +20 * dt) # Π’ΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ Π½Π°Π²Π΅ΡΡ
Ρ.
startpos = self.droid.getPos() # Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ΄ΠΎΠ±Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ³ΡΠΎΠΊΠ°
if self.keyMap["left"]:
self.droid.setH(self.droid.getH() + 300 * dt)
self.enemy.setY(self.enemy, 1 * dt)
if self.keyMap["right"]:
self.droid.setH(self.droid.getH() - 300 * dt)
self.enemy.setY(self.enemy, -1 * dt)
if self.keyMap["forward"]:
self.droid.setY(self.droid, -25 * dt)
self.enemy.setX(self.enemy, 1 * dt)
# Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ±ΡΠ°Π½ΠΎ ΠΎΡΡΠΆΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ
if not self.hide_weapon:
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 3
self.weapon.setPos(self.weapon_pos) # ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΡΠΊΠΈ
else:
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 3
self.flash.setPos(self.weapon_pos)
camvec = self.droid.getPos() - self.camera.getPos() # Π²Π΅ΠΊΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ
camvec.setZ(0) # 0 Π²ΡΡΠΎΡΠ° Π²Π΅ΠΊΡΠΎΡΠ°
camdist = camvec.length() # Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΎΡ Π΄ΡΠΎΠΈΠ΄Π°
camvec.normalize() # Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π²Π΅ΠΊΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ
if camdist > 10.0: # Π΅ΡΠ»ΠΈ Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅ 10, ΡΠΎ ΡΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π·Π° Π΄ΡΠΎΠΎΠΈΠ΄ΠΎΠΌ
self.camera.setPos(self.camera.getPos() + camvec * (camdist - 10))
camdist = 10.0 # ΡΠ΅ΠΏΠ΅ΡΡ Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠ½ΠΎΠ²Π° 10
if camdist < 5.0: # Π΅ΡΠ»ΠΈ Π΄ΠΈΡΡΠ°Π³ΡΡΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΌΠ΅Π½ΡΡΠ΅ 5, ΡΠΎ...
self.camera.setPos(self.camera.getPos() - camvec * (5 - camdist)) # ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ
camdist = 5.0 # Π²ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ
self.camera.lookAt(self.floater) # Π²ΠΎΡ ΠΈ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΠ»ΡΡ Π½Π°Ρ floater
return task.cont # Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π·Π°Π΄Π°ΡΡ
def addInstructions(self, pos, msg):
return OnscreenText(text=msg, style=1, fg=(1,1,1,1), font=self.inst_font, pos=(-1.3, pos), align=TextNode.ALeft, scale = .04, shadow=(0,0,0,1)) # Π€ΡΠ½ΠΊΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΏΡΠ°Π²Π»ΡΡΡ
def addTitle(self, text):
return OnscreenText(text=text, style=1, fg=(1, 1, 1, 1), scale=0.2,
parent=base.a2dBottomRight, align=TextNode.ARight,
pos=(-0.1, 0.09), shadow=(0, 0, 0, 1), font=self.font) # Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Ρ ΡΡΠΈΡΡΠΎΠΌ ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΠ΅ΠΉ
droid = DroidShooter() # Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ
droid.run() # 3Π°ΠΏΡΡΡΠΈΠΌ ΠΈΠ³ΡΡ
# ΡΠ°Π·ΡΠΎΠ±ΠΎΡΡΠΈΠΊΠΈ :
# ΠΠ»Π°Π²Π½ΡΠΉ Π°Π²ΡΠΎΡ : ma3rx
# ΠΠΎΠΌΠΎΡΠ½ΠΈΠΊ : panda3dmastercoder( ΠΏΡΠΈΡΠΎΠ΅Π΄Π΅Π½ΠΈΠ»ΡΡ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ 31 ΡΠ½Π²Π°ΡΡ, 2021 Π³ΠΎΠ΄Π°, 12:??)
# Π Π΅ΠΊΠ»Π°ΠΌΡΠΈΠΊ : rdb (Π½Π°ΠΏΠΈΡΠ°Π» ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΎΡΡΠΌΠ΅ 6 ΡΠ΅Π²ΡΠ°Π»Ρ 2021 Π³ΠΎΠ΄Π°, 20:11)
Hi! I create 3.0.6 update.
Add too directory models :
./models/block : block.zip
New code :
#!/usr/bin/env python
# -*- coding: utf_8 -*-
# Π‘ΠΎΠ·Π΄Π°Π½ΠΎ : 22 ΡΠΈΡΠ»ΠΎ, ΡΠ½Π²Π°ΡΡ, 2021 Π³ΠΎΠ΄
# ΠΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ
from direct.showbase.ShowBase import ShowBase
from panda3d.core import CollisionTraverser, CollisionNode
from panda3d.core import CollisionHandlerPusher, CollisionSphere, CollisionInvSphere
from panda3d.core import Filename, AmbientLight, DirectionalLight
from panda3d.core import PandaNode, NodePath, Camera, TextNode
from direct.particles.Particles import Particles
from direct.particles.ParticleEffect import ParticleEffect
from panda3d.core import PointLight, Spotlight
from panda3d.core import CollideMask
from panda3d.core import loadPrcFileData
from panda3d.core import *
from direct.gui.OnscreenText import OnscreenText
from direct.gui.OnscreenImage import OnscreenImage
from direct.gui.DirectButton import DirectButton
from direct.gui.DirectSlider import DirectSlider
from direct.actor.Actor import Actor
import random
import sys
import time
import os
import math
VERSION = '3.0.6'
settings = ['window-title Droid Game ' + VERSION,
'fullscreen 0']
loadPrcFileData('', settings[0]) # Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π½Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ (Π²ΠΎΠ·ΠΌΡΠΌ Π΅Π³ΠΎ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ settings)
loadPrcFileData('', settings[1]) # Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠΊΡΠ°Π½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ
# Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π³Π»Π°Π²Π½ΡΠΉ ΠΊΠ»Π°ΡΡ Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ
class DroidShooter(ShowBase):
def __init__(self):
ShowBase.__init__(self) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ Π²ΡΠ΅ ΡΠ΅Π»ΡΡ ΠΈΠ· direct
self.speed = 1800 # ΡΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ
self.GB = False # ΠΠ ΡΡΡΠ½ΠΎ-Π±Π΅Π»ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ
self.menu() # Π·Π²ΠΏΡΡΠΊ ΠΌΠ΅Π½Ρ
def menu(self):
base.enableParticles() # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΡΡΠ΅ΠΊΡ Π΄ΡΠΌΠ°
self.win.setClearColor((0, 0, 0, 1)) # ΠΠ°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ ΡΡΡΠ½ΡΠΌ. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΡΡΠΎΠΌ ΠΈΠ³ΡΠΎΠ²ΠΎΠΌ Π΄Π²ΠΈΠΆΠΊΠ΅ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ Π·Π°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΡΠΌ.
self.font = loader.loadFont('./fonts/doom_font.ttf') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΡΠΈΡΡ ΠΈΠ· ΠΈΠ³ΡΡ doom
self.inst_font = loader.loadFont('./fonts/arial.ttf') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΡΠΈΡΡ arial
self.crackSound = loader.loadMusic('./sounds/crack.wav') # Π·Π²ΡΠΊ Π²Π·ΡΡΠ²Π° ΠΊΠΎΡΠ°Π±Π»Ρ
self.shotSound = loader.loadMusic('./sounds/shot.wav') # Π·Π²ΡΠΊ Π²ΡΡΡΡΠ΅Π»Π°
self.startSound = loader.loadMusic('./sounds/started.wav') # Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ°
self.errorSound = loader.loadMusic('./sounds/error.wav') # Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ°
self.errorSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.startSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.crackSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.shotSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.startSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ
self.button_start = DirectButton(pos=(0.7, 0, 0.4), text="CTAPT",
scale=.2, pad=(.2, .2),
command=self.load_game) # ΠΊΠ½ΠΎΠΏΠΊΠ° Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ
self.gb_start = DirectButton(pos=(0.7, 0, 0.1), text="GB",
scale=.2, pad=(.2, .2),
command=self.gb_mode) # ΠΊΠ½ΠΎΠΏΠΊΠ° Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ Π² ΡΡΡΠ½ΠΎ-Π±Π΅Π»ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅
self.slider_sun = DirectSlider(pos=(0.1, 0, .75), scale=0.8, value=0.5,
command=self.set_sun_interval)
self.title = self.addTitle("Droid game " + VERSION)
# ΠΠ°ΠΏΠ΅ΡΠ°ΡΠ°Π΅ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅
self.inst1 = self.addInstructions(0.95, u"[ESC]: ΠΡΡ
ΠΎΠ΄")
self.inst2 = self.addInstructions(0.90, u"[Left Arrow]: ΠΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² Π»Π΅Π²ΠΎ")
self.inst3 = self.addInstructions(0.85, u"[Right Arrow]: ΠΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² ΠΏΡΠ°Π²ΠΎ")
self.inst4 = self.addInstructions(0.80, u"[Up Arrow]: ΠΠΏΠ΅ΡΠ΅Π΄")
self.inst5 = self.addInstructions(0.75, u"[a]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΎ")
self.inst6 = self.addInstructions(0.70, u"[d]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² Π»Π΅Π²ΠΎ")
self.inst7 = self.addInstructions(0.65, u"[Left Arrow + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst8 = self.addInstructions(0.60, u"[Right Arrow + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² ΠΏΡΠ°Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst9 = self.addInstructions(0.55, u"[a + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst10 = self.addInstructions(0.50, u"[d + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst11 = self.addInstructions(0.45, u"[space]: ΡΡΡΠ΅Π»ΡΠ±Π°")
self.inst12 = self.addInstructions(0.40, u"[s]: Π΄ΠΎΡΡΠ°ΡΡ ΡΠΎΠ½Π°ΡΠΈΠΊ")
self.inst13 = self.addInstructions(0.35, u"[w]: ΡΠ±ΡΠ°ΡΡ ΠΎΡΡΠΆΠΈΠ΅")
self.inst14 = self.addInstructions(0.30, u"[f]: ΠΏΠΎΠ»Π½ΡΠΉ ΡΠ°Π·Π³ΠΎΠ½(ΠΠΠΠ‘ΠΠ!)")
self.inst15 = self.addInstructions(0.25, u"[0]: ΠΏΠΎΠΆΠ°ΡΠΎΡΡΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°")
self.accept("escape", sys.exit) # ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ Esc Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ.
def set_sun_interval(self):
self.sun_interval = self.slider_sun.guiItem.getValue() * 100 # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ»Π°ΠΉΠ΄Π΅ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΎΠ΅ Π½Π° 500, Π΄Π° ΡΡΠ°ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½ΠΎ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΏΠ»Π΅Π²Π°ΡΡ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅Π½Ρ, ΠΈΠ±ΠΎ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ½ΡΡΠΈΡ ΠΏΡΠΎΡΡΠΎ Π½Π΅ΡΡ :)
def gb_mode(self):
'''Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠ½ΠΎΠ±Π΅Π»ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ°'''
self.GB = True
def load_game(self):
self.button_start.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ ΡΡΠ°ΡΡΠ°
self.gb_start.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ ΡΡΡΠ½ΠΎ Π±Π΅Π»ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ°.
self.title.hide() # ΡΠ΄Π°Π»ΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠ³ΡΡ
# ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
self.inst1.hide()
self.inst2.hide()
self.inst3.hide()
self.inst4.hide()
self.inst5.hide()
self.inst6.hide()
self.inst7.hide()
self.inst8.hide()
self.inst9.hide()
self.inst10.hide()
self.inst11.hide()
self.inst12.hide()
self.inst13.hide()
self.inst14.hide()
self.inst15.hide()
self.slider_sun.hide() # ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΡΠ»Π°ΠΉΠ΄Π΅Ρ ΡΠΎΠ»Π½ΡΠ°
self.keyMap = {
"left": 0, "right": 0, "forward": 0, "cam-left": 0, "cam-right": 0} # Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ»ΠΎΠ²Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΏΠΎ ΠΈΡ
Π½Π°ΠΆΠ°ΡΠΈΡ
# Π ΠΈΡΡΠ΅ΠΌ Π·Π²ΡΠ·Π΄Ρ
self.sky = loader.loadModel("./models/sky/solar_sky_sphere") # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠΎΡΠΌΠΎΡΠ°(ΡΡΠΎ ΡΡΠ΅ΡΠ°)
self.sky_tex = loader.loadTexture("./tex/stars_1k_tex.jpg") # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ΅ΠΊΡΡΡΡΡ
self.sky.setTexture(self.sky_tex, 1) # Π·Π°ΡΠ΅Π½Π΄Π΅ΡΠΈΠΌ ΡΠ΅ΠΊΡΡΡΡΡ Π½Π° Π½Π΅Π±ΠΎ
self.sky.reparentTo(render) # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π½Π΅Π±ΠΎ
self.sky.setScale(40000) # ΡΠ°ΡΡΠΈΡΠΈΠΌ Π½Π΅Π±ΠΎ Π΄ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ panda3d
self.environ = loader.loadModel("models/world/falcon.egg") # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π² blender ΠΌΠΈΡ.
self.environ.reparentTo(render) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΌΠΈΡΠ° Π² ΠΎΠΊΠ½ΠΎ
droidStartPos = (-1, 0, 1.5 ) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΡΡΠ°ΡΡΠΎΠ²ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π² ΠΌΠΈΡΠ΅.
enemyStartPos = (-6, 1, 0.5) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ°-Π΄ΡΠΎΠΈΠ΄Π°.
self.droid = Actor("models/player/seeker.egg") # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° (ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π² blender)
self.enemy = Actor("models/enemies/r2d2/r2d2.egg") # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° (ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π² blender)
self.droid.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π² Π½Π°Ρ ΠΌΠΈΡ.
self.enemy.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π² Π½Π°Ρ ΠΌΠΈΡ.
self.droid.setScale(1) # ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° 1
self.enemy.setScale(1) # ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π½Π° 1
self.droid.setPos(droidStartPos) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ΡΡ Π½Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ
self.enemy.setPos(enemyStartPos) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π½Π° ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ΡΡ Π½Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ
self.weapon = Actor('models/weapon/lightsaber.egg') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.bullet = Actor('models/weapon/bullet/bullet.egg.pz') # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΠΏΡΠ»Ρ
self.flash = Actor('models/whishlyflash/handlamp.egg') # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.weapon.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ Π² Π½Π°Ρ ΠΌΠΈΡ
self.bullet.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΏΡΠ»Ρ Π² ΠΌΠΈΡ Π½ΠΎ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΎΠ½Π° ΡΠ°ΠΌΠ° Π½Π΅ ΡΠΊΠΎΡΠΎ
self.flash.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ Π² Π½Π°Ρ ΠΌΠΈΡ
self.weapon.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΡΠΊΠΈ
self.bullet.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΠ»ΠΈ
self.flash.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΎΠ½Π°ΡΠΈΠΊΠ°
# Π²ΡΠ°ΠΆΠ΅ΡΠΊΠΈΠΉ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter = Actor('models/fighter/fighter.egg') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΡ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter.reparentTo(render) # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΈΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter.setPos(0, 90, 0) # ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 1 # ΠΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΡΠΊΠΈ
self.weapon.setPos(self.weapon_pos) # ΠΠΎΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ ΡΡΡΡ Π²ΡΡΠ΅ ΠΈΠ³ΡΠΎΠΊΠ°
self.cube = Actor('models/block/crate.egg') # Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ Π±Π»ΠΎΠΊ
self.cube.reparentTo(render)
self.cube.setPos(0, -0, 0) # ΠΏΠΎΠ·ΠΈΡΠΈΡ ΡΡΠΈΠΊΠ°
self.cube.setScale(0.7)
self.cube.hprInterval(1.5, (0, 360, 360)).loop()
self.Intervalcube = self.cube.posInterval(13,
Point3(0, -500, 0),
startPos=Point3(0, 10, 0))
self.Intervalcube.loop()
self.spotlight = camera.attachNewNode(Spotlight("spotlight")) # ΠΠΎΠ½ΡΠΈΠ³ΠΈ ΡΠΎΠ½Π°ΡΠΈΠΊΠ°
self.spotlight.node().setColor((.3, .3, .3, 1))
self.spotlight.node().setSpecularColor((0, 0, 0, 1))
self.floater = NodePath(PandaNode("floater"))
self.floater.reparentTo(self.droid)
self.floater.setZ(2.0)
self.accept("escape", sys.exit) # ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ Esc Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ.
self.accept("arrow_left", self.setKey, ["left", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π»Π΅Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ
self.accept("arrow_right", self.setKey, ["right", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΏΡΠ°Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²ΠΏΡΠ°Π²ΠΎ
self.accept("arrow_up", self.setKey, ["forward", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΏΠ΅ΡΡΠ΄ - ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("a", self.setKey, ["cam-left", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ a - ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΠΈ
self.accept("d", self.setKey, ["cam-right", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ s - ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΠΈ
self.accept("arrow_left-up", self.setKey, ["left", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+Π²Π»Π΅Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("arrow_right-up", self.setKey, ["right", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+ΠΏΡΠ°Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²ΠΏΡΠ°Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("arrow_up-up", self.setKey, ["forward", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+Π²Π²Π΅ΡΡ - ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("a-up", self.setKey, ["cam-left", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ a+Π²ΠΏΠ΅ΡΡΠ΄ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²Π»Π΅Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("d-up", self.setKey, ["cam-right", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ s+Π²ΠΏΠ΅ΡΡΠ΄ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΏΡΠ°Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("space", self.shot) # ΠΏΡΠΈ ΠΏΡΠΎΠ±Π΅Π»Π΅ ΡΡΡΠ΅Π»ΡΠ΅ΠΌ
self.accept("s", self.toggleLights, [[self.spotlight]]) # ΠΠΊΠ»ΡΡΠΈΡΡ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.accept("w", self.weapon_hide) # ΠΏΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ w - ΡΠ±Π΅ΡΡΠΌ ΠΎΡΡΠΆΠΈΠ΅.
base.enableParticles() # ΠΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΡΠΌΠ°
self.t = loader.loadModel("models/weapon/lightsaber.egg") # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ Π΅ΡΡ ΠΎΡΡΠΆΠΈΠ΅
self.t.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ Π² Π½Π°Ρ ΠΌΠΈΡ
self.p = ParticleEffect() # ΠΠΊΠ»ΡΡΠΈΠΌ ΡΡΡΠ΅ΠΊΡ Π΄ΡΠΌΠ°
self.accept('f', self.particle_start) # ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ f(ΠΎΡ force) - Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ°ΠΉΠ» Π΄ΡΠΌΠ° ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ Π² ΠΊΠΎΠ½ΡΠΈΠ³ ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠ° Π°Π½ΠΈΠΌΠ°ΡΠΈΡ ΡΡΠ°Π»Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΄ΡΠΌΠ°
self.accept('0', self.fountain) # ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ f+o(fountain) Π²ΠΊΠ»ΡΡΠΈΠΌ ΠΏΠΎΠΆΠ°ΡΠΎΡΡΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ
taskMgr.add(self.move, "moveTask") # ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π·Π°Π΄Π°ΡΡ Π² Π½Π°Ρ Π΄Π²ΠΈΠΆΠΎΠΊ
self.isMoving = False # Π‘ΡΠ°Π²ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ isMoving Π½Π° False(ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΌΠ΅Π½ΡΡΡ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅) ΡΡΠΎΠ±Ρ ΠΈΠ³ΡΠΎΠΊ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΡΠΎΡΠ».
# ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΡΠ²Π΅Ρ Π±ΡΠ» ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π²ΡΠΊΠ»ΡΡΠ΅Π½.
self.disableMouse() # ΠΡΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· ΠΌΡΡΠΊΡ
self.camera.setPos(self.droid.getX(), self.droid.getY() + 1, 3) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΡΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ³ΡΠΎΠΊΠ°
self.black_light() # Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π²ΡΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ²Π΅Ρ
self.state = 100 # Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠΎΡΠ°Π±Π»Ρ
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.hide_weapon = False # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΎΡΡΠΆΠΈΠ΅ Π½Π΅ ΡΠ±ΡΠ°Π½ΠΎ
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 5)
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 1)
self.motor_pos1 = 25.238849639892578, 8.962211608886719, 1.5 # ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΌΠΎΡΠΎΡΠ°
self.motor_pos2 = -20.676218032836914, 10.55816650390625, 1.5 # ΠΏΠΎΠ·ΠΈΡΠΈΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΡΠΎΡΠ°
self.motor1 = self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.motor_pos1) # ΠΌΠΎΡΠΎΡ 1
self.motor2 = self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.motor_pos2) # ΠΌΠΎΡΠΎΡ 2
self.state_info2 = OnscreenText(text='', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.force = False # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ Π½Π΅ ΡΠ°Π·Π³ΠΎΠ½ΡΠ»ΠΈΡΡ
# ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ ΠΊΠΎΡΠ°Π±Π»Ρ(ΠΎΠ½ Ρ Π½Π°Ρ ΠΊΠ°ΠΊ Π³Π»Π°Π²Π½Π°Ρ ΠΊΠ°ΡΡΠ°).
self.cTrav = CollisionTraverser()
pusher = CollisionHandlerPusher()
environCenter = self.environ.getBounds().getCenter()
environRad = self.environ.getBounds().getRadius()
cNode = CollisionNode("environment")
cNode.addSolid(CollisionInvSphere(environCenter, environRad))
environC = self.environ.attachNewNode(cNode)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ Π΄ΡΠΎΠΈΠ΄Π°.
droidCenter = self.droid.getBounds().getCenter()
droidRad = self.droid.getBounds().getRadius()
cNode = CollisionNode("droid")
cNode.addSolid(CollisionSphere(droidCenter, droidRad))
droidC = self.droid.attachNewNode(cNode)
pusher.addCollider(droidC, self.droid)
self.cTrav.addCollider(droidC, pusher)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ°.
enemyCenter = self.enemy.getBounds().getCenter()
enemyRad = self.enemy.getBounds().getRadius()
cNode = CollisionNode("enemy")
cNode.addSolid(CollisionSphere(enemyCenter, enemyRad))
enemyC = self.enemy.attachNewNode(cNode)
pusher.addCollider(enemyC, self.enemy)
self.cTrav.addCollider(enemyC, pusher)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ Π²ΡΠ°ΠΆΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ.
fighterCenter = self.fighter.getBounds().getCenter()
fighterRad = self.fighter.getBounds().getRadius()
cNode = CollisionNode("fighter")
cNode.addSolid(CollisionSphere(fighterCenter, fighterRad))
fighterC = self.fighter.attachNewNode(cNode)
pusher.addCollider(fighterC, self.fighter)
self.cTrav.addCollider(fighterC, pusher)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ ΠΏΡΠ»ΠΈ.
bulletCenter = self.bullet.getBounds().getCenter()
bulletRad = self.bullet.getBounds().getRadius()
cNode = CollisionNode("bullet")
cNode.addSolid(CollisionSphere(bulletCenter, bulletRad))
bulletC = self.bullet.attachNewNode(cNode)
bulletCenter = self.bullet.getBounds().getCenter()
bulletRad = self.bullet.getBounds().getRadius()
cNode = CollisionNode("bullet")
cNode.addSolid(CollisionSphere(bulletCenter, bulletRad))
bulletC = self.bullet.attachNewNode(cNode)
pusher.addCollider(bulletC, self.bullet)
self.cTrav.addCollider(bulletC, pusher)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ ΠΏΡΡΠΊΠΈ. Π― Π±Ρ Π½Π΅ ΡΠΊΠ°Π·Π°Π», ΡΡΠΎ ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΡ, ΡΠΊΠΎΡΠ΅Π΅ ΡΡΠΎ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΠΎΡΡΠΈ
weaponCenter = self.weapon.getBounds().getCenter()
weaponRad = self.weapon.getBounds().getRadius()
cNode = CollisionNode("weapon")
cNode.addSolid(CollisionSphere(weaponCenter, weaponRad))
weaponC = self.weapon.attachNewNode(cNode)
pusher.addCollider(weaponC, self.weapon)
self.cTrav.addCollider(weaponC, pusher)
# ΡΠΎΠ»Π½ΡΠ΅(Π½ΠΎΠ²Π°Ρ ΠΌΠ΅Ρ
Π°Π½ΠΈΠΊΠ° ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΡ)
sun = DirectionalLight("sun")
sun.set_color_temperature(6000)
sun.color = sun.color * 4
sun_path = render.attach_new_node(sun)
sun_path.set_pos(10, -10, -10)
sun_path.look_at(0, 0, 0)
sun_path.hprInterval(self.sun_interval, (sun_path.get_h(), sun_path.get_p() - 360, sun_path.get_r()), bakeInStart=True).loop()
render.set_light(sun_path)
# ΠΡΠ»ΠΈ ΠΈΠ³ΡΠΎΠΊ Π·Π°Ρ
ΠΎΡΠ΅Π» ΠΏΠΎΠΈΠ³ΡΠ°ΡΡ Π² ΡΡΡΠ½ΠΎΠ±Π΅Π»ΡΡ ΠΈΠ³ΡΡ, ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΡΡΠΎ
if self.GB :
render.set_shader(Shader.load(Shader.SL_GLSL, "lighting.vert", "lighting.frag")) # ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ΅ΠΉΠ΄Π΅ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ!
def fight_force(self):
# ΡΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π·Π° Π½Π°ΡΠΈΠΌ ΠΊΠΎΡΠ°Π±Π»ΡΠΌ(ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Ρ ΡΠ΄Π΅Π»Π°Π» ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π·Π°ΠΆΠΈΠΌΠ°Π» Π½Π°Ρ(Π»Π΅ΡΠ°Π» Π² Π½Π°ΡΠ΅ΠΌ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ΅)) ΠΈ Π·Π°ΠΆΠΈΠΌΠ°Π΅Ρ ΠΎΠ½ ΡΠ΅Π°Π»ΡΠ½ΠΎ, ΡΠ±Π»ΠΈΠΆΠ°Ρ ΠΊ Π½Π°ΠΌ ΡΠ²ΠΎΠΉ ΠΊΠ²Π°Π΄ΡΠ°Ρ
self.fighter.setY(self.fighter.getY() - self.speed)
self.fighter.setX(self.fighter.getX() - 10)
print(self.fighter.getX())
def loadParticleConfig(self, filename, pos):
self.p.cleanup()
self.p = ParticleEffect()
self.p.loadConfig(Filename(filename))
self.p.start(self.t)
self.p.setPos(pos)
def particle_start(self):
self.force = True # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΌΡ ΡΠΆΠ΅ ΡΠ°Π·Π³ΠΎΠ½ΡΠ»ΠΈΡΡ
# ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.environ.setY(self.environ.getY() - self.speed) # Π½Π΅ΡΡΠΌΡΡ Π²ΠΏΡΠ°Π²ΠΎ
self.droid.setY(self.droid.getY() - self.speed) # ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ Π΄ΡΠΎΠΈΠ΄Π° Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.enemy.setY(self.enemy.getY() - self.speed) # ΡΠ΄ΡΠΈΠ³Π°Π΅ΠΌ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.weapon.setY(self.weapon.getY() - self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.flash.setY(self.flash.getY() - self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.cube.setY(self.cube.getY() - self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΡΠΈΠΊ
self.fight_force()
self.state -= 1 # ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΠΌΠ΅Π½ΡΡΠ΅ ΠΎΡΠΊΠΎΠ²
self.state_info.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΎΡΠΊΠΈ
if self.state != 10 and self.state > 10:
self.state_info.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΠΆΠΈΠ·Π½ΡΡ
ΠΊΠΎΡΠ°Π±Π»Ρ
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam/steam.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ Π½Π΅ΠΈΡΠΏΡΠ°Π²Π΅Π½', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
else:
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam_critic/steam.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
if self.state < 10:
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='ΠΏΠ°Π΄Π°Π΅ΠΌ!', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
def fountain(self):
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΡΠ΅ΠΊΡΡ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ
if self.force:
if self.state != 100:
self.state += 1
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5) + 500, random.randrange(0, 1)
self.loadParticleConfig('special_effects/fountain/fountain.ptf', self.fountain_pos)
else :
if self.state != 100:
self.state += 1
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 1)
self.loadParticleConfig('special_effects/fountain/fountain.ptf', self.fountain_pos)
def black_light(self):
# ΠΡΠΊΠ»ΡΡΠ΅Π½ΡΠΉ ΡΠ²Π΅Ρ
ambientLight = AmbientLight("ambientLight")
ambientLight.setColor((0, 0, 0, 1))
directionalLight = DirectionalLight("directionalLight")
directionalLight.setDirection((-5, -5, -5))
directionalLight.setColor((1, 1, 1, 1))
directionalLight.setSpecularColor((1, 1, 1, 1))
render.setLight(render.attachNewNode(ambientLight))
render.setLight(render.attachNewNode(directionalLight))
def weapon_hide(self):
# Π£Π±ΡΠ°ΡΡ ΠΎΡΡΠΆΠΈΠ΅
self.hide_weapon = True
self.weapon.hide()
def toggleLights(self, lights):
# Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΠ΅
if self.hide_weapon:
for light in lights:
if render.hasLight(light):
render.clearLight(light)
else:
render.setLight(light)
self.flash.setPos(self.weapon_pos)
else:
return
def shot(self):
dt = globalClock.getDt() + 0.5 # CΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
if not self.hide_weapon : # Π΅ΡΠ»ΠΈ ΠΎΡΡΠΆΠΈΠ΅ ΡΠ±ΡΠ°Π½ΠΎ ΡΠΎ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΡΠ΅Π»ΡΡΡ
self.shotSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π²ΡΡΡΡΠ΅Π»Π°
self.bullet.setPos(self.weapon_pos) # ΠΡΠ»Ρ Π±ΡΠ΄Π΅Ρ ΡΠΏΠ°Π²Π½ΠΈΡΡΡ Π²Π½ΡΡΡΠΈ ΠΏΡΡΠΊΠΈ
self.bullet.setY(self.bullet, -11 * dt) # Π‘Π΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΏΡΠ»Ρ Π½Π° ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ Π²ΠΏΠ΅ΡΡΠ΄
def check_loss(self):
if self.state == 0: # Π΅ΡΠ»ΠΈ ΠΆΠΈΠ·Π½Π΅ΠΉ Ρ ΠΊΠΎΡΠ°Π±Π»Ρ Π½Π΅ ΠΎΡΡΠ°Π»ΠΎΡΡ
self.black_light() # Π²ΠΊΠ»ΡΡΠΈΠΌ ΡΡΡΠ½ΡΠΉ ΡΠ²Π΅Ρ
self.weapon_hide() # ΡΠ±Π΅ΡΡΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.info = OnscreenText(text='ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅', style=1, font=self.font,
fg=(1,1,1,1),
pos=(-1.3, -0.5), align=TextNode.ALeft, scale=0.3) # Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΎ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠΈ
self.crackSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π²Π·ΡΡΠ²Π°
def setKey(self, key, value):
self.keyMap[key] = value # ΠΠ΅Π»Π°Π΅ΠΌ ΠΌΠ΅Ρ
aΠ½uΠ·ΠΌ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ.
def move(self, task):
''' ΠΠ΅Π»Π°Π΅ΠΌ ΡΡΡΠ½ΠΊΡΠΈΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° '''
dt = globalClock.getDt() - .005 # CΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
# ΠΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π²Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΡΠ°Π²ΠΎ
if self.keyMap["cam-left"]:
self.camera.setX(self.camera, -20 * dt) # ΠΠ΅Π½ΡΠ΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΊΠ° ΠΊΠ°ΠΌΠ΅ΡΡ ΠΏΠΎ ΠΈΠΊΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈΠ»ΡΠ·ΠΈΡ ΠΏΠΎΠ²ΠΎΡΠΎΡΠ° ΡΠ³Π»Π° Π»ΡΡΠ°. ΠΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΊΠ°ΠΌΠ΅ΡΠ° ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ.
if self.keyMap["cam-right"]:
self.camera.setX(self.camera, +20 * dt) # Π’ΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ Π½Π°Π²Π΅ΡΡ
Ρ.
startpos = self.droid.getPos() # Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ΄ΠΎΠ±Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ³ΡΠΎΠΊΠ°
if self.keyMap["left"]:
self.droid.setH(self.droid.getH() + 300 * dt)
self.enemy.setY(self.enemy, 1 * dt)
if self.keyMap["right"]:
self.droid.setH(self.droid.getH() - 300 * dt)
self.enemy.setY(self.enemy, -1 * dt)
if self.keyMap["forward"]:
self.droid.setY(self.droid, -25 * dt)
self.enemy.setX(self.enemy, 1 * dt)
# Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ±ΡΠ°Π½ΠΎ ΠΎΡΡΠΆΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ
if not self.hide_weapon:
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 3
self.weapon.setPos(self.weapon_pos) # ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΡΠΊΠΈ
else:
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 3
self.flash.setPos(self.weapon_pos)
camvec = self.droid.getPos() - self.camera.getPos() # Π²Π΅ΠΊΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ
camvec.setZ(0) # 0 Π²ΡΡΠΎΡΠ° Π²Π΅ΠΊΡΠΎΡΠ°
camdist = camvec.length() # Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΎΡ Π΄ΡΠΎΠΈΠ΄Π°
camvec.normalize() # Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π²Π΅ΠΊΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ
if camdist > 10.0: # Π΅ΡΠ»ΠΈ Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅ 10, ΡΠΎ ΡΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π·Π° Π΄ΡΠΎΠΎΠΈΠ΄ΠΎΠΌ
self.camera.setPos(self.camera.getPos() + camvec * (camdist - 10))
camdist = 10.0 # ΡΠ΅ΠΏΠ΅ΡΡ Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠ½ΠΎΠ²Π° 10
if camdist < 5.0: # Π΅ΡΠ»ΠΈ Π΄ΠΈΡΡΠ°Π³ΡΡΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΌΠ΅Π½ΡΡΠ΅ 5, ΡΠΎ...
self.camera.setPos(self.camera.getPos() - camvec * (5 - camdist)) # ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ
camdist = 5.0 # Π²ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ
self.camera.lookAt(self.floater) # Π²ΠΎΡ ΠΈ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΠ»ΡΡ Π½Π°Ρ floater
return task.cont # Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π·Π°Π΄Π°ΡΡ
def addInstructions(self, pos, msg):
return OnscreenText(text=msg, style=1, fg=(1,1,1,1), font=self.inst_font, pos=(-1.3, pos), align=TextNode.ALeft, scale = .04, shadow=(0,0,0,1)) # Π€ΡΠ½ΠΊΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΏΡΠ°Π²Π»ΡΡΡ
def addTitle(self, text):
return OnscreenText(text=text, style=1, fg=(1, 1, 1, 1), scale=0.2,
parent=base.a2dBottomRight, align=TextNode.ARight,
pos=(-0.1, 0.09), shadow=(0, 0, 0, 1), font=self.font) # Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Ρ ΡΡΠΈΡΡΠΎΠΌ ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΠ΅ΠΉ
droid = DroidShooter() # Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ
droid.run() # 3Π°ΠΏΡΡΡΠΈΠΌ ΠΈΠ³ΡΡ
# ΡΠ°Π·ΡΠΎΠ±ΠΎΡΡΠΈΠΊΠΈ :
# ΠΠ»Π°Π²Π½ΡΠΉ Π°Π²ΡΠΎΡ : ma3rx
# ΠΠΎΠΌΠΎΡΠ½ΠΈΠΊ : panda3dmastercoder( ΠΏΡΠΈΡΠΎΠ΅Π΄Π΅Π½ΠΈΠ»ΡΡ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ 31 ΡΠ½Π²Π°ΡΡ, 2021 Π³ΠΎΠ΄Π°, 12:??)
# Π Π΅ΠΊΠ»Π°ΠΌΡΠΈΠΊ : rdb (Π½Π°ΠΏΠΈΡΠ°Π» ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΎΡΡΠΌΠ΅ 6 ΡΠ΅Π²ΡΠ°Π»Ρ 2021 Π³ΠΎΠ΄Π°, 20:11)
New screenshot :
All Structure :
./models :
./models/world Now, download panda3d art from https://www.panda3d.org/download/noversion/art-gallery.zip
Go to the cat-environment folder. In it you will see a millenium falcon folder. Take all the files from it and put it in the directory ./models/world)
./models/block : block.zip (269.6 KB)
./models/enemies : enemies.zip (381.4 KB)
./models/fighter : fighter.zip (36.9 KB)
./models/player : player.zip (644.6 KB)
./models/sky : sky.zip (12.5 KB)
./models/weapon : weapon.zip (234.3 KB)
./models/whishlyflash : whishlyflash.zip
./fonts : fonts.zip (192.5 KB)
./sounds : sounds.zip (1.8 MB)
./special_effects : special_effects.zip (19.3 KB)
./tex : tex.zip (95.1 KB)
droid.py source code :
#!/usr/bin/env python
# -*- coding: utf_8 -*-
# Π‘ΠΎΠ·Π΄Π°Π½ΠΎ : 22 ΡΠΈΡΠ»ΠΎ, ΡΠ½Π²Π°ΡΡ, 2021 Π³ΠΎΠ΄
# ΠΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ
from direct.showbase.ShowBase import ShowBase
from panda3d.core import CollisionTraverser, CollisionNode
from panda3d.core import CollisionHandlerPusher, CollisionSphere, CollisionInvSphere
from panda3d.core import Filename, AmbientLight, DirectionalLight
from panda3d.core import PandaNode, NodePath, Camera, TextNode
from direct.particles.Particles import Particles
from direct.particles.ParticleEffect import ParticleEffect
from panda3d.core import PointLight, Spotlight
from panda3d.core import CollideMask
from panda3d.core import loadPrcFileData
from panda3d.core import *
from direct.gui.OnscreenText import OnscreenText
from direct.gui.OnscreenImage import OnscreenImage
from direct.gui.DirectButton import DirectButton
from direct.gui.DirectSlider import DirectSlider
from direct.actor.Actor import Actor
import random
import sys
import time
import os
import math
VERSION = '3.0.6'
settings = ['window-title Droid Game ' + VERSION,
'fullscreen 0']
loadPrcFileData('', settings[0]) # Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π½Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ (Π²ΠΎΠ·ΠΌΡΠΌ Π΅Π³ΠΎ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ settings)
loadPrcFileData('', settings[1]) # Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠΊΡΠ°Π½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ
# Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π³Π»Π°Π²Π½ΡΠΉ ΠΊΠ»Π°ΡΡ Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ
class DroidShooter(ShowBase):
def __init__(self):
ShowBase.__init__(self) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ Π²ΡΠ΅ ΡΠ΅Π»ΡΡ ΠΈΠ· direct
self.speed = 1800 # ΡΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ
self.GB = False # ΠΠ ΡΡΡΠ½ΠΎ-Π±Π΅Π»ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ
self.menu() # Π·Π²ΠΏΡΡΠΊ ΠΌΠ΅Π½Ρ
def menu(self):
base.enableParticles() # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΡΡΠ΅ΠΊΡ Π΄ΡΠΌΠ°
self.win.setClearColor((0, 0, 0, 1)) # ΠΠ°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ ΡΡΡΠ½ΡΠΌ. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΡΡΠΎΠΌ ΠΈΠ³ΡΠΎΠ²ΠΎΠΌ Π΄Π²ΠΈΠΆΠΊΠ΅ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ Π·Π°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΡΠΌ.
self.font = loader.loadFont('./fonts/doom_font.ttf') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΡΠΈΡΡ ΠΈΠ· ΠΈΠ³ΡΡ doom
self.inst_font = loader.loadFont('./fonts/arial.ttf') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΡΠΈΡΡ arial
self.crackSound = loader.loadMusic('./sounds/crack.wav') # Π·Π²ΡΠΊ Π²Π·ΡΡΠ²Π° ΠΊΠΎΡΠ°Π±Π»Ρ
self.shotSound = loader.loadMusic('./sounds/shot.wav') # Π·Π²ΡΠΊ Π²ΡΡΡΡΠ΅Π»Π°
self.startSound = loader.loadMusic('./sounds/started.wav') # Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ°
self.errorSound = loader.loadMusic('./sounds/error.wav') # Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ°
self.errorSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.startSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.crackSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.shotSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.startSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ
self.button_start = DirectButton(pos=(0.7, 0, 0.4), text="CTAPT",
scale=.2, pad=(.2, .2),
command=self.load_game) # ΠΊΠ½ΠΎΠΏΠΊΠ° Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ
self.gb_start = DirectButton(pos=(0.7, 0, 0.1), text="GB",
scale=.2, pad=(.2, .2),
command=self.gb_mode) # ΠΊΠ½ΠΎΠΏΠΊΠ° Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ Π² ΡΡΡΠ½ΠΎ-Π±Π΅Π»ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅
self.slider_sun = DirectSlider(pos=(0.1, 0, .75), scale=0.8, value=0.5,
command=self.set_sun_interval)
self.title = self.addTitle("Droid game " + VERSION)
# ΠΠ°ΠΏΠ΅ΡΠ°ΡΠ°Π΅ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅
self.inst1 = self.addInstructions(0.95, u"[ESC]: ΠΡΡ
ΠΎΠ΄")
self.inst2 = self.addInstructions(0.90, u"[Left Arrow]: ΠΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² Π»Π΅Π²ΠΎ")
self.inst3 = self.addInstructions(0.85, u"[Right Arrow]: ΠΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² ΠΏΡΠ°Π²ΠΎ")
self.inst4 = self.addInstructions(0.80, u"[Up Arrow]: ΠΠΏΠ΅ΡΠ΅Π΄")
self.inst5 = self.addInstructions(0.75, u"[a]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΎ")
self.inst6 = self.addInstructions(0.70, u"[d]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² Π»Π΅Π²ΠΎ")
self.inst7 = self.addInstructions(0.65, u"[Left Arrow + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst8 = self.addInstructions(0.60, u"[Right Arrow + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² ΠΏΡΠ°Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst9 = self.addInstructions(0.55, u"[a + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst10 = self.addInstructions(0.50, u"[d + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst11 = self.addInstructions(0.45, u"[space]: ΡΡΡΠ΅Π»ΡΠ±Π°")
self.inst12 = self.addInstructions(0.40, u"[s]: Π΄ΠΎΡΡΠ°ΡΡ ΡΠΎΠ½Π°ΡΠΈΠΊ")
self.inst13 = self.addInstructions(0.35, u"[w]: ΡΠ±ΡΠ°ΡΡ ΠΎΡΡΠΆΠΈΠ΅")
self.inst14 = self.addInstructions(0.30, u"[f]: ΠΏΠΎΠ»Π½ΡΠΉ ΡΠ°Π·Π³ΠΎΠ½(ΠΠΠΠ‘ΠΠ!)")
self.inst15 = self.addInstructions(0.25, u"[0]: ΠΏΠΎΠΆΠ°ΡΠΎΡΡΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°")
self.accept("escape", sys.exit) # ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ Esc Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ.
def set_sun_interval(self):
self.sun_interval = self.slider_sun.guiItem.getValue() * 100 # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ»Π°ΠΉΠ΄Π΅ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΎΠ΅ Π½Π° 500, Π΄Π° ΡΡΠ°ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½ΠΎ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΏΠ»Π΅Π²Π°ΡΡ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅Π½Ρ, ΠΈΠ±ΠΎ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ½ΡΡΠΈΡ ΠΏΡΠΎΡΡΠΎ Π½Π΅ΡΡ :)
def gb_mode(self):
'''Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠ½ΠΎΠ±Π΅Π»ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ°'''
self.GB = True
def load_game(self):
self.button_start.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ ΡΡΠ°ΡΡΠ°
self.gb_start.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ ΡΡΡΠ½ΠΎ Π±Π΅Π»ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ°.
self.title.hide() # ΡΠ΄Π°Π»ΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠ³ΡΡ
# ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
self.inst1.hide()
self.inst2.hide()
self.inst3.hide()
self.inst4.hide()
self.inst5.hide()
self.inst6.hide()
self.inst7.hide()
self.inst8.hide()
self.inst9.hide()
self.inst10.hide()
self.inst11.hide()
self.inst12.hide()
self.inst13.hide()
self.inst14.hide()
self.inst15.hide()
self.slider_sun.hide() # ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΡΠ»Π°ΠΉΠ΄Π΅Ρ ΡΠΎΠ»Π½ΡΠ°
self.keyMap = {
"left": 0, "right": 0, "forward": 0, "cam-left": 0, "cam-right": 0} # Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ»ΠΎΠ²Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΏΠΎ ΠΈΡ
Π½Π°ΠΆΠ°ΡΠΈΡ
# Π ΠΈΡΡΠ΅ΠΌ Π·Π²ΡΠ·Π΄Ρ
self.sky = loader.loadModel("./models/sky/solar_sky_sphere") # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠΎΡΠΌΠΎΡΠ°(ΡΡΠΎ ΡΡΠ΅ΡΠ°)
self.sky_tex = loader.loadTexture("./tex/stars_1k_tex.jpg") # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ΅ΠΊΡΡΡΡΡ
self.sky.setTexture(self.sky_tex, 1) # Π·Π°ΡΠ΅Π½Π΄Π΅ΡΠΈΠΌ ΡΠ΅ΠΊΡΡΡΡΡ Π½Π° Π½Π΅Π±ΠΎ
self.sky.reparentTo(render) # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π½Π΅Π±ΠΎ
self.sky.setScale(40000) # ΡΠ°ΡΡΠΈΡΠΈΠΌ Π½Π΅Π±ΠΎ Π΄ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ panda3d
self.environ = loader.loadModel("models/world/falcon.egg") # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π² blender ΠΌΠΈΡ.
self.environ.reparentTo(render) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΌΠΈΡΠ° Π² ΠΎΠΊΠ½ΠΎ
droidStartPos = (-1, 0, 1.5 ) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΡΡΠ°ΡΡΠΎΠ²ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π² ΠΌΠΈΡΠ΅.
enemyStartPos = (-6, 1, 0.5) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ°-Π΄ΡΠΎΠΈΠ΄Π°.
self.droid = Actor("models/player/seeker.egg") # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° (ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π² blender)
self.enemy = Actor("models/enemies/r2d2/r2d2.egg") # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° (ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π² blender)
self.droid.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π² Π½Π°Ρ ΠΌΠΈΡ.
self.enemy.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π² Π½Π°Ρ ΠΌΠΈΡ.
self.droid.setScale(1) # ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° 1
self.enemy.setScale(1) # ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π½Π° 1
self.droid.setPos(droidStartPos) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ΡΡ Π½Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ
self.enemy.setPos(enemyStartPos) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π½Π° ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ΡΡ Π½Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ
self.weapon = Actor('models/weapon/lightsaber.egg') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.bullet = Actor('models/weapon/bullet/bullet.egg.pz') # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΠΏΡΠ»Ρ
self.flash = Actor('models/whishlyflash/handlamp.egg') # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.weapon.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ Π² Π½Π°Ρ ΠΌΠΈΡ
self.bullet.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΏΡΠ»Ρ Π² ΠΌΠΈΡ Π½ΠΎ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΎΠ½Π° ΡΠ°ΠΌΠ° Π½Π΅ ΡΠΊΠΎΡΠΎ
self.flash.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ Π² Π½Π°Ρ ΠΌΠΈΡ
self.weapon.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΡΠΊΠΈ
self.bullet.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΠ»ΠΈ
self.flash.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΎΠ½Π°ΡΠΈΠΊΠ°
# Π²ΡΠ°ΠΆΠ΅ΡΠΊΠΈΠΉ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter = Actor('models/fighter/fighter.egg') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΡ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter.reparentTo(render) # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΈΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter.setPos(0, 90, 0) # ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 1 # ΠΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΡΠΊΠΈ
self.weapon.setPos(self.weapon_pos) # ΠΠΎΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ ΡΡΡΡ Π²ΡΡΠ΅ ΠΈΠ³ΡΠΎΠΊΠ°
self.cube = Actor('models/block/crate.egg') # Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ Π±Π»ΠΎΠΊ
self.cube.reparentTo(render)
self.cube.setPos(0, -0, 0) # ΠΏΠΎΠ·ΠΈΡΠΈΡ ΡΡΠΈΠΊΠ°
self.cube.setScale(0.7)
self.cube.hprInterval(1.5, (0, 360, 360)).loop()
self.Intervalcube = self.cube.posInterval(13,
Point3(0, -500, 0),
startPos=Point3(0, 10, 0))
self.Intervalcube.loop()
self.spotlight = camera.attachNewNode(Spotlight("spotlight")) # ΠΠΎΠ½ΡΠΈΠ³ΠΈ ΡΠΎΠ½Π°ΡΠΈΠΊΠ°
self.spotlight.node().setColor((.3, .3, .3, 1))
self.spotlight.node().setSpecularColor((0, 0, 0, 1))
self.floater = NodePath(PandaNode("floater"))
self.floater.reparentTo(self.droid)
self.floater.setZ(2.0)
self.accept("escape", sys.exit) # ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ Esc Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ.
self.accept("arrow_left", self.setKey, ["left", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π»Π΅Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ
self.accept("arrow_right", self.setKey, ["right", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΏΡΠ°Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²ΠΏΡΠ°Π²ΠΎ
self.accept("arrow_up", self.setKey, ["forward", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΏΠ΅ΡΡΠ΄ - ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("a", self.setKey, ["cam-left", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ a - ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΠΈ
self.accept("d", self.setKey, ["cam-right", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ s - ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΠΈ
self.accept("arrow_left-up", self.setKey, ["left", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+Π²Π»Π΅Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("arrow_right-up", self.setKey, ["right", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+ΠΏΡΠ°Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²ΠΏΡΠ°Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("arrow_up-up", self.setKey, ["forward", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+Π²Π²Π΅ΡΡ - ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("a-up", self.setKey, ["cam-left", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ a+Π²ΠΏΠ΅ΡΡΠ΄ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²Π»Π΅Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("d-up", self.setKey, ["cam-right", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ s+Π²ΠΏΠ΅ΡΡΠ΄ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΏΡΠ°Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("space", self.shot) # ΠΏΡΠΈ ΠΏΡΠΎΠ±Π΅Π»Π΅ ΡΡΡΠ΅Π»ΡΠ΅ΠΌ
self.accept("s", self.toggleLights, [[self.spotlight]]) # ΠΠΊΠ»ΡΡΠΈΡΡ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.accept("w", self.weapon_hide) # ΠΏΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ w - ΡΠ±Π΅ΡΡΠΌ ΠΎΡΡΠΆΠΈΠ΅.
base.enableParticles() # ΠΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΡΠΌΠ°
self.t = loader.loadModel("models/weapon/lightsaber.egg") # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ Π΅ΡΡ ΠΎΡΡΠΆΠΈΠ΅
self.t.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ Π² Π½Π°Ρ ΠΌΠΈΡ
self.p = ParticleEffect() # ΠΠΊΠ»ΡΡΠΈΠΌ ΡΡΡΠ΅ΠΊΡ Π΄ΡΠΌΠ°
self.accept('f', self.particle_start) # ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ f(ΠΎΡ force) - Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ°ΠΉΠ» Π΄ΡΠΌΠ° ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ Π² ΠΊΠΎΠ½ΡΠΈΠ³ ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠ° Π°Π½ΠΈΠΌΠ°ΡΠΈΡ ΡΡΠ°Π»Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΄ΡΠΌΠ°
self.accept('0', self.fountain) # ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ f+o(fountain) Π²ΠΊΠ»ΡΡΠΈΠΌ ΠΏΠΎΠΆΠ°ΡΠΎΡΡΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ
taskMgr.add(self.move, "moveTask") # ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π·Π°Π΄Π°ΡΡ Π² Π½Π°Ρ Π΄Π²ΠΈΠΆΠΎΠΊ
self.isMoving = False # Π‘ΡΠ°Π²ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ isMoving Π½Π° False(ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΌΠ΅Π½ΡΡΡ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅) ΡΡΠΎΠ±Ρ ΠΈΠ³ΡΠΎΠΊ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΡΠΎΡΠ».
# ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΡΠ²Π΅Ρ Π±ΡΠ» ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π²ΡΠΊΠ»ΡΡΠ΅Π½.
self.disableMouse() # ΠΡΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· ΠΌΡΡΠΊΡ
self.camera.setPos(self.droid.getX(), self.droid.getY() + 1, 3) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΡΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ³ΡΠΎΠΊΠ°
self.black_light() # Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π²ΡΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ²Π΅Ρ
self.state = 100 # Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠΎΡΠ°Π±Π»Ρ
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.hide_weapon = False # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΎΡΡΠΆΠΈΠ΅ Π½Π΅ ΡΠ±ΡΠ°Π½ΠΎ
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 5)
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 1)
self.motor_pos1 = 25.238849639892578, 8.962211608886719, 1.5 # ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΌΠΎΡΠΎΡΠ°
self.motor_pos2 = -20.676218032836914, 10.55816650390625, 1.5 # ΠΏΠΎΠ·ΠΈΡΠΈΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΡΠΎΡΠ°
self.motor1 = self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.motor_pos1) # ΠΌΠΎΡΠΎΡ 1
self.motor2 = self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.motor_pos2) # ΠΌΠΎΡΠΎΡ 2
self.state_info2 = OnscreenText(text='', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.force = False # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ Π½Π΅ ΡΠ°Π·Π³ΠΎΠ½ΡΠ»ΠΈΡΡ
# ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ ΠΊΠΎΡΠ°Π±Π»Ρ(ΠΎΠ½ Ρ Π½Π°Ρ ΠΊΠ°ΠΊ Π³Π»Π°Π²Π½Π°Ρ ΠΊΠ°ΡΡΠ°).
self.cTrav = CollisionTraverser()
pusher = CollisionHandlerPusher()
environCenter = self.environ.getBounds().getCenter()
environRad = self.environ.getBounds().getRadius()
cNode = CollisionNode("environment")
cNode.addSolid(CollisionInvSphere(environCenter, environRad))
environC = self.environ.attachNewNode(cNode)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ Π΄ΡΠΎΠΈΠ΄Π°.
droidCenter = self.droid.getBounds().getCenter()
droidRad = self.droid.getBounds().getRadius()
cNode = CollisionNode("droid")
cNode.addSolid(CollisionSphere(droidCenter, droidRad))
droidC = self.droid.attachNewNode(cNode)
pusher.addCollider(droidC, self.droid)
self.cTrav.addCollider(droidC, pusher)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ°.
enemyCenter = self.enemy.getBounds().getCenter()
enemyRad = self.enemy.getBounds().getRadius()
cNode = CollisionNode("enemy")
cNode.addSolid(CollisionSphere(enemyCenter, enemyRad))
enemyC = self.enemy.attachNewNode(cNode)
pusher.addCollider(enemyC, self.enemy)
self.cTrav.addCollider(enemyC, pusher)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ Π²ΡΠ°ΠΆΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ.
fighterCenter = self.fighter.getBounds().getCenter()
fighterRad = self.fighter.getBounds().getRadius()
cNode = CollisionNode("fighter")
cNode.addSolid(CollisionSphere(fighterCenter, fighterRad))
fighterC = self.fighter.attachNewNode(cNode)
pusher.addCollider(fighterC, self.fighter)
self.cTrav.addCollider(fighterC, pusher)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ ΠΏΡΠ»ΠΈ.
bulletCenter = self.bullet.getBounds().getCenter()
bulletRad = self.bullet.getBounds().getRadius()
cNode = CollisionNode("bullet")
cNode.addSolid(CollisionSphere(bulletCenter, bulletRad))
bulletC = self.bullet.attachNewNode(cNode)
bulletCenter = self.bullet.getBounds().getCenter()
bulletRad = self.bullet.getBounds().getRadius()
cNode = CollisionNode("bullet")
cNode.addSolid(CollisionSphere(bulletCenter, bulletRad))
bulletC = self.bullet.attachNewNode(cNode)
pusher.addCollider(bulletC, self.bullet)
self.cTrav.addCollider(bulletC, pusher)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ ΠΏΡΡΠΊΠΈ. Π― Π±Ρ Π½Π΅ ΡΠΊΠ°Π·Π°Π», ΡΡΠΎ ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΡ, ΡΠΊΠΎΡΠ΅Π΅ ΡΡΠΎ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΠΎΡΡΠΈ
weaponCenter = self.weapon.getBounds().getCenter()
weaponRad = self.weapon.getBounds().getRadius()
cNode = CollisionNode("weapon")
cNode.addSolid(CollisionSphere(weaponCenter, weaponRad))
weaponC = self.weapon.attachNewNode(cNode)
pusher.addCollider(weaponC, self.weapon)
self.cTrav.addCollider(weaponC, pusher)
# ΡΠΎΠ»Π½ΡΠ΅(Π½ΠΎΠ²Π°Ρ ΠΌΠ΅Ρ
Π°Π½ΠΈΠΊΠ° ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΡ)
sun = DirectionalLight("sun")
sun.set_color_temperature(6000)
sun.color = sun.color * 4
sun_path = render.attach_new_node(sun)
sun_path.set_pos(10, -10, -10)
sun_path.look_at(0, 0, 0)
sun_path.hprInterval(self.sun_interval, (sun_path.get_h(), sun_path.get_p() - 360, sun_path.get_r()), bakeInStart=True).loop()
render.set_light(sun_path)
# ΠΡΠ»ΠΈ ΠΈΠ³ΡΠΎΠΊ Π·Π°Ρ
ΠΎΡΠ΅Π» ΠΏΠΎΠΈΠ³ΡΠ°ΡΡ Π² ΡΡΡΠ½ΠΎΠ±Π΅Π»ΡΡ ΠΈΠ³ΡΡ, ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΡΡΠΎ
if self.GB :
render.set_shader(Shader.load(Shader.SL_GLSL, "lighting.vert", "lighting.frag")) # ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ΅ΠΉΠ΄Π΅ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ!
def fight_force(self):
# ΡΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π·Π° Π½Π°ΡΠΈΠΌ ΠΊΠΎΡΠ°Π±Π»ΡΠΌ(ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Ρ ΡΠ΄Π΅Π»Π°Π» ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π·Π°ΠΆΠΈΠΌΠ°Π» Π½Π°Ρ(Π»Π΅ΡΠ°Π» Π² Π½Π°ΡΠ΅ΠΌ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ΅)) ΠΈ Π·Π°ΠΆΠΈΠΌΠ°Π΅Ρ ΠΎΠ½ ΡΠ΅Π°Π»ΡΠ½ΠΎ, ΡΠ±Π»ΠΈΠΆΠ°Ρ ΠΊ Π½Π°ΠΌ ΡΠ²ΠΎΠΉ ΠΊΠ²Π°Π΄ΡΠ°Ρ
self.fighter.setY(self.fighter.getY() - self.speed)
self.fighter.setX(self.fighter.getX() - 10)
print(self.fighter.getX())
def loadParticleConfig(self, filename, pos):
self.p.cleanup()
self.p = ParticleEffect()
self.p.loadConfig(Filename(filename))
self.p.start(self.t)
self.p.setPos(pos)
def particle_start(self):
self.force = True # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΌΡ ΡΠΆΠ΅ ΡΠ°Π·Π³ΠΎΠ½ΡΠ»ΠΈΡΡ
# ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.environ.setY(self.environ.getY() - self.speed) # Π½Π΅ΡΡΠΌΡΡ Π²ΠΏΡΠ°Π²ΠΎ
self.droid.setY(self.droid.getY() - self.speed) # ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ Π΄ΡΠΎΠΈΠ΄Π° Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.enemy.setY(self.enemy.getY() - self.speed) # ΡΠ΄ΡΠΈΠ³Π°Π΅ΠΌ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.weapon.setY(self.weapon.getY() - self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.flash.setY(self.flash.getY() - self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.cube.setY(self.cube.getY() - self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΡΠΈΠΊ
self.fight_force()
self.state -= 1 # ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΠΌΠ΅Π½ΡΡΠ΅ ΠΎΡΠΊΠΎΠ²
self.state_info.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΎΡΠΊΠΈ
if self.state != 10 and self.state > 10:
self.state_info.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΠΆΠΈΠ·Π½ΡΡ
ΠΊΠΎΡΠ°Π±Π»Ρ
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam/steam.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ Π½Π΅ΠΈΡΠΏΡΠ°Π²Π΅Π½', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
else:
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam_critic/steam.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
if self.state < 10:
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='ΠΏΠ°Π΄Π°Π΅ΠΌ!', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
def fountain(self):
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΡΠ΅ΠΊΡΡ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ
if self.force:
if self.state != 100:
self.state += 1
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5) + 500, random.randrange(0, 1)
self.loadParticleConfig('special_effects/fountain/fountain.ptf', self.fountain_pos)
else :
if self.state != 100:
self.state += 1
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 1)
self.loadParticleConfig('special_effects/fountain/fountain.ptf', self.fountain_pos)
def black_light(self):
# ΠΡΠΊΠ»ΡΡΠ΅Π½ΡΠΉ ΡΠ²Π΅Ρ
ambientLight = AmbientLight("ambientLight")
ambientLight.setColor((0, 0, 0, 1))
directionalLight = DirectionalLight("directionalLight")
directionalLight.setDirection((-5, -5, -5))
directionalLight.setColor((1, 1, 1, 1))
directionalLight.setSpecularColor((1, 1, 1, 1))
render.setLight(render.attachNewNode(ambientLight))
render.setLight(render.attachNewNode(directionalLight))
def weapon_hide(self):
# Π£Π±ΡΠ°ΡΡ ΠΎΡΡΠΆΠΈΠ΅
self.hide_weapon = True
self.weapon.hide()
def toggleLights(self, lights):
# Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΠ΅
if self.hide_weapon:
for light in lights:
if render.hasLight(light):
render.clearLight(light)
else:
render.setLight(light)
self.flash.setPos(self.weapon_pos)
else:
return
def shot(self):
dt = globalClock.getDt() + 0.5 # CΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
if not self.hide_weapon : # Π΅ΡΠ»ΠΈ ΠΎΡΡΠΆΠΈΠ΅ ΡΠ±ΡΠ°Π½ΠΎ ΡΠΎ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΡΠ΅Π»ΡΡΡ
self.shotSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π²ΡΡΡΡΠ΅Π»Π°
self.bullet.setPos(self.weapon_pos) # ΠΡΠ»Ρ Π±ΡΠ΄Π΅Ρ ΡΠΏΠ°Π²Π½ΠΈΡΡΡ Π²Π½ΡΡΡΠΈ ΠΏΡΡΠΊΠΈ
self.bullet.setY(self.bullet, -11 * dt) # Π‘Π΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΏΡΠ»Ρ Π½Π° ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ Π²ΠΏΠ΅ΡΡΠ΄
def check_loss(self):
if self.state == 0: # Π΅ΡΠ»ΠΈ ΠΆΠΈΠ·Π½Π΅ΠΉ Ρ ΠΊΠΎΡΠ°Π±Π»Ρ Π½Π΅ ΠΎΡΡΠ°Π»ΠΎΡΡ
self.black_light() # Π²ΠΊΠ»ΡΡΠΈΠΌ ΡΡΡΠ½ΡΠΉ ΡΠ²Π΅Ρ
self.weapon_hide() # ΡΠ±Π΅ΡΡΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.info = OnscreenText(text='ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅', style=1, font=self.font,
fg=(1,1,1,1),
pos=(-1.3, -0.5), align=TextNode.ALeft, scale=0.3) # Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΎ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠΈ
self.crackSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π²Π·ΡΡΠ²Π°
def setKey(self, key, value):
self.keyMap[key] = value # ΠΠ΅Π»Π°Π΅ΠΌ ΠΌΠ΅Ρ
aΠ½uΠ·ΠΌ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ.
def move(self, task):
''' ΠΠ΅Π»Π°Π΅ΠΌ ΡΡΡΠ½ΠΊΡΠΈΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° '''
dt = globalClock.getDt() - .005 # CΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
# ΠΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π²Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΡΠ°Π²ΠΎ
if self.keyMap["cam-left"]:
self.camera.setX(self.camera, -20 * dt) # ΠΠ΅Π½ΡΠ΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΊΠ° ΠΊΠ°ΠΌΠ΅ΡΡ ΠΏΠΎ ΠΈΠΊΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈΠ»ΡΠ·ΠΈΡ ΠΏΠΎΠ²ΠΎΡΠΎΡΠ° ΡΠ³Π»Π° Π»ΡΡΠ°. ΠΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΊΠ°ΠΌΠ΅ΡΠ° ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ.
if self.keyMap["cam-right"]:
self.camera.setX(self.camera, +20 * dt) # Π’ΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ Π½Π°Π²Π΅ΡΡ
Ρ.
startpos = self.droid.getPos() # Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ΄ΠΎΠ±Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ³ΡΠΎΠΊΠ°
if self.keyMap["left"]:
self.droid.setH(self.droid.getH() + 300 * dt)
self.enemy.setY(self.enemy, 1 * dt)
if self.keyMap["right"]:
self.droid.setH(self.droid.getH() - 300 * dt)
self.enemy.setY(self.enemy, -1 * dt)
if self.keyMap["forward"]:
self.droid.setY(self.droid, -25 * dt)
self.enemy.setX(self.enemy, 1 * dt)
# Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ±ΡΠ°Π½ΠΎ ΠΎΡΡΠΆΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ
if not self.hide_weapon:
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 3
self.weapon.setPos(self.weapon_pos) # ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΡΠΊΠΈ
else:
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 3
self.flash.setPos(self.weapon_pos)
camvec = self.droid.getPos() - self.camera.getPos() # Π²Π΅ΠΊΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ
camvec.setZ(0) # 0 Π²ΡΡΠΎΡΠ° Π²Π΅ΠΊΡΠΎΡΠ°
camdist = camvec.length() # Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΎΡ Π΄ΡΠΎΠΈΠ΄Π°
camvec.normalize() # Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π²Π΅ΠΊΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ
if camdist > 10.0: # Π΅ΡΠ»ΠΈ Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅ 10, ΡΠΎ ΡΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π·Π° Π΄ΡΠΎΠΎΠΈΠ΄ΠΎΠΌ
self.camera.setPos(self.camera.getPos() + camvec * (camdist - 10))
camdist = 10.0 # ΡΠ΅ΠΏΠ΅ΡΡ Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠ½ΠΎΠ²Π° 10
if camdist < 5.0: # Π΅ΡΠ»ΠΈ Π΄ΠΈΡΡΠ°Π³ΡΡΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΌΠ΅Π½ΡΡΠ΅ 5, ΡΠΎ...
self.camera.setPos(self.camera.getPos() - camvec * (5 - camdist)) # ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ
camdist = 5.0 # Π²ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ
self.camera.lookAt(self.floater) # Π²ΠΎΡ ΠΈ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΠ»ΡΡ Π½Π°Ρ floater
return task.cont # Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π·Π°Π΄Π°ΡΡ
def addInstructions(self, pos, msg):
return OnscreenText(text=msg, style=1, fg=(1,1,1,1), font=self.inst_font, pos=(-1.3, pos), align=TextNode.ALeft, scale = .04, shadow=(0,0,0,1)) # Π€ΡΠ½ΠΊΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΏΡΠ°Π²Π»ΡΡΡ
def addTitle(self, text):
return OnscreenText(text=text, style=1, fg=(1, 1, 1, 1), scale=0.2,
parent=base.a2dBottomRight, align=TextNode.ARight,
pos=(-0.1, 0.09), shadow=(0, 0, 0, 1), font=self.font) # Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Ρ ΡΡΠΈΡΡΠΎΠΌ ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΠ΅ΠΉ
droid = DroidShooter() # Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ
droid.run() # 3Π°ΠΏΡΡΡΠΈΠΌ ΠΈΠ³ΡΡ
# ΡΠ°Π·ΡΠΎΠ±ΠΎΡΡΠΈΠΊΠΈ :
# ΠΠ»Π°Π²Π½ΡΠΉ Π°Π²ΡΠΎΡ : ma3rx
# ΠΠΎΠΌΠΎΡΠ½ΠΈΠΊ : panda3dmastercoder( ΠΏΡΠΈΡΠΎΠ΅Π΄Π΅Π½ΠΈΠ»ΡΡ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ 31 ΡΠ½Π²Π°ΡΡ, 2021 Π³ΠΎΠ΄Π°, 12:??)
# Π Π΅ΠΊΠ»Π°ΠΌΡΠΈΠΊ : rdb (Π½Π°ΠΏΠΈΡΠ°Π» ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΎΡΡΠΌΠ΅ 6 ΡΠ΅Π²ΡΠ°Π»Ρ 2021 Π³ΠΎΠ΄Π°, 20:11)
Hi! I create 3.0.6.1 update - horizontal effect for droid.
New source code droid.py :
#!/usr/bin/env python
# -*- coding: utf_8 -*-
# Π‘ΠΎΠ·Π΄Π°Π½ΠΎ : 22 ΡΠΈΡΠ»ΠΎ, ΡΠ½Π²Π°ΡΡ, 2021 Π³ΠΎΠ΄
# ΠΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ
from direct.showbase.ShowBase import ShowBase
from panda3d.core import CollisionTraverser, CollisionNode
from panda3d.core import CollisionHandlerPusher, CollisionSphere, CollisionInvSphere
from panda3d.core import Filename, AmbientLight, DirectionalLight
from panda3d.core import PandaNode, NodePath, Camera, TextNode
from direct.particles.Particles import Particles
from direct.particles.ParticleEffect import ParticleEffect
from panda3d.core import PointLight, Spotlight
from panda3d.core import CollideMask
from panda3d.core import loadPrcFileData
from panda3d.core import *
from direct.gui.OnscreenText import OnscreenText
from direct.gui.OnscreenImage import OnscreenImage
from direct.gui.DirectButton import DirectButton
from direct.gui.DirectSlider import DirectSlider
from direct.actor.Actor import Actor
from direct.interval.IntervalGlobal import Sequence
from direct.interval.IntervalGlobal import Wait
import random
import sys
import time
import os
import math
VERSION = '3.0.6.1'
settings = ['window-title Droid Game ' + VERSION,
'fullscreen 0']
loadPrcFileData('', settings[0]) # Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π½Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ (Π²ΠΎΠ·ΠΌΡΠΌ Π΅Π³ΠΎ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ settings)
loadPrcFileData('', settings[1]) # Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠΊΡΠ°Π½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ
# Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π³Π»Π°Π²Π½ΡΠΉ ΠΊΠ»Π°ΡΡ Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ
class DroidShooter(ShowBase):
def __init__(self):
ShowBase.__init__(self) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ Π²ΡΠ΅ ΡΠ΅Π»ΡΡ ΠΈΠ· direct
self.speed = 1800 # ΡΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ
self.GB = False # ΠΠ ΡΡΡΠ½ΠΎ-Π±Π΅Π»ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ
self.menu() # Π·Π²ΠΏΡΡΠΊ ΠΌΠ΅Π½Ρ
def menu(self):
base.enableParticles() # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΡΡΠ΅ΠΊΡ Π΄ΡΠΌΠ°
self.win.setClearColor((0, 0, 0, 1)) # ΠΠ°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ ΡΡΡΠ½ΡΠΌ. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΡΡΠΎΠΌ ΠΈΠ³ΡΠΎΠ²ΠΎΠΌ Π΄Π²ΠΈΠΆΠΊΠ΅ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ Π·Π°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΡΠΌ.
self.font = loader.loadFont('./fonts/doom_font.ttf') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΡΠΈΡΡ ΠΈΠ· ΠΈΠ³ΡΡ doom
self.inst_font = loader.loadFont('./fonts/arial.ttf') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΡΠΈΡΡ arial
self.crackSound = loader.loadMusic('./sounds/crack.wav') # Π·Π²ΡΠΊ Π²Π·ΡΡΠ²Π° ΠΊΠΎΡΠ°Π±Π»Ρ
self.shotSound = loader.loadMusic('./sounds/shot.wav') # Π·Π²ΡΠΊ Π²ΡΡΡΡΠ΅Π»Π°
self.startSound = loader.loadMusic('./sounds/started.wav') # Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ°
self.errorSound = loader.loadMusic('./sounds/error.wav') # Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ°
self.errorSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.startSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.crackSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.shotSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.startSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ
self.button_start = DirectButton(pos=(0.7, 0, 0.4), text="CTAPT",
scale=.2, pad=(.2, .2),
command=self.load_game) # ΠΊΠ½ΠΎΠΏΠΊΠ° Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ
self.gb_start = DirectButton(pos=(0.7, 0, 0.1), text="GB",
scale=.2, pad=(.2, .2),
command=self.gb_mode) # ΠΊΠ½ΠΎΠΏΠΊΠ° Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ Π² ΡΡΡΠ½ΠΎ-Π±Π΅Π»ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅
self.slider_sun = DirectSlider(pos=(0.1, 0, .75), scale=0.8, value=0.5,
command=self.set_sun_interval)
self.title = self.addTitle("Droid game " + VERSION)
# ΠΠ°ΠΏΠ΅ΡΠ°ΡΠ°Π΅ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅
self.inst1 = self.addInstructions(0.95, u"[ESC]: ΠΡΡ
ΠΎΠ΄")
self.inst2 = self.addInstructions(0.90, u"[Left Arrow]: ΠΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² Π»Π΅Π²ΠΎ")
self.inst3 = self.addInstructions(0.85, u"[Right Arrow]: ΠΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² ΠΏΡΠ°Π²ΠΎ")
self.inst4 = self.addInstructions(0.80, u"[Up Arrow]: ΠΠΏΠ΅ΡΠ΅Π΄")
self.inst5 = self.addInstructions(0.75, u"[a]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΎ")
self.inst6 = self.addInstructions(0.70, u"[d]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² Π»Π΅Π²ΠΎ")
self.inst7 = self.addInstructions(0.65, u"[Left Arrow + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst8 = self.addInstructions(0.60, u"[Right Arrow + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² ΠΏΡΠ°Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst9 = self.addInstructions(0.55, u"[a + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst10 = self.addInstructions(0.50, u"[d + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst11 = self.addInstructions(0.45, u"[space]: ΡΡΡΠ΅Π»ΡΠ±Π°")
self.inst12 = self.addInstructions(0.40, u"[s]: Π΄ΠΎΡΡΠ°ΡΡ ΡΠΎΠ½Π°ΡΠΈΠΊ")
self.inst13 = self.addInstructions(0.35, u"[w]: ΡΠ±ΡΠ°ΡΡ ΠΎΡΡΠΆΠΈΠ΅")
self.inst14 = self.addInstructions(0.30, u"[f]: ΠΏΠΎΠ»Π½ΡΠΉ ΡΠ°Π·Π³ΠΎΠ½(ΠΠΠΠ‘ΠΠ!)")
self.inst15 = self.addInstructions(0.25, u"[0]: ΠΏΠΎΠΆΠ°ΡΠΎΡΡΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°")
self.accept("escape", sys.exit) # ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ Esc Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ.
def set_sun_interval(self):
self.sun_interval = self.slider_sun.guiItem.getValue() * 100 # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ»Π°ΠΉΠ΄Π΅ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΎΠ΅ Π½Π° 500, Π΄Π° ΡΡΠ°ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½ΠΎ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΏΠ»Π΅Π²Π°ΡΡ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅Π½Ρ, ΠΈΠ±ΠΎ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ½ΡΡΠΈΡ ΠΏΡΠΎΡΡΠΎ Π½Π΅ΡΡ :)
def gb_mode(self):
'''Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠ½ΠΎΠ±Π΅Π»ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ°'''
self.GB = True
def load_game(self):
self.button_start.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ ΡΡΠ°ΡΡΠ°
self.gb_start.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ ΡΡΡΠ½ΠΎ Π±Π΅Π»ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ°.
self.title.hide() # ΡΠ΄Π°Π»ΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠ³ΡΡ
# ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
self.inst1.hide()
self.inst2.hide()
self.inst3.hide()
self.inst4.hide()
self.inst5.hide()
self.inst6.hide()
self.inst7.hide()
self.inst8.hide()
self.inst9.hide()
self.inst10.hide()
self.inst11.hide()
self.inst12.hide()
self.inst13.hide()
self.inst14.hide()
self.inst15.hide()
self.slider_sun.hide() # ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΡΠ»Π°ΠΉΠ΄Π΅Ρ ΡΠΎΠ»Π½ΡΠ°
self.keyMap = {
"left": 0, "right": 0, "forward": 0, "cam-left": 0, "cam-right": 0} # Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ»ΠΎΠ²Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΏΠΎ ΠΈΡ
Π½Π°ΠΆΠ°ΡΠΈΡ
# Π ΠΈΡΡΠ΅ΠΌ Π·Π²ΡΠ·Π΄Ρ
self.sky = loader.loadModel("./models/sky/solar_sky_sphere") # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠΎΡΠΌΠΎΡΠ°(ΡΡΠΎ ΡΡΠ΅ΡΠ°)
self.sky_tex = loader.loadTexture("./tex/stars_1k_tex.jpg") # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ΅ΠΊΡΡΡΡΡ
self.sky.setTexture(self.sky_tex, 1) # Π·Π°ΡΠ΅Π½Π΄Π΅ΡΠΈΠΌ ΡΠ΅ΠΊΡΡΡΡΡ Π½Π° Π½Π΅Π±ΠΎ
self.sky.reparentTo(render) # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π½Π΅Π±ΠΎ
self.sky.setScale(40000) # ΡΠ°ΡΡΠΈΡΠΈΠΌ Π½Π΅Π±ΠΎ Π΄ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ panda3d
self.environ = loader.loadModel("models/world/falcon.egg") # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π² blender ΠΌΠΈΡ.
self.environ.reparentTo(render) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΌΠΈΡΠ° Π² ΠΎΠΊΠ½ΠΎ
droidStartPos = (-1, 0, 1.5 ) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΡΡΠ°ΡΡΠΎΠ²ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π² ΠΌΠΈΡΠ΅.
enemyStartPos = (-6, 1, 0.5) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ°-Π΄ΡΠΎΠΈΠ΄Π°.
self.droid = Actor("models/player/seeker.egg") # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° (ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π² blender)
self.enemy = Actor("models/enemies/r2d2/r2d2.egg") # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° (ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π² blender)
self.droid.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π² Π½Π°Ρ ΠΌΠΈΡ.
self.enemy.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π² Π½Π°Ρ ΠΌΠΈΡ.
self.droid.setScale(1) # ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° 1
self.enemy.setScale(1) # ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π½Π° 1
self.droid.setPos(droidStartPos) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ΡΡ Π½Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ
self.enemy.setPos(enemyStartPos) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π½Π° ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ΡΡ Π½Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ
self.weapon = Actor('models/weapon/lightsaber.egg') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.bullet = Actor('models/weapon/bullet/bullet.egg.pz') # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΠΏΡΠ»Ρ
self.flash = Actor('models/whishlyflash/handlamp.egg') # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.weapon.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ Π² Π½Π°Ρ ΠΌΠΈΡ
self.bullet.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΏΡΠ»Ρ Π² ΠΌΠΈΡ Π½ΠΎ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΎΠ½Π° ΡΠ°ΠΌΠ° Π½Π΅ ΡΠΊΠΎΡΠΎ
self.flash.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ Π² Π½Π°Ρ ΠΌΠΈΡ
self.weapon.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΡΠΊΠΈ
self.bullet.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΠ»ΠΈ
self.flash.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΎΠ½Π°ΡΠΈΠΊΠ°
# Π²ΡΠ°ΠΆΠ΅ΡΠΊΠΈΠΉ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter = Actor('models/fighter/fighter.egg') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΡ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter.reparentTo(render) # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΈΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter.setPos(0, 90, 0) # ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 1 # ΠΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΡΠΊΠΈ
self.weapon.setPos(self.weapon_pos) # ΠΠΎΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ ΡΡΡΡ Π²ΡΡΠ΅ ΠΈΠ³ΡΠΎΠΊΠ°
self.cube = Actor('models/block/crate.egg') # Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ Π±Π»ΠΎΠΊ
self.cube.reparentTo(render)
self.cube.setPos(0, -0, 0) # ΠΏΠΎΠ·ΠΈΡΠΈΡ ΡΡΠΈΠΊΠ°
self.cube.setScale(0.7)
self.cube.hprInterval(1.5, (0, 360, 360)).loop()
self.Intervalcube = self.cube.posInterval(13,
Point3(0, -500, 0),
startPos=Point3(0, 10, 0))
self.Intervalcube.loop()
self.spotlight = camera.attachNewNode(Spotlight("spotlight")) # ΠΠΎΠ½ΡΠΈΠ³ΠΈ ΡΠΎΠ½Π°ΡΠΈΠΊΠ°
self.spotlight.node().setColor((.3, .3, .3, 1))
self.spotlight.node().setSpecularColor((0, 0, 0, 1))
self.floater = NodePath(PandaNode("floater"))
self.floater.reparentTo(self.droid)
self.floater.setZ(2.0)
self.accept("escape", sys.exit) # ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ Esc Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ.
self.accept("arrow_left", self.setKey, ["left", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π»Π΅Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ
self.accept("arrow_right", self.setKey, ["right", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΏΡΠ°Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²ΠΏΡΠ°Π²ΠΎ
self.accept("arrow_up", self.setKey, ["forward", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΏΠ΅ΡΡΠ΄ - ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("a", self.setKey, ["cam-left", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ a - ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΠΈ
self.accept("d", self.setKey, ["cam-right", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ s - ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΠΈ
self.accept("arrow_left-up", self.setKey, ["left", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+Π²Π»Π΅Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("arrow_right-up", self.setKey, ["right", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+ΠΏΡΠ°Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²ΠΏΡΠ°Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("arrow_up-up", self.setKey, ["forward", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+Π²Π²Π΅ΡΡ - ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("a-up", self.setKey, ["cam-left", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ a+Π²ΠΏΠ΅ΡΡΠ΄ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²Π»Π΅Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("d-up", self.setKey, ["cam-right", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ s+Π²ΠΏΠ΅ΡΡΠ΄ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΏΡΠ°Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("space", self.shot) # ΠΏΡΠΈ ΠΏΡΠΎΠ±Π΅Π»Π΅ ΡΡΡΠ΅Π»ΡΠ΅ΠΌ
self.accept("s", self.toggleLights, [[self.spotlight]]) # ΠΠΊΠ»ΡΡΠΈΡΡ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.accept("w", self.weapon_hide) # ΠΏΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ w - ΡΠ±Π΅ΡΡΠΌ ΠΎΡΡΠΆΠΈΠ΅.
base.enableParticles() # ΠΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΡΠΌΠ°
self.t = loader.loadModel("models/weapon/lightsaber.egg") # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ Π΅ΡΡ ΠΎΡΡΠΆΠΈΠ΅
self.t.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ Π² Π½Π°Ρ ΠΌΠΈΡ
self.p = ParticleEffect() # ΠΠΊΠ»ΡΡΠΈΠΌ ΡΡΡΠ΅ΠΊΡ Π΄ΡΠΌΠ°
self.accept('f', self.particle_start) # ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ f(ΠΎΡ force) - Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ°ΠΉΠ» Π΄ΡΠΌΠ° ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ Π² ΠΊΠΎΠ½ΡΠΈΠ³ ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠ° Π°Π½ΠΈΠΌΠ°ΡΠΈΡ ΡΡΠ°Π»Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΄ΡΠΌΠ°
self.accept('0', self.fountain) # ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ f+o(fountain) Π²ΠΊΠ»ΡΡΠΈΠΌ ΠΏΠΎΠΆΠ°ΡΠΎΡΡΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ
taskMgr.add(self.move, "moveTask") # ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π·Π°Π΄Π°ΡΡ Π² Π½Π°Ρ Π΄Π²ΠΈΠΆΠΎΠΊ
self.isMoving = False # Π‘ΡΠ°Π²ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ isMoving Π½Π° False(ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΌΠ΅Π½ΡΡΡ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅) ΡΡΠΎΠ±Ρ ΠΈΠ³ΡΠΎΠΊ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΡΠΎΡΠ».
# ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΡΠ²Π΅Ρ Π±ΡΠ» ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π²ΡΠΊΠ»ΡΡΠ΅Π½.
self.disableMouse() # ΠΡΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· ΠΌΡΡΠΊΡ
self.camera.setPos(self.droid.getX(), self.droid.getY() + 1, 3) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΡΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ³ΡΠΎΠΊΠ°
self.black_light() # Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π²ΡΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ²Π΅Ρ
self.state = 100 # Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠΎΡΠ°Π±Π»Ρ
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.hide_weapon = False # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΎΡΡΠΆΠΈΠ΅ Π½Π΅ ΡΠ±ΡΠ°Π½ΠΎ
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 5)
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 1)
self.motor_pos1 = 25.238849639892578, 8.962211608886719, 1.5 # ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΌΠΎΡΠΎΡΠ°
self.motor_pos2 = -20.676218032836914, 10.55816650390625, 1.5 # ΠΏΠΎΠ·ΠΈΡΠΈΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΡΠΎΡΠ°
self.motor1 = self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.motor_pos1) # ΠΌΠΎΡΠΎΡ 1
self.motor2 = self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.motor_pos2) # ΠΌΠΎΡΠΎΡ 2
self.state_info2 = OnscreenText(text='', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.force = False # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ Π½Π΅ ΡΠ°Π·Π³ΠΎΠ½ΡΠ»ΠΈΡΡ
# ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ ΠΊΠΎΡΠ°Π±Π»Ρ(ΠΎΠ½ Ρ Π½Π°Ρ ΠΊΠ°ΠΊ Π³Π»Π°Π²Π½Π°Ρ ΠΊΠ°ΡΡΠ°).
self.cTrav = CollisionTraverser()
pusher = CollisionHandlerPusher()
pusher.setHorizontal(True)
environCenter = self.environ.getBounds().getCenter()
environRad = self.environ.getBounds().getRadius()
cNode = CollisionNode("environment")
cNode.addSolid(CollisionInvSphere(environCenter, environRad))
environC = self.environ.attachNewNode(cNode)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ Π΄ΡΠΎΠΈΠ΄Π°.
droidCenter = self.droid.getBounds().getCenter()
droidRad = self.droid.getBounds().getRadius()
cNode = CollisionNode("droid")
cNode.addSolid(CollisionSphere(droidCenter, droidRad))
droidC = self.droid.attachNewNode(cNode)
pusher.addCollider(droidC, self.droid)
self.cTrav.addCollider(droidC, pusher)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ°.
enemyCenter = self.enemy.getBounds().getCenter()
enemyRad = self.enemy.getBounds().getRadius()
cNode = CollisionNode("enemy")
cNode.addSolid(CollisionSphere(enemyCenter, enemyRad))
enemyC = self.enemy.attachNewNode(cNode)
pusher.addCollider(enemyC, self.enemy)
self.cTrav.addCollider(enemyC, pusher)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ Π²ΡΠ°ΠΆΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ.
fighterCenter = self.fighter.getBounds().getCenter()
fighterRad = self.fighter.getBounds().getRadius()
cNode = CollisionNode("fighter")
cNode.addSolid(CollisionSphere(fighterCenter, fighterRad))
fighterC = self.fighter.attachNewNode(cNode)
pusher.addCollider(fighterC, self.fighter)
self.cTrav.addCollider(fighterC, pusher)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ ΠΏΡΠ»ΠΈ.
bulletCenter = self.bullet.getBounds().getCenter()
bulletRad = self.bullet.getBounds().getRadius()
cNode = CollisionNode("bullet")
cNode.addSolid(CollisionSphere(bulletCenter, bulletRad))
bulletC = self.bullet.attachNewNode(cNode)
bulletCenter = self.bullet.getBounds().getCenter()
bulletRad = self.bullet.getBounds().getRadius()
cNode = CollisionNode("bullet")
cNode.addSolid(CollisionSphere(bulletCenter, bulletRad))
bulletC = self.bullet.attachNewNode(cNode)
pusher.addCollider(bulletC, self.bullet)
self.cTrav.addCollider(bulletC, pusher)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ ΠΏΡΡΠΊΠΈ. Π― Π±Ρ Π½Π΅ ΡΠΊΠ°Π·Π°Π», ΡΡΠΎ ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΡ, ΡΠΊΠΎΡΠ΅Π΅ ΡΡΠΎ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΠΎΡΡΠΈ
weaponCenter = self.weapon.getBounds().getCenter()
weaponRad = self.weapon.getBounds().getRadius()
cNode = CollisionNode("weapon")
cNode.addSolid(CollisionSphere(weaponCenter, weaponRad))
weaponC = self.weapon.attachNewNode(cNode)
pusher.addCollider(weaponC, self.weapon)
self.cTrav.addCollider(weaponC, pusher)
# ΡΠΎΠ»Π½ΡΠ΅(Π½ΠΎΠ²Π°Ρ ΠΌΠ΅Ρ
Π°Π½ΠΈΠΊΠ° ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΡ)
sun = DirectionalLight("sun")
sun.set_color_temperature(6000)
sun.color = sun.color * 4
sun_path = render.attach_new_node(sun)
sun_path.set_pos(10, -10, -10)
sun_path.look_at(0, 0, 0)
sun_path.hprInterval(self.sun_interval, (sun_path.get_h(), sun_path.get_p() - 360, sun_path.get_r()), bakeInStart=True).loop()
render.set_light(sun_path)
# ΠΡΠ»ΠΈ ΠΈΠ³ΡΠΎΠΊ Π·Π°Ρ
ΠΎΡΠ΅Π» ΠΏΠΎΠΈΠ³ΡΠ°ΡΡ Π² ΡΡΡΠ½ΠΎΠ±Π΅Π»ΡΡ ΠΈΠ³ΡΡ, ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΡΡΠΎ
if self.GB :
render.set_shader(Shader.load(Shader.SL_GLSL, "lighting.vert", "lighting.frag")) # ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ΅ΠΉΠ΄Π΅ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ!
def fight_force(self):
# ΡΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π·Π° Π½Π°ΡΠΈΠΌ ΠΊΠΎΡΠ°Π±Π»ΡΠΌ(ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Ρ ΡΠ΄Π΅Π»Π°Π» ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π·Π°ΠΆΠΈΠΌΠ°Π» Π½Π°Ρ(Π»Π΅ΡΠ°Π» Π² Π½Π°ΡΠ΅ΠΌ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ΅)) ΠΈ Π·Π°ΠΆΠΈΠΌΠ°Π΅Ρ ΠΎΠ½ ΡΠ΅Π°Π»ΡΠ½ΠΎ, ΡΠ±Π»ΠΈΠΆΠ°Ρ ΠΊ Π½Π°ΠΌ ΡΠ²ΠΎΠΉ ΠΊΠ²Π°Π΄ΡΠ°Ρ
self.fighter.setY(self.fighter.getY() - self.speed)
self.fighter.setX(self.fighter.getX() - 10)
print(self.fighter.getX())
def loadParticleConfig(self, filename, pos):
self.p.cleanup()
self.p = ParticleEffect()
self.p.loadConfig(Filename(filename))
self.p.start(self.t)
self.p.setPos(pos)
def particle_start(self):
self.force = True # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΌΡ ΡΠΆΠ΅ ΡΠ°Π·Π³ΠΎΠ½ΡΠ»ΠΈΡΡ
# ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.environ.setY(self.environ.getY() - self.speed) # Π½Π΅ΡΡΠΌΡΡ Π²ΠΏΡΠ°Π²ΠΎ
self.droid.setY(self.droid.getY() - self.speed) # ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ Π΄ΡΠΎΠΈΠ΄Π° Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.enemy.setY(self.enemy.getY() - self.speed) # ΡΠ΄ΡΠΈΠ³Π°Π΅ΠΌ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.weapon.setY(self.weapon.getY() - self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.flash.setY(self.flash.getY() - self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.cube.setY(self.cube.getY() - self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΡΠΈΠΊ
self.fight_force()
self.state -= 1 # ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΠΌΠ΅Π½ΡΡΠ΅ ΠΎΡΠΊΠΎΠ²
self.state_info.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΎΡΠΊΠΈ
if self.state != 10 and self.state > 10:
self.state_info.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΠΆΠΈΠ·Π½ΡΡ
ΠΊΠΎΡΠ°Π±Π»Ρ
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam/steam.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ Π½Π΅ΠΈΡΠΏΡΠ°Π²Π΅Π½', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
else:
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam_critic/steam.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
if self.state < 10:
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='ΠΏΠ°Π΄Π°Π΅ΠΌ!', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
def fountain(self):
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΡΠ΅ΠΊΡΡ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ
if self.force:
if self.state != 100:
self.state += 1
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5) + 500, random.randrange(0, 1)
self.loadParticleConfig('special_effects/fountain/fountain.ptf', self.fountain_pos)
else :
if self.state != 100:
self.state += 1
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 1)
self.loadParticleConfig('special_effects/fountain/fountain.ptf', self.fountain_pos)
def black_light(self):
# ΠΡΠΊΠ»ΡΡΠ΅Π½ΡΠΉ ΡΠ²Π΅Ρ
ambientLight = AmbientLight("ambientLight")
ambientLight.setColor((0, 0, 0, 1))
directionalLight = DirectionalLight("directionalLight")
directionalLight.setDirection((-5, -5, -5))
directionalLight.setColor((1, 1, 1, 1))
directionalLight.setSpecularColor((1, 1, 1, 1))
render.setLight(render.attachNewNode(ambientLight))
render.setLight(render.attachNewNode(directionalLight))
def weapon_hide(self):
# Π£Π±ΡΠ°ΡΡ ΠΎΡΡΠΆΠΈΠ΅
self.hide_weapon = True
self.weapon.hide()
def toggleLights(self, lights):
# Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΠ΅
if self.hide_weapon:
for light in lights:
if render.hasLight(light):
render.clearLight(light)
else:
render.setLight(light)
self.flash.setPos(self.weapon_pos)
else:
return
def shot(self):
dt = globalClock.getDt() + 0.5 # CΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
if not self.hide_weapon : # Π΅ΡΠ»ΠΈ ΠΎΡΡΠΆΠΈΠ΅ ΡΠ±ΡΠ°Π½ΠΎ ΡΠΎ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΡΠ΅Π»ΡΡΡ
self.shotSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π²ΡΡΡΡΠ΅Π»Π°
self.bullet.setPos(self.weapon_pos) # ΠΡΠ»Ρ Π±ΡΠ΄Π΅Ρ ΡΠΏΠ°Π²Π½ΠΈΡΡΡ Π²Π½ΡΡΡΠΈ ΠΏΡΡΠΊΠΈ
self.bullet.setY(self.bullet, -11 * dt) # Π‘Π΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΏΡΠ»Ρ Π½Π° ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ Π²ΠΏΠ΅ΡΡΠ΄
def check_loss(self):
if self.state == 0: # Π΅ΡΠ»ΠΈ ΠΆΠΈΠ·Π½Π΅ΠΉ Ρ ΠΊΠΎΡΠ°Π±Π»Ρ Π½Π΅ ΠΎΡΡΠ°Π»ΠΎΡΡ
self.black_light() # Π²ΠΊΠ»ΡΡΠΈΠΌ ΡΡΡΠ½ΡΠΉ ΡΠ²Π΅Ρ
self.weapon_hide() # ΡΠ±Π΅ΡΡΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.info = OnscreenText(text='ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅', style=1, font=self.font,
fg=(1,1,1,1),
pos=(-1.3, -0.5), align=TextNode.ALeft, scale=0.3) # Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΎ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠΈ
self.crackSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π²Π·ΡΡΠ²Π°
def setKey(self, key, value):
self.keyMap[key] = value # ΠΠ΅Π»Π°Π΅ΠΌ ΠΌΠ΅Ρ
aΠ½uΠ·ΠΌ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ.
def move(self, task):
''' ΠΠ΅Π»Π°Π΅ΠΌ ΡΡΡΠ½ΠΊΡΠΈΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° '''
dt = globalClock.getDt() - .005 # CΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
# ΠΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π²Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΡΠ°Π²ΠΎ
if self.keyMap["cam-left"]:
self.camera.setX(self.camera, -20 * dt) # ΠΠ΅Π½ΡΠ΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΊΠ° ΠΊΠ°ΠΌΠ΅ΡΡ ΠΏΠΎ ΠΈΠΊΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈΠ»ΡΠ·ΠΈΡ ΠΏΠΎΠ²ΠΎΡΠΎΡΠ° ΡΠ³Π»Π° Π»ΡΡΠ°. ΠΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΊΠ°ΠΌΠ΅ΡΠ° ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ.
if self.keyMap["cam-right"]:
self.camera.setX(self.camera, +20 * dt) # Π’ΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ Π½Π°Π²Π΅ΡΡ
Ρ.
startpos = self.droid.getPos() # Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ΄ΠΎΠ±Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ³ΡΠΎΠΊΠ°
if self.keyMap["left"]:
self.droid.setH(self.droid.getH() + 300 * dt)
self.enemy.setY(self.enemy, 1 * dt)
if self.keyMap["right"]:
self.droid.setH(self.droid.getH() - 300 * dt)
self.enemy.setY(self.enemy, -1 * dt)
if self.keyMap["forward"]:
self.droid.setY(self.droid, -25 * dt)
self.enemy.setX(self.enemy, 1 * dt)
# Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ±ΡΠ°Π½ΠΎ ΠΎΡΡΠΆΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ
if not self.hide_weapon:
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 3
self.weapon.setPos(self.weapon_pos) # ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΡΠΊΠΈ
else:
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 3
self.flash.setPos(self.weapon_pos)
camvec = self.droid.getPos() - self.camera.getPos() # Π²Π΅ΠΊΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ
camvec.setZ(0) # 0 Π²ΡΡΠΎΡΠ° Π²Π΅ΠΊΡΠΎΡΠ°
camdist = camvec.length() # Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΎΡ Π΄ΡΠΎΠΈΠ΄Π°
camvec.normalize() # Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π²Π΅ΠΊΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ
if camdist > 10.0: # Π΅ΡΠ»ΠΈ Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅ 10, ΡΠΎ ΡΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π·Π° Π΄ΡΠΎΠΎΠΈΠ΄ΠΎΠΌ
self.camera.setPos(self.camera.getPos() + camvec * (camdist - 10))
camdist = 10.0 # ΡΠ΅ΠΏΠ΅ΡΡ Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠ½ΠΎΠ²Π° 10
if camdist < 5.0: # Π΅ΡΠ»ΠΈ Π΄ΠΈΡΡΠ°Π³ΡΡΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΌΠ΅Π½ΡΡΠ΅ 5, ΡΠΎ...
self.camera.setPos(self.camera.getPos() - camvec * (5 - camdist)) # ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ
camdist = 5.0 # Π²ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ
self.camera.lookAt(self.floater) # Π²ΠΎΡ ΠΈ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΠ»ΡΡ Π½Π°Ρ floater
return task.cont # Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π·Π°Π΄Π°ΡΡ
def addInstructions(self, pos, msg):
return OnscreenText(text=msg, style=1, fg=(1,1,1,1), font=self.inst_font, pos=(-1.3, pos), align=TextNode.ALeft, scale = .04, shadow=(0,0,0,1)) # Π€ΡΠ½ΠΊΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΏΡΠ°Π²Π»ΡΡΡ
def addTitle(self, text):
return OnscreenText(text=text, style=1, fg=(1, 1, 1, 1), scale=0.2,
parent=base.a2dBottomRight, align=TextNode.ARight,
pos=(-0.1, 0.09), shadow=(0, 0, 0, 1), font=self.font) # Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Ρ ΡΡΠΈΡΡΠΎΠΌ ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΠ΅ΠΉ
droid = DroidShooter() # Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ
droid.run() # 3Π°ΠΏΡΡΡΠΈΠΌ ΠΈΠ³ΡΡ
# ΡΠ°Π·ΡΠΎΠ±ΠΎΡΡΠΈΠΊΠΈ :
# ΠΠ»Π°Π²Π½ΡΠΉ Π°Π²ΡΠΎΡ : ma3rx
# ΠΠΎΠΌΠΎΡΠ½ΠΈΠΊ : panda3dmastercoder( ΠΏΡΠΈΡΠΎΠ΅Π΄Π΅Π½ΠΈΠ»ΡΡ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ 31 ΡΠ½Π²Π°ΡΡ, 2021 Π³ΠΎΠ΄Π°, 12:??)
# Π Π΅ΠΊΠ»Π°ΠΌΡΠΈΠΊ : rdb (Π½Π°ΠΏΠΈΡΠ°Π» ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΎΡΡΠΌΠ΅ 6 ΡΠ΅Π²ΡΠ°Π»Ρ 2021 Π³ΠΎΠ΄Π°, 20:11)
3.0.6.2 update - bug fix shaders!
Add directory ./shaders : shaders.zip
New code :
#!/usr/bin/env python
# -*- coding: utf_8 -*-
# Π‘ΠΎΠ·Π΄Π°Π½ΠΎ : 22 ΡΠΈΡΠ»ΠΎ, ΡΠ½Π²Π°ΡΡ, 2021 Π³ΠΎΠ΄
# ΠΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ
from direct.showbase.ShowBase import ShowBase
from panda3d.core import CollisionTraverser, CollisionNode
from panda3d.core import CollisionHandlerPusher, CollisionSphere, CollisionInvSphere
from panda3d.core import Filename, AmbientLight, DirectionalLight
from panda3d.core import PandaNode, NodePath, Camera, TextNode
from direct.particles.Particles import Particles
from direct.particles.ParticleEffect import ParticleEffect
from panda3d.core import PointLight, Spotlight
from panda3d.core import CollideMask
from panda3d.core import loadPrcFileData
from panda3d.core import *
from direct.gui.OnscreenText import OnscreenText
from direct.gui.OnscreenImage import OnscreenImage
from direct.gui.DirectButton import DirectButton
from direct.gui.DirectSlider import DirectSlider
from direct.actor.Actor import Actor
from direct.interval.IntervalGlobal import Sequence
from direct.interval.IntervalGlobal import Wait
import random
import sys
import time
import os
import math
VERSION = '3.0.6.2'
settings = ['window-title Droid Game ' + VERSION,
'fullscreen 0']
loadPrcFileData('', settings[0]) # Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π½Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ (Π²ΠΎΠ·ΠΌΡΠΌ Π΅Π³ΠΎ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ settings)
loadPrcFileData('', settings[1]) # Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠΊΡΠ°Π½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ
# Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π³Π»Π°Π²Π½ΡΠΉ ΠΊΠ»Π°ΡΡ Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ
class DroidShooter(ShowBase):
def __init__(self):
ShowBase.__init__(self) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ Π²ΡΠ΅ ΡΠ΅Π»ΡΡ ΠΈΠ· direct
self.speed = 1800 # ΡΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ
self.GB = False # ΠΠ ΡΡΡΠ½ΠΎ-Π±Π΅Π»ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ
self.menu() # Π·Π²ΠΏΡΡΠΊ ΠΌΠ΅Π½Ρ
def menu(self):
base.enableParticles() # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΡΡΠ΅ΠΊΡ Π΄ΡΠΌΠ°
self.win.setClearColor((0, 0, 0, 1)) # ΠΠ°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ ΡΡΡΠ½ΡΠΌ. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΡΡΠΎΠΌ ΠΈΠ³ΡΠΎΠ²ΠΎΠΌ Π΄Π²ΠΈΠΆΠΊΠ΅ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ Π·Π°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΡΠΌ.
self.font = loader.loadFont('./fonts/doom_font.ttf') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΡΠΈΡΡ ΠΈΠ· ΠΈΠ³ΡΡ doom
self.inst_font = loader.loadFont('./fonts/arial.ttf') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΡΠΈΡΡ arial
self.crackSound = loader.loadMusic('./sounds/crack.wav') # Π·Π²ΡΠΊ Π²Π·ΡΡΠ²Π° ΠΊΠΎΡΠ°Π±Π»Ρ
self.shotSound = loader.loadMusic('./sounds/shot.wav') # Π·Π²ΡΠΊ Π²ΡΡΡΡΠ΅Π»Π°
self.startSound = loader.loadMusic('./sounds/started.wav') # Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ°
self.errorSound = loader.loadMusic('./sounds/error.wav') # Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ°
self.errorSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.startSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.crackSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.shotSound.setVolume(1) # ΠΏΠΎΠ»Π½Π°Ρ Π³ΡΠΎΠΌΠΊΠΎΡΡΡ Π·Π²ΡΠΊΠ°
self.startSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ
self.button_start = DirectButton(pos=(0.7, 0, 0.4), text="CTAPT",
scale=.2, pad=(.2, .2),
command=self.load_game) # ΠΊΠ½ΠΎΠΏΠΊΠ° Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ
self.gb_start = DirectButton(pos=(0.7, 0, 0.1), text="GB",
scale=.2, pad=(.2, .2),
command=self.gb_mode) # ΠΊΠ½ΠΎΠΏΠΊΠ° Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ³ΡΡ Π² ΡΡΡΠ½ΠΎ-Π±Π΅Π»ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅
self.slider_sun = DirectSlider(pos=(0.1, 0, .75), scale=0.8, value=0.5,
command=self.set_sun_interval)
self.title = self.addTitle("Droid game " + VERSION)
# ΠΠ°ΠΏΠ΅ΡΠ°ΡΠ°Π΅ΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅
self.inst1 = self.addInstructions(0.95, u"[ESC]: ΠΡΡ
ΠΎΠ΄")
self.inst2 = self.addInstructions(0.90, u"[Left Arrow]: ΠΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² Π»Π΅Π²ΠΎ")
self.inst3 = self.addInstructions(0.85, u"[Right Arrow]: ΠΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² ΠΏΡΠ°Π²ΠΎ")
self.inst4 = self.addInstructions(0.80, u"[Up Arrow]: ΠΠΏΠ΅ΡΠ΅Π΄")
self.inst5 = self.addInstructions(0.75, u"[a]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΎ")
self.inst6 = self.addInstructions(0.70, u"[d]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² Π»Π΅Π²ΠΎ")
self.inst7 = self.addInstructions(0.65, u"[Left Arrow + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst8 = self.addInstructions(0.60, u"[Right Arrow + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ Π΄ΡΠΎΠΈΠ΄Π° Π² ΠΏΡΠ°Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst9 = self.addInstructions(0.55, u"[a + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst10 = self.addInstructions(0.50, u"[d + Up arrow]: ΠΏΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π² Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΠ΅ΡΡΠ΄")
self.inst11 = self.addInstructions(0.45, u"[space]: ΡΡΡΠ΅Π»ΡΠ±Π°")
self.inst12 = self.addInstructions(0.40, u"[s]: Π΄ΠΎΡΡΠ°ΡΡ ΡΠΎΠ½Π°ΡΠΈΠΊ")
self.inst13 = self.addInstructions(0.35, u"[w]: ΡΠ±ΡΠ°ΡΡ ΠΎΡΡΠΆΠΈΠ΅")
self.inst14 = self.addInstructions(0.30, u"[f]: ΠΏΠΎΠ»Π½ΡΠΉ ΡΠ°Π·Π³ΠΎΠ½(ΠΠΠΠ‘ΠΠ!)")
self.inst15 = self.addInstructions(0.25, u"[0]: ΠΏΠΎΠΆΠ°ΡΠΎΡΡΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°")
self.accept("escape", sys.exit) # ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ Esc Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ.
def set_sun_interval(self):
self.sun_interval = self.slider_sun.guiItem.getValue() * 100 # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ»Π°ΠΉΠ΄Π΅ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΎΠ΅ Π½Π° 500, Π΄Π° ΡΡΠ°ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½ΠΎ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΏΠ»Π΅Π²Π°ΡΡ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅Π½Ρ, ΠΈΠ±ΠΎ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ½ΡΡΠΈΡ ΠΏΡΠΎΡΡΠΎ Π½Π΅ΡΡ :)
def gb_mode(self):
'''Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠ½ΠΎΠ±Π΅Π»ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ°'''
self.GB = True
def load_game(self):
self.button_start.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ ΡΡΠ°ΡΡΠ°
self.gb_start.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ ΡΡΡΠ½ΠΎ Π±Π΅Π»ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ°.
self.title.hide() # ΡΠ΄Π°Π»ΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠ³ΡΡ
# ΡΠ΄Π°Π»ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
self.inst1.hide()
self.inst2.hide()
self.inst3.hide()
self.inst4.hide()
self.inst5.hide()
self.inst6.hide()
self.inst7.hide()
self.inst8.hide()
self.inst9.hide()
self.inst10.hide()
self.inst11.hide()
self.inst12.hide()
self.inst13.hide()
self.inst14.hide()
self.inst15.hide()
self.slider_sun.hide() # ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΡΠ»Π°ΠΉΠ΄Π΅Ρ ΡΠΎΠ»Π½ΡΠ°
self.keyMap = {
"left": 0, "right": 0, "forward": 0, "cam-left": 0, "cam-right": 0} # Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ»ΠΎΠ²Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΏΠΎ ΠΈΡ
Π½Π°ΠΆΠ°ΡΠΈΡ
# Π ΠΈΡΡΠ΅ΠΌ Π·Π²ΡΠ·Π΄Ρ
self.sky = loader.loadModel("./models/sky/solar_sky_sphere") # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΊΠΎΡΠΌΠΎΡΠ°(ΡΡΠΎ ΡΡΠ΅ΡΠ°)
self.sky_tex = loader.loadTexture("./tex/stars_1k_tex.jpg") # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ΅ΠΊΡΡΡΡΡ
self.sky.setTexture(self.sky_tex, 1) # Π·Π°ΡΠ΅Π½Π΄Π΅ΡΠΈΠΌ ΡΠ΅ΠΊΡΡΡΡΡ Π½Π° Π½Π΅Π±ΠΎ
self.sky.reparentTo(render) # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π½Π΅Π±ΠΎ
self.sky.setScale(40000) # ΡΠ°ΡΡΠΈΡΠΈΠΌ Π½Π΅Π±ΠΎ Π΄ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ panda3d
self.environ = loader.loadModel("models/world/falcon.egg") # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π² blender ΠΌΠΈΡ.
self.environ.reparentTo(render) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΌΠΈΡΠ° Π² ΠΎΠΊΠ½ΠΎ
droidStartPos = (-1, 0, 1.5 ) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΡΡΠ°ΡΡΠΎΠ²ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π² ΠΌΠΈΡΠ΅.
enemyStartPos = (-6, 1, 0.5) # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ°-Π΄ΡΠΎΠΈΠ΄Π°.
self.droid = Actor("models/player/seeker.egg") # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° (ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π² blender)
self.enemy = Actor("models/enemies/r2d2/r2d2.egg") # ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° (ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ Π² blender)
self.droid.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π² Π½Π°Ρ ΠΌΠΈΡ.
self.enemy.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π² Π½Π°Ρ ΠΌΠΈΡ.
self.droid.setScale(1) # ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° 1
self.enemy.setScale(1) # ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π½Π° 1
self.droid.setPos(droidStartPos) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ΡΡ Π½Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ
self.enemy.setPos(enemyStartPos) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π½Π° ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ΡΡ Π½Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ
self.weapon = Actor('models/weapon/lightsaber.egg') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.bullet = Actor('models/weapon/bullet/bullet.egg.pz') # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΠΏΡΠ»Ρ
self.flash = Actor('models/whishlyflash/handlamp.egg') # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.weapon.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ Π² Π½Π°Ρ ΠΌΠΈΡ
self.bullet.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΏΡΠ»Ρ Π² ΠΌΠΈΡ Π½ΠΎ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΎΠ½Π° ΡΠ°ΠΌΠ° Π½Π΅ ΡΠΊΠΎΡΠΎ
self.flash.reparentTo(render) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ Π² Π½Π°Ρ ΠΌΠΈΡ
self.weapon.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΡΠΊΠΈ
self.bullet.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΠ»ΠΈ
self.flash.setScale(.5) # Π·Π°Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΎΠ½Π°ΡΠΈΠΊΠ°
# Π²ΡΠ°ΠΆΠ΅ΡΠΊΠΈΠΉ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter = Actor('models/fighter/fighter.egg') # Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΡ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter.reparentTo(render) # ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΈΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.fighter.setPos(0, 90, 0) # ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 1 # ΠΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΡΠΊΠΈ
self.weapon.setPos(self.weapon_pos) # ΠΠΎΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ ΡΡΡΡ Π²ΡΡΠ΅ ΠΈΠ³ΡΠΎΠΊΠ°
self.cube = Actor('models/block/crate.egg') # Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ Π±Π»ΠΎΠΊ
self.cube.reparentTo(render)
self.cube.setPos(0, -0, 0) # ΠΏΠΎΠ·ΠΈΡΠΈΡ ΡΡΠΈΠΊΠ°
self.cube.setScale(0.7)
self.cube.hprInterval(1.5, (0, 360, 360)).loop()
self.Intervalcube = self.cube.posInterval(13,
Point3(0, -500, 0),
startPos=Point3(0, 10, 0))
self.Intervalcube.loop()
self.spotlight = camera.attachNewNode(Spotlight("spotlight")) # ΠΠΎΠ½ΡΠΈΠ³ΠΈ ΡΠΎΠ½Π°ΡΠΈΠΊΠ°
self.spotlight.node().setColor((.3, .3, .3, 1))
self.spotlight.node().setSpecularColor((0, 0, 0, 1))
self.floater = NodePath(PandaNode("floater"))
self.floater.reparentTo(self.droid)
self.floater.setZ(2.0)
self.accept("escape", sys.exit) # ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ Esc Π²ΡΡ
ΠΎΠ΄ΠΈΠΌ.
self.accept("arrow_left", self.setKey, ["left", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π»Π΅Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ
self.accept("arrow_right", self.setKey, ["right", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΏΡΠ°Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²ΠΏΡΠ°Π²ΠΎ
self.accept("arrow_up", self.setKey, ["forward", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΏΠ΅ΡΡΠ΄ - ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("a", self.setKey, ["cam-left", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ a - ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΠΈ
self.accept("d", self.setKey, ["cam-right", True]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ s - ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΎΠΊΡΡΠ³ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΠΊΠΈ
self.accept("arrow_left-up", self.setKey, ["left", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+Π²Π»Π΅Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("arrow_right-up", self.setKey, ["right", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+ΠΏΡΠ°Π²ΠΎ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° Π²ΠΏΡΠ°Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("arrow_up-up", self.setKey, ["forward", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²Π²Π΅ΡΡ
+Π²Π²Π΅ΡΡ - ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("a-up", self.setKey, ["cam-left", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ a+Π²ΠΏΠ΅ΡΡΠ΄ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²Π»Π΅Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("d-up", self.setKey, ["cam-right", False]) # ΠΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ s+Π²ΠΏΠ΅ΡΡΠ΄ - ΠΏΠΎΠ²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π²ΠΏΡΠ°Π²ΠΎ ΠΈ ΠΈΠ΄ΡΠΌ Π²ΠΏΠ΅ΡΡΠ΄
self.accept("space", self.shot) # ΠΏΡΠΈ ΠΏΡΠΎΠ±Π΅Π»Π΅ ΡΡΡΠ΅Π»ΡΠ΅ΠΌ
self.accept("s", self.toggleLights, [[self.spotlight]]) # ΠΠΊΠ»ΡΡΠΈΡΡ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.accept("w", self.weapon_hide) # ΠΏΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ΅ w - ΡΠ±Π΅ΡΡΠΌ ΠΎΡΡΠΆΠΈΠ΅.
base.enableParticles() # ΠΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄ΡΠΌΠ°
self.t = loader.loadModel("models/weapon/lightsaber.egg") # ΠΠ°Π³ΡΡΠ·ΠΈΠΌ Π΅ΡΡ ΠΎΡΡΠΆΠΈΠ΅
self.t.reparentTo(render) # ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΎΡΡΠΆΠΈΠ΅ Π² Π½Π°Ρ ΠΌΠΈΡ
self.p = ParticleEffect() # ΠΠΊΠ»ΡΡΠΈΠΌ ΡΡΡΠ΅ΠΊΡ Π΄ΡΠΌΠ°
self.accept('f', self.particle_start) # ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ f(ΠΎΡ force) - Π·Π°Π³ΡΡΠ·ΠΈΠΌ ΡΠ°ΠΉΠ» Π΄ΡΠΌΠ° ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ Π² ΠΊΠΎΠ½ΡΠΈΠ³ ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠ° Π°Π½ΠΈΠΌΠ°ΡΠΈΡ ΡΡΠ°Π»Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΄ΡΠΌΠ°
self.accept('0', self.fountain) # ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ f+o(fountain) Π²ΠΊΠ»ΡΡΠΈΠΌ ΠΏΠΎΠΆΠ°ΡΠΎΡΡΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ
taskMgr.add(self.move, "moveTask") # ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π·Π°Π΄Π°ΡΡ Π² Π½Π°Ρ Π΄Π²ΠΈΠΆΠΎΠΊ
self.isMoving = False # Π‘ΡΠ°Π²ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ isMoving Π½Π° False(ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΌΠ΅Π½ΡΡΡ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅) ΡΡΠΎΠ±Ρ ΠΈΠ³ΡΠΎΠΊ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΡΠΎΡΠ».
# ΠΠ΅Π»Π°Π΅ΠΌ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΡΠ²Π΅Ρ Π±ΡΠ» ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π²ΡΠΊΠ»ΡΡΠ΅Π½.
self.disableMouse() # ΠΡΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· ΠΌΡΡΠΊΡ
self.camera.setPos(self.droid.getX(), self.droid.getY() + 1, 3) # Π‘ΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΡΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ³ΡΠΎΠΊΠ°
self.black_light() # Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π²ΡΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ²Π΅Ρ
self.state = 100 # Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠΎΡΠ°Π±Π»Ρ
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.hide_weapon = False # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΎΡΡΠΆΠΈΠ΅ Π½Π΅ ΡΠ±ΡΠ°Π½ΠΎ
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 5)
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 1)
self.motor_pos1 = 25.238849639892578, 8.962211608886719, 1.5 # ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΌΠΎΡΠΎΡΠ°
self.motor_pos2 = -20.676218032836914, 10.55816650390625, 1.5 # ΠΏΠΎΠ·ΠΈΡΠΈΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΡΠΎΡΠ°
self.motor1 = self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.motor_pos1) # ΠΌΠΎΡΠΎΡ 1
self.motor2 = self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.motor_pos2) # ΠΌΠΎΡΠΎΡ 2
self.state_info2 = OnscreenText(text='', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.force = False # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ Π½Π΅ ΡΠ°Π·Π³ΠΎΠ½ΡΠ»ΠΈΡΡ
# ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ ΠΊΠΎΡΠ°Π±Π»Ρ(ΠΎΠ½ Ρ Π½Π°Ρ ΠΊΠ°ΠΊ Π³Π»Π°Π²Π½Π°Ρ ΠΊΠ°ΡΡΠ°).
self.cTrav = CollisionTraverser()
pusher = CollisionHandlerPusher()
pusher.setHorizontal(True)
environCenter = self.environ.getBounds().getCenter()
environRad = self.environ.getBounds().getRadius()
cNode = CollisionNode("environment")
cNode.addSolid(CollisionInvSphere(environCenter, environRad))
environC = self.environ.attachNewNode(cNode)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ Π΄ΡΠΎΠΈΠ΄Π°.
droidCenter = self.droid.getBounds().getCenter()
droidRad = self.droid.getBounds().getRadius()
cNode = CollisionNode("droid")
cNode.addSolid(CollisionSphere(droidCenter, droidRad))
droidC = self.droid.attachNewNode(cNode)
pusher.addCollider(droidC, self.droid)
self.cTrav.addCollider(droidC, pusher)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ°.
enemyCenter = self.enemy.getBounds().getCenter()
enemyRad = self.enemy.getBounds().getRadius()
cNode = CollisionNode("enemy")
cNode.addSolid(CollisionSphere(enemyCenter, enemyRad))
enemyC = self.enemy.attachNewNode(cNode)
pusher.addCollider(enemyC, self.enemy)
self.cTrav.addCollider(enemyC, pusher)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ Π²ΡΠ°ΠΆΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ.
fighterCenter = self.fighter.getBounds().getCenter()
fighterRad = self.fighter.getBounds().getRadius()
cNode = CollisionNode("fighter")
cNode.addSolid(CollisionSphere(fighterCenter, fighterRad))
fighterC = self.fighter.attachNewNode(cNode)
pusher.addCollider(fighterC, self.fighter)
self.cTrav.addCollider(fighterC, pusher)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ ΠΏΡΠ»ΠΈ.
bulletCenter = self.bullet.getBounds().getCenter()
bulletRad = self.bullet.getBounds().getRadius()
cNode = CollisionNode("bullet")
cNode.addSolid(CollisionSphere(bulletCenter, bulletRad))
bulletC = self.bullet.attachNewNode(cNode)
bulletCenter = self.bullet.getBounds().getCenter()
bulletRad = self.bullet.getBounds().getRadius()
cNode = CollisionNode("bullet")
cNode.addSolid(CollisionSphere(bulletCenter, bulletRad))
bulletC = self.bullet.attachNewNode(cNode)
pusher.addCollider(bulletC, self.bullet)
self.cTrav.addCollider(bulletC, pusher)
# ΠΠΎΠ»Π»ΠΈΠ·ΠΈΡ ΠΏΡΡΠΊΠΈ. Π― Π±Ρ Π½Π΅ ΡΠΊΠ°Π·Π°Π», ΡΡΠΎ ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΡ, ΡΠΊΠΎΡΠ΅Π΅ ΡΡΠΎ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΠΎΡΡΠΈ
weaponCenter = self.weapon.getBounds().getCenter()
weaponRad = self.weapon.getBounds().getRadius()
cNode = CollisionNode("weapon")
cNode.addSolid(CollisionSphere(weaponCenter, weaponRad))
weaponC = self.weapon.attachNewNode(cNode)
pusher.addCollider(weaponC, self.weapon)
self.cTrav.addCollider(weaponC, pusher)
# ΡΠΎΠ»Π½ΡΠ΅(Π½ΠΎΠ²Π°Ρ ΠΌΠ΅Ρ
Π°Π½ΠΈΠΊΠ° ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΡ)
sun = DirectionalLight("sun")
sun.set_color_temperature(6000)
sun.color = sun.color * 4
sun_path = render.attach_new_node(sun)
sun_path.set_pos(10, -10, -10)
sun_path.look_at(0, 0, 0)
sun_path.hprInterval(self.sun_interval, (sun_path.get_h(), sun_path.get_p() - 360, sun_path.get_r()), bakeInStart=True).loop()
render.set_light(sun_path)
# ΠΡΠ»ΠΈ ΠΈΠ³ΡΠΎΠΊ Π·Π°Ρ
ΠΎΡΠ΅Π» ΠΏΠΎΠΈΠ³ΡΠ°ΡΡ Π² ΡΡΡΠ½ΠΎΠ±Π΅Π»ΡΡ ΠΈΠ³ΡΡ, ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΡΡΠΎ
if self.GB :
render.set_shader(Shader.load(Shader.SL_GLSL, "./shaders/lighting.vert", "./shaders/lighting.frag")) # ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ΅ΠΉΠ΄Π΅ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ!
def fight_force(self):
# ΡΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π·Π° Π½Π°ΡΠΈΠΌ ΠΊΠΎΡΠ°Π±Π»ΡΠΌ(ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Ρ ΡΠ΄Π΅Π»Π°Π» ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΈΡΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π·Π°ΠΆΠΈΠΌΠ°Π» Π½Π°Ρ(Π»Π΅ΡΠ°Π» Π² Π½Π°ΡΠ΅ΠΌ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ΅)) ΠΈ Π·Π°ΠΆΠΈΠΌΠ°Π΅Ρ ΠΎΠ½ ΡΠ΅Π°Π»ΡΠ½ΠΎ, ΡΠ±Π»ΠΈΠΆΠ°Ρ ΠΊ Π½Π°ΠΌ ΡΠ²ΠΎΠΉ ΠΊΠ²Π°Π΄ΡΠ°Ρ
self.fighter.setY(self.fighter.getY() - self.speed)
self.fighter.setX(self.fighter.getX() - 10)
print(self.fighter.getX())
def loadParticleConfig(self, filename, pos):
self.p.cleanup()
self.p = ParticleEffect()
self.p.loadConfig(Filename(filename))
self.p.start(self.t)
self.p.setPos(pos)
def particle_start(self):
self.force = True # ΠΠΎΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΌΡ ΡΠΆΠ΅ ΡΠ°Π·Π³ΠΎΠ½ΡΠ»ΠΈΡΡ
# ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.environ.setY(self.environ.getY() - self.speed) # Π½Π΅ΡΡΠΌΡΡ Π²ΠΏΡΠ°Π²ΠΎ
self.droid.setY(self.droid.getY() - self.speed) # ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ Π΄ΡΠΎΠΈΠ΄Π° Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.enemy.setY(self.enemy.getY() - self.speed) # ΡΠ΄ΡΠΈΠ³Π°Π΅ΠΌ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠ° Π·Π° ΠΊΠΎΡΠ°Π±Π»ΡΠΌ
self.weapon.setY(self.weapon.getY() - self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.flash.setY(self.flash.getY() - self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΠΎΠ½Π°ΡΠΈΠΊ
self.cube.setY(self.cube.getY() - self.speed) # ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΡΠΈΠΊ
self.fight_force()
self.state -= 1 # ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΠΌΠ΅Π½ΡΡΠ΅ ΠΎΡΠΊΠΎΠ²
self.state_info.hide() # ΡΠ΄Π°Π»ΠΈΠΌ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΎΡΠΊΠΈ
if self.state != 10 and self.state > 10:
self.state_info.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΠΆΠΈΠ·Π½ΡΡ
ΠΊΠΎΡΠ°Π±Π»Ρ
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam/steam.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ Π½Π΅ΠΈΡΠΏΡΠ°Π²Π΅Π½', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
else:
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam_critic/steam.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
if self.state < 10:
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.check_loss() # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
self.steam_pos = random.randrange(0, 5), random.randrange(0, 5) + 300, random.randrange(0, 5)
self.loadParticleConfig('special_effects/steam_critic+/fireish.ptf', self.steam_pos)
self.errorSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄Π΅Π΄ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
self.state_info2 = OnscreenText(text='ΠΏΠ°Π΄Π°Π΅ΠΌ!', pos=(-0.8, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
def fountain(self):
self.state_info2.hide() # ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΡΠ΅ΠΊΡΡ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ
if self.force:
if self.state != 100:
self.state += 1
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5) + 500, random.randrange(0, 1)
self.loadParticleConfig('special_effects/fountain/fountain.ptf', self.fountain_pos)
else :
if self.state != 100:
self.state += 1
self.state_info.hide()
self.state_info = OnscreenText(text='ΠΊΠΎΡΠ°Π±Π»Ρ :' + str(self.state), pos=(0.5, 0.8), scale=0.1, fg=(1, 1, 1, 1), align=TextNode.ALeft, font=self.font) # ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΡΠ°Π±Π»Ρ
self.fountain_pos = random.randrange(0, 5), random.randrange(0, 5), random.randrange(0, 1)
self.loadParticleConfig('special_effects/fountain/fountain.ptf', self.fountain_pos)
def black_light(self):
# ΠΡΠΊΠ»ΡΡΠ΅Π½ΡΠΉ ΡΠ²Π΅Ρ
ambientLight = AmbientLight("ambientLight")
ambientLight.setColor((0, 0, 0, 1))
directionalLight = DirectionalLight("directionalLight")
directionalLight.setDirection((-5, -5, -5))
directionalLight.setColor((1, 1, 1, 1))
directionalLight.setSpecularColor((1, 1, 1, 1))
render.setLight(render.attachNewNode(ambientLight))
render.setLight(render.attachNewNode(directionalLight))
def weapon_hide(self):
# Π£Π±ΡΠ°ΡΡ ΠΎΡΡΠΆΠΈΠ΅
self.hide_weapon = True
self.weapon.hide()
def toggleLights(self, lights):
# Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΠ΅
if self.hide_weapon:
for light in lights:
if render.hasLight(light):
render.clearLight(light)
else:
render.setLight(light)
self.flash.setPos(self.weapon_pos)
else:
return
def shot(self):
dt = globalClock.getDt() + 0.5 # CΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
if not self.hide_weapon : # Π΅ΡΠ»ΠΈ ΠΎΡΡΠΆΠΈΠ΅ ΡΠ±ΡΠ°Π½ΠΎ ΡΠΎ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΡΠ΅Π»ΡΡΡ
self.shotSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π²ΡΡΡΡΠ΅Π»Π°
self.bullet.setPos(self.weapon_pos) # ΠΡΠ»Ρ Π±ΡΠ΄Π΅Ρ ΡΠΏΠ°Π²Π½ΠΈΡΡΡ Π²Π½ΡΡΡΠΈ ΠΏΡΡΠΊΠΈ
self.bullet.setY(self.bullet, -11 * dt) # Π‘Π΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΏΡΠ»Ρ Π½Π° ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ Π²ΠΏΠ΅ΡΡΠ΄
def check_loss(self):
if self.state == 0: # Π΅ΡΠ»ΠΈ ΠΆΠΈΠ·Π½Π΅ΠΉ Ρ ΠΊΠΎΡΠ°Π±Π»Ρ Π½Π΅ ΠΎΡΡΠ°Π»ΠΎΡΡ
self.black_light() # Π²ΠΊΠ»ΡΡΠΈΠΌ ΡΡΡΠ½ΡΠΉ ΡΠ²Π΅Ρ
self.weapon_hide() # ΡΠ±Π΅ΡΡΠΌ ΠΎΡΡΠΆΠΈΠ΅
self.info = OnscreenText(text='ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠ΅', style=1, font=self.font,
fg=(1,1,1,1),
pos=(-1.3, -0.5), align=TextNode.ALeft, scale=0.3) # Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΎ ΠΏΠΎΡΠ°ΠΆΠ΅Π½ΠΈΠΈ
self.crackSound.play() # ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ Π²Π·ΡΡΠ²Π°
def setKey(self, key, value):
self.keyMap[key] = value # ΠΠ΅Π»Π°Π΅ΠΌ ΠΌΠ΅Ρ
aΠ½uΠ·ΠΌ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ.
def move(self, task):
''' ΠΠ΅Π»Π°Π΅ΠΌ ΡΡΡΠ½ΠΊΡΠΈΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° '''
dt = globalClock.getDt() - .005 # CΠΊΠΎΡΠΎΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ
# ΠΠΎΠ²ΠΎΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π²Π»Π΅Π²ΠΎ ΠΈ Π²ΠΏΡΠ°Π²ΠΎ
if self.keyMap["cam-left"]:
self.camera.setX(self.camera, -20 * dt) # ΠΠ΅Π½ΡΠ΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΊΠ° ΠΊΠ°ΠΌΠ΅ΡΡ ΠΏΠΎ ΠΈΠΊΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈΠ»ΡΠ·ΠΈΡ ΠΏΠΎΠ²ΠΎΡΠΎΡΠ° ΡΠ³Π»Π° Π»ΡΡΠ°. ΠΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΊΠ°ΠΌΠ΅ΡΠ° ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ.
if self.keyMap["cam-right"]:
self.camera.setX(self.camera, +20 * dt) # Π’ΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ Π½Π°Π²Π΅ΡΡ
Ρ.
startpos = self.droid.getPos() # Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ΄ΠΎΠ±Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ³ΡΠΎΠΊΠ°
if self.keyMap["left"]:
self.droid.setH(self.droid.getH() + 300 * dt)
self.enemy.setY(self.enemy, 1 * dt)
if self.keyMap["right"]:
self.droid.setH(self.droid.getH() - 300 * dt)
self.enemy.setY(self.enemy, -1 * dt)
if self.keyMap["forward"]:
self.droid.setY(self.droid, -25 * dt)
self.enemy.setX(self.enemy, 1 * dt)
# Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ±ΡΠ°Π½ΠΎ ΠΎΡΡΠΆΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ
if not self.hide_weapon:
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 3
self.weapon.setPos(self.weapon_pos) # ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΡΠΊΠΈ
else:
self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 3
self.flash.setPos(self.weapon_pos)
camvec = self.droid.getPos() - self.camera.getPos() # Π²Π΅ΠΊΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ
camvec.setZ(0) # 0 Π²ΡΡΠΎΡΠ° Π²Π΅ΠΊΡΠΎΡΠ°
camdist = camvec.length() # Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΎΡ Π΄ΡΠΎΠΈΠ΄Π°
camvec.normalize() # Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π²Π΅ΠΊΡΠΎΡ ΠΊΠ°ΠΌΠ΅ΡΡ
if camdist > 10.0: # Π΅ΡΠ»ΠΈ Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ ΠΊΠ°ΠΌΠ΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅ 10, ΡΠΎ ΡΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ Π·Π° Π΄ΡΠΎΠΎΠΈΠ΄ΠΎΠΌ
self.camera.setPos(self.camera.getPos() + camvec * (camdist - 10))
camdist = 10.0 # ΡΠ΅ΠΏΠ΅ΡΡ Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠ½ΠΎΠ²Π° 10
if camdist < 5.0: # Π΅ΡΠ»ΠΈ Π΄ΠΈΡΡΠ°Π³ΡΡΡ ΠΊΠ°ΠΌΠ΅ΡΡ ΠΌΠ΅Π½ΡΡΠ΅ 5, ΡΠΎ...
self.camera.setPos(self.camera.getPos() - camvec * (5 - camdist)) # ΡΠ΄Π²ΠΈΠ³Π°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅ΡΡ
camdist = 5.0 # Π²ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ
self.camera.lookAt(self.floater) # Π²ΠΎΡ ΠΈ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΠ»ΡΡ Π½Π°Ρ floater
return task.cont # Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π·Π°Π΄Π°ΡΡ
def addInstructions(self, pos, msg):
return OnscreenText(text=msg, style=1, fg=(1,1,1,1), font=self.inst_font, pos=(-1.3, pos), align=TextNode.ALeft, scale = .04, shadow=(0,0,0,1)) # Π€ΡΠ½ΠΊΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΏΡΠ°Π²Π»ΡΡΡ
def addTitle(self, text):
return OnscreenText(text=text, style=1, fg=(1, 1, 1, 1), scale=0.2,
parent=base.a2dBottomRight, align=TextNode.ARight,
pos=(-0.1, 0.09), shadow=(0, 0, 0, 1), font=self.font) # Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Ρ ΡΡΠΈΡΡΠΎΠΌ ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΠ΅ΠΉ
droid = DroidShooter() # Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Π½Π°ΡΠ΅ΠΉ ΠΈΠ³ΡΡ
droid.run() # 3Π°ΠΏΡΡΡΠΈΠΌ ΠΈΠ³ΡΡ
# ΡΠ°Π·ΡΠΎΠ±ΠΎΡΡΠΈΠΊΠΈ :
# ΠΠ»Π°Π²Π½ΡΠΉ Π°Π²ΡΠΎΡ : ma3rx
# ΠΠΎΠΌΠΎΡΠ½ΠΈΠΊ : panda3dmastercoder( ΠΏΡΠΈΡΠΎΠ΅Π΄Π΅Π½ΠΈΠ»ΡΡ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ 31 ΡΠ½Π²Π°ΡΡ, 2021 Π³ΠΎΠ΄Π°, 12:??)
# Π Π΅ΠΊΠ»Π°ΠΌΡΠΈΠΊ : rdb (Π½Π°ΠΏΠΈΡΠ°Π» ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΎΡΡΠΌΠ΅ 6 ΡΠ΅Π²ΡΠ°Π»Ρ 2021 Π³ΠΎΠ΄Π°, 20:11)
Hey, release of droid game coming soon!