Skip to content

Commit

Permalink
Merge branch 'map-change'
Browse files Browse the repository at this point in the history
  • Loading branch information
manglemix committed Mar 1, 2021
2 parents 80af472 + 9088454 commit 47b340b
Show file tree
Hide file tree
Showing 14 changed files with 1,151 additions and 512 deletions.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Binary file added TrokaraMapDemo/ColorsMat/Col_White.material
Binary file not shown.
File renamed without changes.
File renamed without changes.
Binary file added TrokaraMapDemo/ComplexTerrain.material
Binary file not shown.
920 changes: 920 additions & 0 deletions TrokaraMapDemo/TrokaraDemoMap_V6.tscn

Large diffs are not rendered by default.

170 changes: 170 additions & 0 deletions TrokaraMapDemo/gui_3d.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
extends Spatial

# The size of the quad mesh itself.
var quad_mesh_size
# Used for checking if the mouse is inside the Area
var is_mouse_inside = false
# Used for checking if the mouse was pressed inside the Area
var is_mouse_held = false
# The last non-empty mouse position. Used when dragging outside of the box.
var last_mouse_pos3D = null
# The last processed input touch/mouse event. To calculate relative movement.
var last_mouse_pos2D = null

onready var node_viewport = $Viewport
onready var node_quad = $Quad
onready var node_area = $Quad/Area

func _ready():
node_area.connect("mouse_entered", self, "_mouse_entered_area")

# If the materia is NOT set to use billboard settings, then avoid running billboard specific code
if node_quad.get_surface_material(0).params_billboard_mode == 0:
set_process(false)


func _process(_delta):
# NOTE: Remove this function if you don't plan on using billboard settings.
rotate_area_to_billboard()


func _mouse_entered_area():
is_mouse_inside = true


func _unhandled_input(event):
# Check if the event is a non-mouse/non-touch event
var is_mouse_event = false
for mouse_event in [InputEventMouseButton, InputEventMouseMotion, InputEventScreenDrag, InputEventScreenTouch]:
if event is mouse_event:
is_mouse_event = true
break

# # If the event is a mouse/touch event and/or the mouse is either held or inside the area, then
# # we need to do some additional processing in the handle_mouse function before passing the event to the viewport.
# # If the event is not a mouse/touch event, then we can just pass the event directly to the viewport.
# if is_mouse_event and (is_mouse_inside or is_mouse_held):
# handle_mouse(event)
# elif not is_mouse_event:
# node_viewport.input(event)

#
## Handle mouse events inside Area. (Area.input_event had many issues with dragging)
#func handle_mouse(event):
# # Get mesh size to detect edges and make conversions. This code only support PlaneMesh and QuadMesh.
# quad_mesh_size = node_quad.mesh.size
#
# # Detect mouse being held to mantain event while outside of bounds. Avoid orphan clicks
# if event is InputEventMouseButton or event is InputEventScreenTouch:
# is_mouse_held = event.pressed
#
# # Find mouse position in Area
# var mouse_pos3D = find_mouse(event.global_position)
#
# # Check if the mouse is outside of bounds, use last position to avoid errors
# # NOTE: mouse_exited signal was unrealiable in this situation
# is_mouse_inside = mouse_pos3D != null
# if is_mouse_inside:
# # Convert click_pos from world coordinate space to a coordinate space relative to the Area node.
# # NOTE: affine_inverse accounts for the Area node's scale, rotation, and translation in the scene!
# mouse_pos3D = node_area.global_transform.affine_inverse() * mouse_pos3D
# last_mouse_pos3D = mouse_pos3D
# else:
# mouse_pos3D = last_mouse_pos3D
# if mouse_pos3D == null:
# mouse_pos3D = Vector3.ZERO
#
# # TODO: adapt to bilboard mode or avoid completely
#
# # convert the relative event position from 3D to 2D
# var mouse_pos2D = Vector2(mouse_pos3D.x, -mouse_pos3D.y)
#
# # Right now the event position's range is the following: (-quad_size/2) -> (quad_size/2)
# # We need to convert it into the following range: 0 -> quad_size
# mouse_pos2D.x += quad_mesh_size.x / 2
# mouse_pos2D.y += quad_mesh_size.y / 2
# # Then we need to convert it into the following range: 0 -> 1
# mouse_pos2D.x = mouse_pos2D.x / quad_mesh_size.x
# mouse_pos2D.y = mouse_pos2D.y / quad_mesh_size.y
#
# # Finally, we convert the position to the following range: 0 -> viewport.size
# mouse_pos2D.x = mouse_pos2D.x * node_viewport.size.x
# mouse_pos2D.y = mouse_pos2D.y * node_viewport.size.y
# # We need to do these conversions so the event's position is in the viewport's coordinate system.
#
# # Set the event's position and global position.
# event.position = mouse_pos2D
# event.global_position = mouse_pos2D
#
# # If the event is a mouse motion event...
# if event is InputEventMouseMotion:
# # If there is not a stored previous position, then we'll assume there is no relative motion.
# if last_mouse_pos2D == null:
# event.relative = Vector2(0, 0)
# # If there is a stored previous position, then we'll calculate the relative position by subtracting
# # the previous position from the new position. This will give us the distance the event traveled from prev_pos
# else:
# event.relative = mouse_pos2D - last_mouse_pos2D
# # Update last_mouse_pos2D with the position we just calculated.
# last_mouse_pos2D = mouse_pos2D
#
# # Finally, send the processed input event to the viewport.
# node_viewport.input(event)
#
#
#func find_mouse(global_position):
# var camera = get_viewport().get_camera()
#
# # From camera center to the mouse position in the Area
# var from = camera.project_ray_origin(global_position)
# var dist = find_further_distance_to(camera.transform.origin)
# var to = from + camera.project_ray_normal(global_position) * dist
#
#
# # Manually raycasts the are to find the mouse position
# var result = get_world().direct_space_state.intersect_ray(from, to, [], node_area.collision_layer,false,true) #for 3.1 changes
#
# if result.size() > 0:
# return result.position
# else:
# return null


