Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,14 @@ |
||||
[gd_scene load_steps=3 format=2] |
||||
|
||||
[ext_resource path="res://entities/environment/birchtree/BirchTree_1.glb" type="PackedScene" id=1] |
||||
|
||||
[sub_resource type="BoxShape" id=1] |
||||
extents = Vector3( 0.643397, 1, 0.536359 ) |
||||
|
||||
[node name="Birchtree" type="StaticBody"] |
||||
|
||||
[node name="CommonTree_4" parent="." instance=ExtResource( 1 )] |
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="."] |
||||
transform = Transform( 1, 0, 0, 0, 1.245, 0, 0, 0, 1, 0, 1.12837, 0 ) |
||||
shape = SubResource( 1 ) |
||||
@ -0,0 +1,8 @@ |
||||
extends Sprite |
||||
|
||||
func _on_Camera_camera_moved(new_location): |
||||
var map_x = new_location.x |
||||
var map_y = new_location.z |
||||
position.x = map_x |
||||
position.y = map_y |
||||
pass # Replace with function body. |
||||
|
After Width: | Height: | Size: 7.5 KiB |
@ -0,0 +1,35 @@ |
||||
[remap] |
||||
|
||||
importer="texture" |
||||
type="StreamTexture" |
||||
path="res://.import/cursor.png-c6b2f949aa939fd4f4289acd7e6ebaee.stex" |
||||
metadata={ |
||||
"vram_texture": false |
||||
} |
||||
|
||||
[deps] |
||||
|
||||
source_file="res://ui/map/cursor/cursor.png" |
||||
dest_files=[ "res://.import/cursor.png-c6b2f949aa939fd4f4289acd7e6ebaee.stex" ] |
||||
|
||||
[params] |
||||
|
||||
compress/mode=0 |
||||
compress/lossy_quality=0.7 |
||||
compress/hdr_mode=0 |
||||
compress/bptc_ldr=0 |
||||
compress/normal_map=0 |
||||
flags/repeat=0 |
||||
flags/filter=true |
||||
flags/mipmaps=false |
||||
flags/anisotropic=false |
||||
flags/srgb=2 |
||||
process/fix_alpha_border=true |
||||
process/premult_alpha=false |
||||
process/HDR_as_SRGB=false |
||||
process/invert_color=false |
||||
process/normal_map_invert_y=false |
||||
stream=false |
||||
size_limit=0 |
||||
detect_3d=true |
||||
svg/scale=1.0 |
||||
@ -1,6 +1,12 @@ |
||||
[gd_scene load_steps=2 format=2] |
||||
[gd_scene load_steps=4 format=2] |
||||
|
||||
[ext_resource path="res://ui/map/map.gd" type="Script" id=1] |
||||
[ext_resource path="res://ui/map/cursor/cursor.png" type="Texture" id=2] |
||||
[ext_resource path="res://ui/map/cursor/Cursor.gd" type="Script" id=3] |
||||
|
||||
[node name="Map" type="Node2D"] |
||||
script = ExtResource( 1 ) |
||||
|
||||
[node name="Cursor" type="Sprite" parent="."] |
||||
texture = ExtResource( 2 ) |
||||
script = ExtResource( 3 ) |
||||
|
||||
@ -0,0 +1,98 @@ |
||||
extends Spatial |
||||
|
||||
const MOVE_MARGIN = 20 |
||||
const MOVE_SPEED = 30 |
||||
|
||||
const ray_length = 1000 |
||||
onready var cam = $Camera |
||||
|
||||
var team = 0 |
||||
var selected_units = [] |
||||
onready var selection_box = $SelectionBox |
||||
var start_sel_pos = Vector2() |
||||
|
||||
func _process(delta): |
||||
var m_pos = get_viewport().get_mouse_position() |
||||
# calc_move(m_pos, delta) |
||||
if Input.is_action_just_pressed("main_command"): |
||||
move_selected_units(m_pos) |
||||
if Input.is_action_just_pressed("alt_command"): |
||||
selection_box.start_sel_pos = m_pos |
||||
start_sel_pos = m_pos |
||||
if Input.is_action_pressed("alt_command"): |
||||
selection_box.m_pos = m_pos |
||||
selection_box.is_visible = true |
||||
else: |
||||
selection_box.is_visible = false |
||||
if Input.is_action_just_released("alt_command"): |
||||
select_units(m_pos) |
||||
|
||||
func calc_move(m_pos, delta): |
||||
var v_size = get_viewport().size |
||||
var move_vec = Vector3() |
||||
if m_pos.x < MOVE_MARGIN: |
||||
move_vec.x -= 1 |
||||
if m_pos.y < MOVE_MARGIN: |
||||
move_vec.z -= 1 |
||||
if m_pos.x > v_size.x - MOVE_MARGIN: |
||||
move_vec.x += 1 |
||||
if m_pos.y > v_size.y - MOVE_MARGIN: |
||||
move_vec.z += 1 |
||||
move_vec = move_vec.rotated(Vector3(0, 1, 0), rotation_degrees.y) |
||||
global_translate(move_vec * delta * MOVE_SPEED) |
||||
|
||||
func move_selected_units(m_pos): |
||||
var result = raycast_from_mouse(m_pos, 1) |
||||
if result: |
||||
var unit_index = 0 |
||||
for unit in selected_units: |
||||
var new_position = result.position |
||||
new_position.x = new_position.x + unit_index |
||||
unit.move_to(new_position) |
||||
unit_index += 1 |
||||
|
||||
func select_units(m_pos): |
||||
var new_selected_units = [] |
||||
if m_pos.distance_squared_to(start_sel_pos) < 16: |
||||
var u = get_unit_under_mouse(m_pos) |
||||
if u != null: |
||||
new_selected_units.append(u) |
||||
else: |
||||
new_selected_units = get_units_in_box(start_sel_pos, m_pos) |
||||
|
||||
for unit in selected_units: |
||||
unit.deselect() |
||||
for unit in new_selected_units: |
||||
unit.select() |
||||
selected_units = new_selected_units |
||||
|
||||
func get_unit_under_mouse(m_pos): |
||||
var result = raycast_from_mouse(m_pos, 3) |
||||
if result and result.collider.is_in_group("units"): |
||||
return result.collider |
||||
|
||||
func get_units_in_box(top_left, bot_right): |
||||
if top_left.x > bot_right.x: |
||||
var tmp = top_left.x |
||||
top_left.x = bot_right.x |
||||
bot_right.x = tmp |
||||
if top_left.y > bot_right.y: |
||||
var tmp = top_left.y |
||||
top_left.y = bot_right.y |
||||
bot_right.y = tmp |
||||
var box = Rect2(top_left, bot_right - top_left) |
||||
var box_selected_units = [] |
||||
for unit in get_tree().get_nodes_in_group("units"): |
||||
if box.has_point(cam.unproject_position(unit.global_transform.origin)): |
||||
box_selected_units.append(unit) |
||||
return box_selected_units |
||||
|
||||
func raycast_from_mouse(m_pos, collision_mask): |
||||
var ray_start = cam.project_ray_origin(m_pos) |
||||
var ray_end = ray_start + cam.project_ray_normal(m_pos) * ray_length |
||||
var space_state = get_world().direct_space_state |
||||
return space_state.intersect_ray(ray_start, ray_end, [], collision_mask) |
||||
|
||||
|
||||
func _on_Camera_camera_moved(new_location): |
||||
pass # Replace with function body. |
||||
@ -0,0 +1,34 @@ |
||||
[gd_scene load_steps=5 format=2] |
||||
|
||||
[ext_resource path="res://utils/camera/SelectionBox.gd" type="Script" id=1] |
||||
[ext_resource path="res://utils/camera/CamBase.gd" type="Script" id=2] |
||||
[ext_resource path="res://utils/camera/CameraController.gd" type="Script" id=3] |
||||
[ext_resource path="res://utils/camera/CameraInput.gd" type="Script" id=4] |
||||
|
||||
[node name="CamBase" type="Spatial"] |
||||
transform = Transform( 1, 0, 0, 0, 0.0238738, 0.999715, 0, -0.999715, 0.0238738, 0, 0, 16.935 ) |
||||
script = ExtResource( 2 ) |
||||
|
||||
[node name="Camera" type="Camera" parent="."] |
||||
transform = Transform( 1, 0, 0, 0, 0.910272, -0.41401, 0, 0.41401, 0.910272, 0, 0, 6.618 ) |
||||
size = 20.0 |
||||
near = 0.01 |
||||
far = 8192.0 |
||||
script = ExtResource( 3 ) |
||||
movement_speed = 70.017 |
||||
min_zoom = 51.0 |
||||
zoom_sensibility = 2.818 |
||||
rotation_sensibility = 1.0 |
||||
|
||||
[node name="Node" type="Node" parent="Camera"] |
||||
script = ExtResource( 4 ) |
||||
|
||||
[node name="SelectionBox" type="Control" parent="."] |
||||
margin_right = 40.0 |
||||
margin_bottom = 40.0 |
||||
script = ExtResource( 1 ) |
||||
|
||||
[connection signal="on_change_action" from="Camera/Node" to="Camera" method="change_action"] |
||||
[connection signal="on_change_velocity" from="Camera/Node" to="Camera" method="change_velocity"] |
||||
[connection signal="on_rotate_view" from="Camera/Node" to="Camera" method="rotate_view"] |
||||
[connection signal="on_zoom" from="Camera/Node" to="Camera" method="zoom"] |
||||
@ -0,0 +1,140 @@ |
||||
extends Camera |
||||
class_name CameraController |
||||
|
||||
signal camera_moved(new_location) |
||||
|
||||
enum CAMERA_ACTIONS{ |
||||
MOVING, |
||||
ROTATING_VIEW, |
||||
} |
||||
|
||||
export(float,1,100) var movement_speed = 30 |
||||
export(float,0.01,0.99) var movement_damping = 0.74 |
||||
export(float,0.01, 3.1415) var max_rotation = 1.2 |
||||
export(float,0.01, 3.1415) var min_rotation = 0.5 |
||||
|
||||
#Value in percentage of screen portion |
||||
#A value of 0.3 means that when you place the cursor 30% or less away from an edge it will start pushing the camera |
||||
export(float, 0.0,1.0) var edge_size = 0.0 |
||||
|
||||
#EDIT HERE--->**,***<--- ZOOM MIN AND MAX LIMITS |
||||
export(float, 10,100) var min_zoom = 25 |
||||
export(float, 10,100) var max_zoom = 100 |
||||
|
||||
export(float, 1,3) var zoom_sensibility = 2.5 |
||||
|
||||
export(float, 1,3) var rotation_sensibility = 2.3 |
||||
export(float, 1.0, 10.0) var height = 5.0 |
||||
var pitch : float |
||||
var yaw : float |
||||
var current_action = CAMERA_ACTIONS.MOVING |
||||
var velocity : Vector2 |
||||
|
||||
func _ready(): |
||||
# Input.set_mouse_mode(Input.MOUSE_MODE_CONFINED) |
||||
|
||||
pitch = rotation.x |
||||
yaw = rotation.y |
||||
|
||||
# var new_rotation = (max_zoom - fov) * (max_rotation - min_rotation) / max_zoom + min_rotation |
||||
transform.basis = Basis(Vector3(1, 0, 0), (min_rotation + max_rotation) / 2.0) |
||||
fov = (min_zoom + max_zoom) / 2.0 |
||||
|
||||
func change_action(action): |
||||
current_action = action |
||||
match(current_action): |
||||
# CAMERA_ACTIONS.MOVING: |
||||
# Input.set_mouse_mode(Input.MOUSE_MODE_CONFINED) |
||||
CAMERA_ACTIONS.ROTATING_VIEW: |
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) |
||||
|
||||
func _process(delta): |
||||
|
||||
match(current_action): |
||||
CAMERA_ACTIONS.MOVING: |
||||
#CAMERA MOVEMENT |
||||
velocity.x = clamp(velocity.x * movement_damping,-1.0,1.0) |
||||
velocity.y = clamp(velocity.y * movement_damping,-1.0,1.0) |
||||
|
||||
if velocity != Vector2.ZERO: |
||||
move(velocity) |
||||
|
||||
|
||||
func change_velocity(_velocity : Vector2): |
||||
velocity = _velocity |
||||
|
||||
func move(_velocity : Vector2): |
||||
#Move along cameras X axis |
||||
global_transform.origin += global_transform.basis.x * velocity.x * movement_speed * get_process_delta_time() |
||||
#Calculate a forward camera direction that is perpendicular to the XZ plane |
||||
var forward = global_transform.basis.x.cross(Vector3.UP) |
||||
#Move the camera along that forward direction |
||||
global_transform.origin += forward * velocity.y * movement_speed * get_process_delta_time() |
||||
|
||||
var y_offset = 0 |
||||
var space_state = get_world().direct_space_state |
||||
var result = space_state.intersect_ray(Vector3(global_transform.origin.x, 100, global_transform.origin.z), Vector3(global_transform.origin.x, 0, global_transform.origin.z)) |
||||
if result: |
||||
y_offset = result.position.y |
||||
else: |
||||
y_offset = 0 |
||||
global_transform.origin.y = max(5 + y_offset * 1.3, 10) |
||||
|
||||
emit_signal("camera_moved", global_transform.origin) |
||||
|
||||
|
||||
func zoom(direction : float): |
||||
#Zooming using fov |
||||
var new_fov = fov + (sign(direction) * pow(abs(direction),zoom_sensibility)/100 * get_process_delta_time()) |
||||
fov = clamp(new_fov,min_zoom,max_zoom) |
||||
|
||||
# Linear equation |
||||
var slope = (min_rotation - max_rotation) / (max_zoom - min_zoom) |
||||
var b = max_rotation - slope * min_zoom |
||||
var new_rotation = slope * fov + b |
||||
transform.basis = Basis(Vector3(1, 0, 0), new_rotation) |
||||
|
||||
|
||||
func rotate_view(axis : Vector2): |
||||
|
||||
var pitch_rotation_amount = -axis.y/100 * get_process_delta_time() * rotation_sensibility |
||||
var yaw_rotation_amount = -axis.x/100 * get_process_delta_time() * rotation_sensibility |
||||
|
||||
pitch += pitch_rotation_amount |
||||
pitch = clamp(pitch,-PI/2,0) |
||||
|
||||
yaw += yaw_rotation_amount |
||||
|
||||
rotation.x = pitch |
||||
rotation.y = yaw |
||||
|
||||
func _on_Map_map_clicked(position): |
||||
global_transform.origin.x = position.x |
||||
global_transform.origin.z = position.y |
||||
|
||||
|
||||
var y_offset = 0 |
||||
var space_state = get_world().direct_space_state |
||||
var result = space_state.intersect_ray(Vector3(global_transform.origin.x, 100, global_transform.origin.z), Vector3(global_transform.origin.x, 0, global_transform.origin.z)) |
||||
if result: |
||||
y_offset = result.position.y |
||||
else: |
||||
y_offset = 0 |
||||
global_transform.origin.y = max(height + y_offset * 1.3, 30) |
||||
pass # Replace with function body. |
||||
|
||||
|
||||
func _on_World_character_created(position): |
||||
global_transform.origin.x = position.x |
||||
global_transform.origin.z = position.y |
||||
|
||||
|
||||
var y_offset = 0 |
||||
var space_state = get_world().direct_space_state |
||||
var result = space_state.intersect_ray(Vector3(global_transform.origin.x, 100, global_transform.origin.z), Vector3(global_transform.origin.x, 0, global_transform.origin.z)) |
||||
if result: |
||||
y_offset = result.position.y |
||||
else: |
||||
y_offset = 0 |
||||
global_transform.origin.y = max(height + y_offset * 1.3, 30) |
||||
pass # Replace with function body. |
||||
@ -0,0 +1,158 @@ |
||||
extends Node |
||||
|
||||
export(float,0.001,1.0) var screen_edge_size : float = 0.3 |
||||
export(float) var mouse_wheel_damping = 0.9 |
||||
|
||||
#USED TO CALCULATE RAW MOVEMENT WHILE PUSHING AN EDGE |
||||
var horizontal : float = 0.0 |
||||
var vertical : float = 0.0 |
||||
|
||||
#USED TO STORE MOUSE WHEEL INERTIA TO ENABLE SMOOTH STOPPING |
||||
var mouse_wheel : float = 0.0 |
||||
|
||||
signal on_change_velocity(velocity) |
||||
signal on_rotate_view(relative) |
||||
signal on_change_action(new_state) |
||||
signal on_zoom(value) |
||||
|
||||
var current_action |
||||
|
||||
#TOUCH VARIABLE FOR MOBILE |
||||
var touch_count : int = 0 |
||||
var swipe_start : Vector2 |
||||
|
||||
func _ready(): |
||||
connect("on_change_action",self,"change_action") |
||||
emit_signal("on_change_action",CameraController.CAMERA_ACTIONS.MOVING) |
||||
|
||||
func change_action(action): |
||||
current_action = action |
||||
|
||||
func toggle_action(): |
||||
current_action = 1 - current_action |
||||
|
||||
func start_swipe(position : Vector2): |
||||
swipe_start = position |
||||
|
||||
func move_swipe(position : Vector2): |
||||
if blocked_movement: |
||||
return |
||||
|
||||
var delta = (position - swipe_start)*-1 |
||||
var direction_x = sign(delta.x) |
||||
var direction_y = sign(delta.y) |
||||
|
||||
var view_size = get_viewport().get_visible_rect().size - Vector2.ONE |
||||
|
||||
horizontal = range_lerp(abs(delta.x),0,view_size.x,0.0,1.0) |
||||
vertical = range_lerp(abs(delta.y),0,view_size.y,0.0,1.0) |
||||
|
||||
#Applies direction |
||||
horizontal *= direction_x |
||||
vertical *= direction_y |
||||
|
||||
var touches = [ Vector2.ZERO, Vector2.ZERO ] |
||||
var start_pinch_distance : float |
||||
var last_pinch_distance : float |
||||
var pinching : float |
||||
|
||||
var blocked_movement : bool = false |
||||
|
||||
func _input(event): |
||||
|
||||
if OS.get_name() == "Android" or OS.get_name() == "iOS": |
||||
#MOBILE############## |
||||
if event is InputEventScreenTouch: |
||||
#SET TOUCH STARTING POSTIION |
||||
touches[event.index] = event.position |
||||
if event.pressed: |
||||
touch_count += 1 |
||||
start_swipe(event.position) |
||||
else: |
||||
touch_count -= 1 |
||||
#RENABLE SWIPE MOVEMENT BECAUSE EVERY TOUCH WAS LIFTED |
||||
if blocked_movement and touch_count <= 0: |
||||
blocked_movement = false |
||||
|
||||
#RESET PINCHING VALUE WHEN A NEW TOUCH IS DETECTED OR HAS BEEN LIFTED |
||||
pinching = 0.0 |
||||
if touch_count == 2: |
||||
#STARTED ZOOMING, BLOCK MOVEMENT UNTIL EVERY TOUCH IS LIFTED |
||||
blocked_movement = true |
||||
start_pinch_distance = (touches[1] - touches[0]).length() |
||||
|
||||
if event is InputEventScreenDrag: |
||||
if touch_count == 2: |
||||
#UPDATE TOUCHES POSITIONS |
||||
touches[event.index] = event.position |
||||
#CALCULATE DISTANCE BETWEEN TOUCHES |
||||
var pinch_distance = (touches[1] - touches[0]).length() |
||||
var pinch_direction = 1 if pinch_distance > last_pinch_distance else -1 |
||||
#CALCULATE PINCH DELTA |
||||
pinching = abs(start_pinch_distance - pinch_distance) * pinch_direction |
||||
#USE MOUSE WHEEL BUFFER TO ENABLE SMOOTHING |
||||
mouse_wheel += pinching * get_process_delta_time() |
||||
last_pinch_distance = pinch_distance |
||||
else: |
||||
if current_action == CameraController.CAMERA_ACTIONS.MOVING: |
||||
move_swipe(event.position) |
||||
elif current_action == CameraController.CAMERA_ACTIONS.ROTATING_VIEW: |
||||
emit_signal("on_rotate_view",event.relative) |
||||
|
||||
###############MOBILE |
||||
else: |
||||
#PC################## |
||||
#Camera edge pushing |
||||
if event is InputEventMouseMotion: |
||||
#ROTATE VIEW |
||||
if current_action == CameraController.CAMERA_ACTIONS.ROTATING_VIEW: |
||||
emit_signal("on_rotate_view",event.relative) |
||||
#Gets screen size |
||||
var view_size = get_viewport().get_visible_rect().size - Vector2.ONE |
||||
#Get mouse position in percentage values relative to the screen |
||||
var delta = (event.position) / view_size |
||||
#Convert it to a range between [-1,1] |
||||
delta = (delta * 2) - Vector2.ONE |
||||
|
||||
if current_action == CameraController.CAMERA_ACTIONS.MOVING: |
||||
#Store it an buffer to use it on _process |
||||
#Calculates delta based on percentage between the edge size and the actual edge |
||||
horizontal = max(abs(delta.x) - (1.0 - screen_edge_size),0) |
||||
vertical = max(abs(delta.y) - (1.0 - screen_edge_size),0) |
||||
#Converts it to an [0.0,1.0] range |
||||
horizontal = range_lerp(horizontal,0.0,screen_edge_size,0.0,1.0) |
||||
vertical = range_lerp(vertical,0.0,screen_edge_size,0.0,1.0) |
||||
#Applies direction |
||||
horizontal *= sign(delta.x) |
||||
vertical *= sign(delta.y) |
||||
elif current_action == CameraController.CAMERA_ACTIONS.ROTATING_VIEW: |
||||
horizontal = delta.x |
||||
vertical = delta.y |
||||
pass |
||||
|
||||
|
||||
if event is InputEventMouseButton: |
||||
#WHEEL SCROLL |
||||
if event.button_index == BUTTON_WHEEL_UP or event.button_index == BUTTON_WHEEL_DOWN: |
||||
if event.pressed and not event.is_echo(): |
||||
var direction = (-1 if event.button_index == BUTTON_WHEEL_UP else 0) + (1 if event.button_index == BUTTON_WHEEL_DOWN else 0) |
||||
mouse_wheel += direction * get_process_delta_time() * 1000 |
||||
###################PC |
||||
|
||||
func _process(delta): |
||||
|
||||
#PC###### |
||||
match(current_action): |
||||
CameraController.CAMERA_ACTIONS.MOVING: |
||||
#RESIDUAL MOVEMENT |
||||
if horizontal != 0 or vertical != 0: |
||||
emit_signal("on_change_velocity",Vector2(horizontal, vertical)) |
||||
|
||||
#MOUSE WHEEL |
||||
if mouse_wheel != 0: |
||||
mouse_wheel = mouse_wheel * mouse_wheel_damping |
||||
emit_signal("on_zoom",mouse_wheel) |
||||
#######PC |
||||
|
||||
|
||||
|
||||
@ -0,0 +1,17 @@ |
||||
extends Control |
||||
|
||||
var is_visible = false |
||||
var m_pos = Vector2() |
||||
var start_sel_pos = Vector2() |
||||
const sel_box_col = Color(0, 1, 0) |
||||
const sel_box_line_width = 3 |
||||
|
||||
func _draw(): |
||||
if is_visible and start_sel_pos != m_pos: |
||||
draw_line(start_sel_pos, Vector2(m_pos.x, start_sel_pos.y), sel_box_col, sel_box_line_width) |
||||
draw_line(start_sel_pos, Vector2(start_sel_pos.x, m_pos.y), sel_box_col, sel_box_line_width) |
||||
draw_line(m_pos, Vector2(m_pos.x, start_sel_pos.y), sel_box_col, sel_box_line_width) |
||||
draw_line(m_pos, Vector2(start_sel_pos.x, m_pos.y), sel_box_col, sel_box_line_width) |
||||
|
||||
func _process(delta): |
||||
update() |
||||
@ -0,0 +1,43 @@ |
||||
extends Spatial |
||||
|
||||
var terrain |
||||
|
||||
func _ready(): |
||||
pass |
||||
|
||||
|
||||
func draw_world(): |
||||
# for i in range(0, 1, 1): |
||||
# print(i) |
||||
var st = SurfaceTool.new() |
||||
|
||||
st.begin(Mesh.PRIMITIVE_TRIANGLES) |
||||
st.add_smooth_group(true) |
||||
for triangle in terrain.get_triangles(): |
||||
for point in triangle.points(): |
||||
var factor = Vector3(1, 24*5, 1) |
||||
# if point.get_data("river") and i == 0: |
||||
# factor.y -= 0 |
||||
# if i == 1: |
||||
# factor.y -= 2.0 |
||||
st.add_vertex(point.point3d() * factor) |
||||
|
||||
st.generate_normals() |
||||
# st.generate_tangents() |
||||
st.index() |
||||
# Commit to a mesh. |
||||
var mesh = st.commit() |
||||
|
||||
var mi = MeshInstance.new() |
||||
mi.mesh = mesh |
||||
var material = load("res://world/world.material") |
||||
mi.set_surface_material(0, material) |
||||
mi.create_trimesh_collision() |
||||
mi.cast_shadow = GeometryInstance.SHADOW_CASTING_SETTING_ON |
||||
print(mi) |
||||
add_child(mi) |
||||
|
||||
func _on_Game_world_loaded(game_terrain): |
||||
terrain = game_terrain |
||||
draw_world() |
||||
|
||||
@ -1,16 +1,59 @@ |
||||
[gd_scene load_steps=3 format=2] |
||||
[gd_scene load_steps=8 format=2] |
||||
|
||||
[ext_resource path="res://ui/ui.tscn" type="PackedScene" id=1] |
||||
[ext_resource path="res://world/game.gd" type="Script" id=2] |
||||
[ext_resource path="res://world/default_env.tres" type="Environment" id=3] |
||||
[ext_resource path="res://world/World.gd" type="Script" id=4] |
||||
[ext_resource path="res://utils/camera/CamBase.tscn" type="PackedScene" id=5] |
||||
|
||||
[node name="Game" type="Spatial"] |
||||
[sub_resource type="PlaneMesh" id=1] |
||||
size = Vector2( 2000, 2000 ) |
||||
|
||||
[sub_resource type="SpatialMaterial" id=2] |
||||
albedo_color = Color( 0.054902, 0.533333, 0.741176, 1 ) |
||||
|
||||
[node name="Game" type="Node"] |
||||
script = ExtResource( 2 ) |
||||
|
||||
[node name="UI" parent="." instance=ExtResource( 1 )] |
||||
|
||||
[node name="Map" parent="UI" index="0"] |
||||
scale = Vector2( 0.5, 0.5 ) |
||||
scale = Vector2( 0.25, 0.25 ) |
||||
|
||||
[node name="Cursor" parent="UI/Map" index="0"] |
||||
scale = Vector2( 4, 4 ) |
||||
z_index = 3 |
||||
|
||||
[node name="World" type="Spatial" parent="."] |
||||
script = ExtResource( 4 ) |
||||
|
||||
[node name="Water" type="MeshInstance" parent="World"] |
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 1000, -0.1, 1000 ) |
||||
mesh = SubResource( 1 ) |
||||
material/0 = SubResource( 2 ) |
||||
|
||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="World"] |
||||
environment = ExtResource( 3 ) |
||||
|
||||
[node name="CamBase" parent="World" instance=ExtResource( 5 )] |
||||
|
||||
[node name="Camera" parent="World/CamBase" index="0"] |
||||
transform = Transform( 1, 0, 0, 0, 0.910272, -0.41401, 0, 0.41401, 0.910272, 0, -1.90735e-06, 6.618 ) |
||||
movement_speed = 48.076 |
||||
min_zoom = 10.0 |
||||
zoom_sensibility = 1.436 |
||||
rotation_sensibility = 3.0 |
||||
|
||||
[node name="DirectionalLight" type="DirectionalLight" parent="World"] |
||||
transform = Transform( 1, 0, 0, 0, 0.512597, 0.858629, 0, -0.858629, 0.512597, 0, 1.41623, 0 ) |
||||
light_energy = 0.1 |
||||
shadow_enabled = true |
||||
|
||||
[connection signal="world_loaded" from="." to="UI/Map" method="_on_Game_world_loaded"] |
||||
[connection signal="world_loaded" from="." to="World" method="_on_Game_world_loaded"] |
||||
[connection signal="map_clicked" from="UI/Map" to="World/CamBase/Camera" method="_on_Map_map_clicked"] |
||||
[connection signal="camera_moved" from="World/CamBase/Camera" to="UI/Map/Cursor" method="_on_Camera_camera_moved"] |
||||
|
||||
[editable path="UI"] |
||||
[editable path="UI/Map"] |
||||
[editable path="World/CamBase"] |
||||
|
||||
Binary file not shown.
@ -0,0 +1,4 @@ |
||||
[gd_resource type="SpatialMaterial" format=2] |
||||
|
||||
[resource] |
||||
albedo_color = Color( 0.109804, 0.305882, 0.0745098, 1 ) |
||||
Loading…
Reference in new issue