1

I am making a game in Ursina Engine and I am trying to delete Entity by clicking it. Everything works fine until I click it. It won't destroy the Entity it just shutdowns the game

Here is my code, I have tried everything I can imagine.

from ursina.prefabs.health_bar import HealthBar
from ursina import *
app = Ursina()
import time

def file_path(relative_path):
    try:
        base_path =sys._MEIPASS
    except Exception as e:
        base_path = os.path.abspath('.')
    return os.path.join(base_path, relative_path)

from ursina.prefabs.first_person_controller \
  import FirstPersonController

HB1 = HealthBar(bar_color=color.lime.tint(-.25),
                roundness=.5,
                scale=(1.5, .06))

def input(key):
    if key == '-' or key == '- hold':
        damage(5)
    if key == '+' or key == '+ hold':
        heal(5)

def damage(power):
    HB1.value -= power

def heal(value):
    HB1.value += value



player = FirstPersonController(
  collider='box'
)

enemy = Entity(model='cube', position=(2,2,6), color=color.dark_gray, scale=2, collider='box', texture='white_cube')

enemy.add_script(SmoothFollow(target = player, offset = [0,0,0], speed = 0.2))

floor = Entity(model='cube', position=(0,0,0), scale=(100,1,100), texture='grass', double_sided=True, collider='box')

def kill():
    if distance_xz(enemy, player) < 3:
        if enemy.hovered:
            if held_keys['left mouse']:
                destroy(enemy)  
def update():
    kill()
    if distance_xz(enemy, player) < 2:
        damage(2)
    if HB1.value == 0:
        quit()

sky = Sky()

app.run()

1 Answers1

1

The code was just DESTROYING the enemy but, you have to check if the enemy exists or not everytime you check for distance between player and enemy or anything else, here is the full working code :

from ursina.prefabs.health_bar import HealthBar
from ursina import *
app = Ursina()
import time

def file_path(relative_path):
    try:
        base_path =sys._MEIPASS
    except Exception as e:
        base_path = os.path.abspath('.')
    return os.path.join(base_path, relative_path)

from ursina.prefabs.first_person_controller \
import FirstPersonController

HB1 = HealthBar(bar_color=color.lime.tint(-.25),
                roundness=.5,
                scale=(1.5, .06))

def input(key):
    if key == '-' or key == '- hold':
        damage(5)
    if key == '+' or key == '+ hold':
        heal(5)

def damage(power):
    HB1.value -= power

def heal(value):
    HB1.value += value



player = FirstPersonController(
collider='box'
)

enemy = Entity(model='cube', position=(2,2,6), color=color.dark_gray, scale=2, collider='box', texture='white_cube')

enemy.add_script(SmoothFollow(target = player, offset = [0,0,0], speed = 0.2))

floor = Entity(model='cube', position=(0,0,0), scale=(100,1,100), texture='grass', double_sided=True, collider='box')

def kill():
    if enemy:
        if distance_xz(enemy, player) < 3:
            if enemy.hovered:
                if held_keys['left mouse']:
                    destroy(enemy)  
def update():
    kill()
    if enemy:
        
        if distance_xz(enemy, player) < 2: 
            damage(2)
    if HB1.value == 0:
        quit()

sky = Sky()

app.run()
Tanay
  • 561
  • 1
  • 3
  • 16
  • I did not get it work. Do you have any other ideas how it might work? @Tanay – AlienPlayerBoy Dec 24 '22 at 18:24
  • @AlienPlayerBoy This works perfect here, **You can try to `print` something instead of quitting the window**. This will give you an idea if the code is working. – Tanay Dec 25 '22 at 11:49