Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,87 +1,82 @@
from ursina import *
from ursina.prefabs.first_person_controller import FirstPersonController

app = Ursina()
grass_texture = load_texture('assets/grass_block.png')
stone_texture = load_texture('assets/stone_block.png')
brick_texture = load_texture('assets/brick_block.png')
dirt_texture = load_texture('assets/dirt_block.png')
sky_texture = load_texture('assets/skybox.png')
arm_texture = load_texture('assets/arm_texture.png')
punch_sound = Audio('assets/punch_sound',loop = False, autoplay = False)
block_pick = 1

window.fps_counter.enabled = False
window.exit_button.visible = False

def update():
global block_pick
# Constants for block types
BLOCK_GRASS = 1
BLOCK_STONE = 2
BLOCK_BRICK = 3
BLOCK_DIRT = 4

# Textures for blocks
TEXTURES = {
BLOCK_GRASS: 'assets/grass_block.png',
BLOCK_STONE: 'assets/stone_block.png',
BLOCK_BRICK: 'assets/brick_block.png',
BLOCK_DIRT: 'assets/dirt_block.png'
}

if held_keys['left mouse'] or held_keys['right mouse']:
hand.active()
else:
hand.passive()
# Mapping keys to block types
BLOCK_PICKS = {
'1': BLOCK_GRASS,
'2': BLOCK_STONE,
'3': BLOCK_BRICK,
'4': BLOCK_DIRT
}

if held_keys['1']: block_pick = 1
if held_keys['2']: block_pick = 2
if held_keys['3']: block_pick = 3
if held_keys['4']: block_pick = 4
# Create the scene
scene = Entity()

def update():
# Handle block selection
handle_block_selection()

class Voxel(Button):
def __init__(self, position = (0,0,0), texture = grass_texture):
super().__init__(
parent = scene,
position = position,
model = 'assets/block',
origin_y = 0.5,
texture = texture,
color = color.color(0,0,random.uniform(0.9,1)),
scale = 0.5)

def input(self,key):
if self.hovered:
if key == 'left mouse down':
punch_sound.play()
if block_pick == 1: voxel = Voxel(position = self.position + mouse.normal, texture = grass_texture)
if block_pick == 2: voxel = Voxel(position = self.position + mouse.normal, texture = stone_texture)
if block_pick == 3: voxel = Voxel(position = self.position + mouse.normal, texture = brick_texture)
if block_pick == 4: voxel = Voxel(position = self.position + mouse.normal, texture = dirt_texture)

if key == 'right mouse down':
punch_sound.play()
destroy(self)

class Sky(Entity):
def __init__(self):
super().__init__(
parent = scene,
model = 'sphere',
texture = sky_texture,
scale = 150,
double_sided = True)

class Hand(Entity):
def __init__(self):
super().__init__(
parent = camera.ui,
model = 'assets/arm',
texture = arm_texture,
scale = 0.2,
rotation = Vec3(150,-10,0),
position = Vec2(0.4,-0.6))

def active(self):
self.position = Vec2(0.3,-0.5)

def passive(self):
self.position = Vec2(0.4,-0.6)

for z in range(20):
for x in range(20):
voxel = Voxel(position = (x,0,z))

player = FirstPersonController()
sky = Sky()
hand = Hand()

app.run()
def __init__(self, position=(0, 0, 0), block_type=BLOCK_GRASS):
super().__init__(
parent=scene,
position=position,
model='assets/block',
origin_y=0.5,
texture=TEXTURES[block_type],
color=color.color(0, 0, random.uniform(0.9, 1)),
scale=0.5,
)

def input(self, key):
if self.hovered:
if key == 'left mouse down':
punch_sound.play()
block_type = BLOCK_PICKS.get(block_pick, BLOCK_GRASS)
voxel = Voxel(position=self.position + mouse.normal, block_type=block_type)

if key == 'right mouse down':
punch_sound.play()
destroy(self)

# ... Sky, Hand, and Player classes as before ...

def handle_block_selection():
global block_pick
for key, block_type in BLOCK_PICKS.items():
if held_keys[key]:
block_pick = block_type

if __name__ == "__main__":
grass_texture = load_texture(TEXTURES[BLOCK_GRASS])
stone_texture = load_texture(TEXTURES[BLOCK_STONE])
brick_texture = load_texture(TEXTURES[BLOCK_BRICK])
dirt_texture = load_texture(TEXTURES[BLOCK_DIRT])

window.fps_counter.enabled = False
window.exit_button.visible = False

for z in range(20):
for x in range(20):
voxel = Voxel(position=(x, 0, z))

player = FirstPersonController()
sky = Sky()
hand = Hand()

app.run()