func find_further_distance_to(origin):
# Find edges of collision and change to global positions
var edges = []
edges.append(node_area.to_global(Vector3(quad_mesh_size.x / 2, quad_mesh_size.y / 2, 0)))
edges.append(node_area.to_global(Vector3(quad_mesh_size.x / 2, -quad_mesh_size.y / 2, 0)))
edges.append(node_area.to_global(Vector3(-quad_mesh_size.x / 2, quad_mesh_size.y / 2, 0)))
edges.append(node_area.to_global(Vector3(-quad_mesh_size.x / 2, -quad_mesh_size.y / 2, 0)))

# Get the furthest distance between the camera and collision to avoid raycasting too far or too short
var far_dist = 0
var temp_dist
for edge in edges:
temp_dist = origin.distance_to(edge)
if temp_dist > far_dist:
far_dist = temp_dist

return far_dist


func rotate_area_to_billboard():
var billboard_mode = node_quad.get_surface_material(0).params_billboard_mode

# Try to match the area with the material's billboard setting, if enabled
if billboard_mode > 0:
# Get the camera
var camera = get_viewport().get_camera()
# Look in the same direction as the camera
var look = camera.to_global(Vector3(0, 0, -100)) - camera.global_transform.origin
look = node_area.translation + look

# Y-Billboard: Lock Y rotation, but gives bad results if the camera is tilted.
if billboard_mode == 2:
look = Vector3(look.x, 0, look.z)

node_area.look_at(look, Vector3.UP)

# Rotate in the Z axis to compensate camera tilt
node_area.rotate_object_local(Vector3.BACK, camera.rotation.z)
60 changes: 60 additions & 0 deletions TrokaraMapDemo/gui_panel_3d.tscn
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
[gd_scene load_steps=6 format=2]

[ext_resource path="res://TrokaraMapDemo/gui_3d.gd" type="Script" id=1]


[sub_resource type="QuadMesh" id=1]
size = Vector2( 3, 2 )

[sub_resource type="ViewportTexture" id=2]
viewport_path = NodePath("Viewport")

[sub_resource type="SpatialMaterial" id=3]
resource_local_to_scene = true
flags_transparent = true
flags_unshaded = true
flags_albedo_tex_force_srgb = true
albedo_texture = SubResource( 2 )

[sub_resource type="BoxShape" id=4]
extents = Vector3( 1.5, 1, 0.05 )

[node name="GUIPanel3D" type="Spatial"]
script = ExtResource( 1 )

[node name="Viewport" type="Viewport" parent="."]
size = Vector2( 280, 180 )
hdr = false
usage = 0
render_target_v_flip = true
render_target_update_mode = 3

[node name="GUI" type="Control" parent="Viewport"]
margin_right = 280.0
margin_bottom = 180.0
mouse_filter = 1

[node name="Panel" type="Panel" parent="Viewport/GUI"]
anchor_right = 1.0
anchor_bottom = 1.0

[node name="Label" type="Label" parent="Viewport/GUI/Panel"]
margin_left = 44.0
margin_top = 27.0
margin_right = 121.0
margin_bottom = 41.0
text = "Controls:
Move - WASD
Camera - Mouse
...."

[node name="Quad" type="MeshInstance" parent="."]
mesh = SubResource( 1 )
material/0 = SubResource( 3 )

[node name="Area" type="Area" parent="Quad"]
input_capture_on_drag = true
collision_layer = 2

[node name="CollisionShape" type="CollisionShape" parent="Quad/Area"]
shape = SubResource( 4 )
511 changes: 0 additions & 511 deletions TrokaraMapDemoV01_GodotProject/TrokaraDemoMap.tscn

This file was deleted.

2 changes: 1 addition & 1 deletion demo.tscn
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[gd_scene load_steps=7 format=2]

[ext_resource path="res://Gobot/tps_demo.tscn" type="PackedScene" id=1]
[ext_resource path="res://TrokaraMapDemoV01_GodotProject/TrokaraDemoMap.tscn" type="PackedScene" id=2]
[ext_resource path="res://TrokaraMapDemo/TrokaraDemoMap_V6.tscn" type="PackedScene" id=2]
[ext_resource path="res://velocitymeter.gd" type="Script" id=5]

[sub_resource type="GDScript" id=1]
Expand Down

0 comments on commit 47b340b

Please sign in to comment.