#Tower Defence placement, mouse sceen position to tower placement coords

3 messages · Page 1 of 1 (latest)

unkempt plume
#

extends CharacterBody3D

var towerType = null

var tower = load("res://Towers/balista.tscn")

var count = 0

var cost = 0

var map = null
var hud = null

func _ready():     # all the stuff for the tower placement, you can ignore
    map = get_parent().get_parent()
    hud = map.get_node("Camera3D/hud")
    
    if towerType == "balista":
        cost = 100
        tower = load("res://Towers/balista.tscn")
        $Trebuchet.visible = false
        $Ballista.visible = true
        $Cannon.visible = false
        $Catapult.visible = false
    elif towerType == "trebuchet":
        cost = 200
        tower = load("res://Towers/trebuchet.tscn")
        $Trebuchet.visible = true
        $Ballista.visible = false
        $Cannon.visible = false
        $Catapult.visible = false
#
elif towerType == "catapult":   # all the stuff for the tower placement, you can ignore
        cost = 180
        tower = load("res://Towers/catapult.tscn")
        $Trebuchet.visible = false
        $Ballista.visible = false
        $Cannon.visible = false
        $Catapult.visible = true
    elif towerType == "cannon":
        cost = 150
        tower = load("res://Towers/cannon.tscn")
        $Trebuchet.visible = false
        $Ballista.visible = false
        $Cannon.visible = true
        $Catapult.visible = false
    else:
        map.endPlacement()

func _physics_process(delta): #this stuff is the bit im having issues with
    var viewport := get_viewport()
    var camera := viewport.get_camera_3d()
    
    var mouse_position := viewport.get_mouse_position()
    
    var origin := camera.project_ray_origin(mouse_position)
    var direction := camera.project_ray_normal(mouse_position)
    
    var ray_length := camera.far
    var end := origin + direction * ray_length
    
    var space_state := get_world_3d().direct_space_state
    var query := PhysicsRayQueryParameters3D.create(origin, end)
    var result := space_state.intersect_ray(query)
    
    #var mouse_position_3D:Vector3 = result["position"]
    
    var mouse_position_3D:Vector3 = result.get("position", end)
    
    mouse_position_3D.y = 0
    mouse_position_3D.x = mouse_position_3D.x/500   #i think changing this value would help, but no idea what it would need to be
    mouse_position_3D.z = mouse_position_3D.z/500
    
    #print(str(mouse_position_3D))
    
    self.global_position = mouse_position_3D
    
    if Input.is_action_just_pressed("Click"):
        if hud.allowed:
            var instance = tower.instantiate()
            map.add_child(instance)
            instance.global_position = mouse_position_3D
            map.money -= cost
            hud.endPlacementMode()
            map.endPlacement()
    
#

(dot is where cursor is)