Droid game 1.0.4 update!

Hi, guys. I updating the droid game(Droid game with Panda3D)
What updating? I adding accomplishment effect of the shot.
Download the 1.0.4 version of droid game : DroidHGame.zip (1.0 MB)

Bullet - iron ball from Panda3D official sample ‘ball in maze’.
Sorry, comments for code is Russian :frowning:

But, i delepoved english version. Sorry, for Russian text in program.
Zvuk(RU) - Volume(EN)

And, i add monitor of sound.
Screenshot model :

It is saying couldn’t load file models/world/falcon.egg

Check snapshot 1.0.5 : DroidHGame.zip (1.0 MB)

Where is the snapshot?

There is only main.py, models and sounds

You found error in main.py ???

Yes it is saying:
Known pipe types:
wglGraphicsPipe
(all display modules loaded.)
:loader(error): Couldn’t load file models/world/falcon.egg: not found on model p
ath (currently: “/c/Users/DELL/Desktop/Python-DOOM-master;/c/Panda3D-1.10.8-x64/
etc/…;/c/Panda3D-1.10.8-x64/etc/…/models”)
Traceback (most recent call last):
File “main.py”, line 220, in
demo = DroidShooter() # C??? ??? ??? ??? ???
File “main.py”, line 31, in init
self.environ = loader.loadModel(“models/world/falcon.egg”) # ??? ??? ??
??? ? blender ???.
File “C:\Panda3D-1.10.8-x64\direct\showbase\Loader.py”, line 298, in loadModel

raise IOError(message)

OSError: Could not load model file(s): [‘models/world/falcon.egg’]

In my computer game worked very good. Not errors… mm… I think above this.

Change : (’./models/world/falcon.egg/’)

Maybe you have not put falcon.egg. Here is the .zip file I downloaded
DroidHGame.zip (1.0 MB)

I am still getting the same error

Check direcotry models : 123

These directories are not in the models folder. I will show my models folder:
Capture

1 Like

Hello. I know, Panda3D cant loading my archive. It bigger. Panda3d server
deleted much files from my archive. :frowning:

Maybe you can put each file individually.

Hi. This archive the directory ./models add this files to directory models:
world : (add to this directory falcon enivroment for panda3d art (./art/cat-enivroments/bvw-f2004–milleniumfalcon) link to download art : )

enemies : enemies.7z (340.1 KB)
weapon : weapon.7z (199.3 KB)
New code :

#!/usr/bin/env python

# Импортируем все необходимые инструменты
from direct.showbase.ShowBase import ShowBase
from panda3d.core import CollisionTraverser, CollisionNode
from panda3d.core import CollisionHandlerQueue, CollisionRay
from panda3d.core import Filename, AmbientLight, DirectionalLight
from panda3d.core import PandaNode, NodePath, Camera, TextNode
from panda3d.core import CollideMask
from panda3d.core import loadPrcFileData
from direct.gui.OnscreenText import OnscreenText
from direct.gui.DirectSlider import DirectSlider
from direct.actor.Actor import Actor
import random
import sys
import os
import math

settings = ['window-title Droid Game 1.0.6',
            'full-screen false']

loadPrcFileData('', settings[0]) # Сделаем не стандартный заголовок (возмём его из переменной settings)
loadPrcFileData('', settings[1]) # Не будем включать полноэкранный режим            

# Создадим главный класс нашей игры
class DroidShooter(ShowBase):
    def __init__(self):
        ShowBase.__init__(self) # Загружаем все селфы из direct 

        self.win.setClearColor((0, 0, 0, 1)) # Закрашиваем поверхность чёрным. Дело в том, что по умолчанию в этом игровом движке поверхность закрашивается серым.

        self.keyMap = {
            "left": 0, "right": 0, "forward": 0, "cam-left": 0, "cam-right": 0} # Создадим словарь кнопок, по их нажатию

        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.weapon.reparentTo(render) # переместим оружие в наш мир
        self.bullet.reparentTo(render) # переместим пулю в мир но появится она сама не скоро
        self.weapon.setScale(.5) # зададим размер пушки
        self.bullet.setScale(.5) # зададим размер пули

        self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 1 # Позиция пушки
        
        self.weapon.setPos(self.weapon_pos) # Поместим оружие чуть выше игрока
        
        

        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("s", 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("s-up", self.setKey, ["cam-right", False]) # При кнопке s+вперёд - поворачиваем камеру вправо и идём вперёд

        self.accept("space", self.shot) # при пробеле стреляем
        self.accept("l", self.white_light) # при нажатии l - включаем свет.

        taskMgr.add(self.move, "moveTask") # Добавляем задачу в наш движок

        self.isMoving = False # Ставим значение isMoving на False(Вы можете менять это значение) чтобы игрок изначально стоял.
        # Делаем так, чтобы свет был изначально выключен.
        self.light = (0, 0, 0, 1)

        self.disableMouse() # Отключаем перемещение через мышку
        self.camera.setPos(self.droid.getX(), self.droid.getY() + 1, 3) # Ставим позицию камеры чуть больше позиции игрока

        self.n = 0 # количество выключений и включений света.

        self.black_light() # Сделаем выключенный свет
        
    def black_light(self):
        # Выключеный свет
        ambientLight = AmbientLight("ambientLight")
        ambientLight.setColor(self.light)
        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))
        self.n += 1
        if self.n % 4 == 0:
            self.white_light()

    def white_light(self):
        # Освещение
        self.light = (.3, .3, .3, 1)
        ambientLight = AmbientLight("ambientLight")
        ambientLight.setColor(self.light)
        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))
        self.n += 1
        if self.n % 4 == 0:
            self.black_light()




    def shot(self):
        dt = globalClock.getDt() # Выдаём скорость пули
        self.bullet.setPos(self.weapon_pos) # Пуля будет спавнится внутри пушки
        self.bullet.setY(self.bullet, -25 * dt) # Сдвигаем пулю на огромной скорости вперёд

    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)
        if self.keyMap["right"]:
            self.droid.setH(self.droid.getH() - 300 * dt)
        if self.keyMap["forward"]:
            self.droid.setY(self.droid, -25 * dt)
            self.weapon_pos = self.droid.getX(), self.droid.getY() + 0.7, 3
            self.weapon.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

droid = DroidShooter() # Создадим экземпляр класса нашей игры
droid.run() # 3апустим игру

I still can’t find the world folder

Download panda3d art

Where is panda3d art?

This topic closed.