Added picking with MMB
parent
39f48b106c
commit
366e3e1d5f
|
@ -93,6 +93,13 @@ func get_block(id: int) -> Block:
|
||||||
return _blocks[id]
|
return _blocks[id]
|
||||||
|
|
||||||
|
|
||||||
|
func get_raw_mapping(raw_id: int) -> RawMapping:
|
||||||
|
assert(raw_id >= 0)
|
||||||
|
var rm = _raw_mappings[raw_id]
|
||||||
|
assert(rm != null)
|
||||||
|
return rm
|
||||||
|
|
||||||
|
|
||||||
func get_block_count() -> int:
|
func get_block_count() -> int:
|
||||||
return len(_blocks)
|
return len(_blocks)
|
||||||
|
|
||||||
|
@ -104,6 +111,9 @@ func _create_block(params: Dictionary):
|
||||||
"backface_culling": true,
|
"backface_culling": true,
|
||||||
"directory": params.name
|
"directory": params.name
|
||||||
})
|
})
|
||||||
|
|
||||||
|
var block = Block.new()
|
||||||
|
block.id = len(_blocks)
|
||||||
|
|
||||||
for i in len(params.voxels):
|
for i in len(params.voxels):
|
||||||
var vname = params.voxels[i]
|
var vname = params.voxels[i]
|
||||||
|
@ -112,9 +122,13 @@ func _create_block(params: Dictionary):
|
||||||
push_error("Could not find voxel named {0}".format([vname]))
|
push_error("Could not find voxel named {0}".format([vname]))
|
||||||
assert(id != -1)
|
assert(id != -1)
|
||||||
params.voxels[i] = id
|
params.voxels[i] = id
|
||||||
|
var rm = RawMapping.new()
|
||||||
|
rm.block_id = block.id
|
||||||
|
rm.variant_index = i
|
||||||
|
if id >= len(_raw_mappings):
|
||||||
|
_raw_mappings.resize(id + 1)
|
||||||
|
_raw_mappings[id] = rm
|
||||||
|
|
||||||
var block = Block.new()
|
|
||||||
block.id = len(_blocks)
|
|
||||||
block.name = params.name
|
block.name = params.name
|
||||||
block.directory = params.directory
|
block.directory = params.directory
|
||||||
block.rotation_type = params.rotation_type
|
block.rotation_type = params.rotation_type
|
||||||
|
|
|
@ -35,3 +35,10 @@ func select_slot(i: int):
|
||||||
func get_selected_block_type() -> int:
|
func get_selected_block_type() -> int:
|
||||||
return _inventory[_inventory_index]
|
return _inventory[_inventory_index]
|
||||||
|
|
||||||
|
|
||||||
|
func try_select_slot_by_block_id(block_id: int):
|
||||||
|
for i in len(_inventory):
|
||||||
|
var id = _inventory[i]
|
||||||
|
if id == block_id:
|
||||||
|
select_slot(i)
|
||||||
|
break
|
||||||
|
|
|
@ -29,6 +29,7 @@ var _terrain_tool = null
|
||||||
var _cursor = null
|
var _cursor = null
|
||||||
var _action_place = false
|
var _action_place = false
|
||||||
var _action_remove = false
|
var _action_remove = false
|
||||||
|
var _action_pick = false
|
||||||
|
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
|
@ -72,7 +73,8 @@ func _physics_process(delta):
|
||||||
|
|
||||||
# These inputs have to be in _fixed_process because they rely on collision queries
|
# These inputs have to be in _fixed_process because they rely on collision queries
|
||||||
if hit != null:
|
if hit != null:
|
||||||
var has_cube = _terrain_tool.get_voxel(hit.position) != 0
|
var hit_raw_id = _terrain_tool.get_voxel(hit.position)
|
||||||
|
var has_cube = hit_raw_id != 0
|
||||||
|
|
||||||
if _action_remove and has_cube:
|
if _action_remove and has_cube:
|
||||||
var pos = hit.position
|
var pos = hit.position
|
||||||
|
@ -89,9 +91,14 @@ func _physics_process(delta):
|
||||||
print("Place voxel at ", pos)
|
print("Place voxel at ", pos)
|
||||||
else:
|
else:
|
||||||
print("Can't place here!")
|
print("Can't place here!")
|
||||||
|
|
||||||
|
elif _action_pick:
|
||||||
|
var rm := Blocks.get_raw_mapping(hit_raw_id)
|
||||||
|
_hotbar.try_select_slot_by_block_id(rm.block_id)
|
||||||
|
|
||||||
_action_place = false
|
_action_place = false
|
||||||
_action_remove = false
|
_action_remove = false
|
||||||
|
_action_pick = false
|
||||||
|
|
||||||
|
|
||||||
func _unhandled_input(event):
|
func _unhandled_input(event):
|
||||||
|
@ -102,6 +109,8 @@ func _unhandled_input(event):
|
||||||
_action_remove = true
|
_action_remove = true
|
||||||
BUTTON_RIGHT:
|
BUTTON_RIGHT:
|
||||||
_action_place = true
|
_action_place = true
|
||||||
|
BUTTON_MIDDLE:
|
||||||
|
_action_pick = true
|
||||||
|
|
||||||
elif event is InputEventKey:
|
elif event is InputEventKey:
|
||||||
if event.pressed:
|
if event.pressed:
|
||||||
|
|
Loading…
Reference in New Issue