Skip to content

Commit

Permalink
Fixed some issues
Browse files Browse the repository at this point in the history
  • Loading branch information
Luis Carlos Boch committed May 17, 2020
1 parent 71d41f0 commit 0ad0e5b
Show file tree
Hide file tree
Showing 10 changed files with 172 additions and 98 deletions.
61 changes: 31 additions & 30 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Godot script that allow use of Field of View in (currently) 2d game.

## How to install

Can be installed from asset lib (https://godotengine.org/asset-library/asset/210)
Can be installed from ![asset lib](https://godotengine.org/asset-library/asset/210)

## How to use

Expand All @@ -28,43 +28,44 @@ Can be installed from asset lib (https://godotengine.org/asset-library/asset/210
* **Field of View:** In degrees, configure the view angle
* **Warn distance:** Float, view distance
* **Danger distance:** Float, view distance to consider danger, must be lower than *Warn distance*
* **Show circle:** Bool, use to debug the Warn area (Deprecated)
* **Show Fov:** Bool, use to view the rays created
* **Show Target line:** Bool, draw line to target?
* **Circle Color:** Color, when *Show circle* is true, this define the color used to draw
* **Fov Color:** Color, when *Show Fov* is true, this define the color used to draw rays
* **Fov Warn Color:** Color, when *Show Fov* is true, this define the color used to draw ray to target when is "warn" state
* **Fov Danger Color:** Color, when *Show Fov* is true, this define the color used to draw ray to target when is "danger" state
* **Frequency:** Float, time to update view area, lower will update fast with cpu cost, default value is 0.5
* **Fov Warn Color:** Color, when *Show Fov* is true, this define the color used to draw rays when is "warn" state
* **Fov Danger Color:** Color, when *Show Fov* is true, this define the color used to draw rays when is "danger" state
* **Frequency:** Float, frequency to update view area, lower will update fast with cpu cost, default value is 0.5
* **Target Groups** Array groups to track, required at least one.

## Current state
<img src="https://github.com/luisboch/godot_field_of_view/blob/images/assets/luisboch/field-of-view/2d/demo/print/print_1.jpg" />
<br />
<img src="https://github.com/luisboch/godot_field_of_view/blob/images/assets/luisboch/field-of-view/2d/demo/print/print_2.jpg" />
<br />
<img src="https://github.com/luisboch/godot_field_of_view/blob/images/assets/luisboch/field-of-view/2d/demo/print/print_3.jpg" />
<br />
<img src="https://github.com/luisboch/godot_field_of_view/blob/images/assets/luisboch/field-of-view/2d/demo/print/print_4.jpg" />
<br />
<img src="https://github.com/luisboch/godot_field_of_view/blob/images/assets/luisboch/field-of-view/2d/demo/print/print_5.jpg" />
<br />
<img src="https://github.com/luisboch/godot_field_of_view/blob/images/assets/luisboch/field-of-view/2d/demo/print/print_6.jpg" />
<br />
<img src="https://github.com/luisboch/godot_field_of_view/blob/images/assets/luisboch/field-of-view/2d/demo/print/print_7.jpg" />
<br />
<img src="https://github.com/luisboch/godot_field_of_view/blob/images/assets/luisboch/field-of-view/2d/demo/print/print_8.jpg" />

![Screenshot 1](https://raw.githubusercontent.com/luisboch/godot_field_of_view/images/assets/luisboch/field-of-view/2d/demo/print/print_1.jpg)

![Screenshot 2](https://raw.githubusercontent.com/luisboch/godot_field_of_view/images/assets/luisboch/field-of-view/2d/demo/print/print_2.jpg)

![Screenshot 3](https://raw.githubusercontent.com/luisboch/godot_field_of_view/images/assets/luisboch/field-of-view/2d/demo/print/print_3.jpg)

![Screenshot 4](https://raw.githubusercontent.com/luisboch/godot_field_of_view/images/assets/luisboch/field-of-view/2d/demo/print/print_4.jpg)

![Screenshot 5](https://raw.githubusercontent.com/luisboch/godot_field_of_view/images/assets/luisboch/field-of-view/2d/demo/print/print_5.jpg)

![Screenshot 6](https://raw.githubusercontent.com/luisboch/godot_field_of_view/images/assets/luisboch/field-of-view/2d/demo/print/print_6.jpg)

![Screenshot 7](https://raw.githubusercontent.com/luisboch/godot_field_of_view/images/assets/luisboch/field-of-view/2d/demo/print/print_7.jpg)

![Screenshot 8](https://raw.githubusercontent.com/luisboch/godot_field_of_view/images/assets/luisboch/field-of-view/2d/demo/print/print_8.jpg)

## Previews:

Preview 1:
![](https://raw.githubusercontent.com/luisboch/godot_field_of_view/images/preview1.gif)
Preview 2:
![](https://raw.githubusercontent.com/luisboch/godot_field_of_view/images/preview2.gif)
Preview 3:
![](https://raw.githubusercontent.com/luisboch/godot_field_of_view/images/preview3.gif)
Preview 4:
![](https://raw.githubusercontent.com/luisboch/godot_field_of_view/images/preview4.gif)
![Preview 1](https://raw.githubusercontent.com/luisboch/godot_field_of_view/images/preview1.gif)

![Preview 2](https://raw.githubusercontent.com/luisboch/godot_field_of_view/images/preview2.gif)

![Preview 3](https://raw.githubusercontent.com/luisboch/godot_field_of_view/images/preview3.gif)

![Preview 4](https://raw.githubusercontent.com/luisboch/godot_field_of_view/images/preview4.gif)

## How-To from zero
https://youtu.be/tpR-9X6G8hk

A complete how to use this plugin.

[![Youtube vídeo](https://img.youtube.com/vi/tpR-9X6G8hk/0.jpg)](https://www.youtube.com/watch?v=tpR-9X6G8hk)
15 changes: 6 additions & 9 deletions addons/luisboch.field_of_view/demo/Camera.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@
[ext_resource path="res://addons/luisboch.field_of_view/demo/Block.tscn" type="PackedScene" id=4]
[ext_resource path="res://addons/luisboch.field_of_view/demo/SecuritySystem.gd" type="Script" id=5]

[sub_resource type="StreamTexture" id=2]
[sub_resource type="StreamTexture" id=1]
flags = 4
load_path = "res://.import/block-blue.jpg-51949dba364c270d352fca3037067dfe.stex"

[sub_resource type="RectangleShape2D" id=1]
[sub_resource type="RectangleShape2D" id=2]
extents = Vector2( 11.7552, 11.9218 )

[node name="Game" type="Node"]
Expand All @@ -25,12 +25,12 @@ warn_text_path = NodePath("../CanvasLayer/Warn")

[node name="Player" type="Sprite" parent="Player"]
position = Vector2( -0.343942, -1.19024 )
texture = SubResource( 2 )
texture = SubResource( 1 )
offset = Vector2( 0, 0.5 )

[node name="CollisionShape2D" type="CollisionShape2D" parent="Player"]
scale = Vector2( 4, 4 )
shape = SubResource( 1 )
shape = SubResource( 2 )

[node name="CameraD2" type="Camera2D" parent="Player"]
position = Vector2( 0.445007, 5.39999 )
Expand All @@ -46,7 +46,6 @@ __meta__ = {
}

[node name="Block4" parent="Blocks" instance=ExtResource( 4 )]
position = Vector2( 0, 0 )

[node name="Block44" parent="Blocks" instance=ExtResource( 4 )]
position = Vector2( 864, 0 )
Expand Down Expand Up @@ -232,15 +231,13 @@ warn_text_path = NodePath("../CanvasLayer/Warn")

[node name="Camera1" parent="Cameras" instance=ExtResource( 3 )]
position = Vector2( 702.612, 41.6116 )
rotation = 0.831315
rotation = 2.64445
fov = 100
view_dist = 936
show_circle = false

[node name="Camera2" parent="Cameras" instance=ExtResource( 3 )]
position = Vector2( 1567.35, 691.458 )
rotation = 2.35135
show_circle = false
rotation = -2.44218

[node name="CanvasLayer" type="CanvasLayer" parent="."]

Expand Down
10 changes: 1 addition & 9 deletions addons/luisboch.field_of_view/demo/Player.gd
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,6 @@ onready var danger_txt = get_node(danger_text_path)
onready var warn_txt = get_node(warn_text_path)

onready var fov_node = get_node("field_of_view")
# class member variables go here, for example:
# var a = 2
# var b = "textvar"

func _ready():
# Called every time the node is added to the scene.
# Initialization here
pass

func check_fov():
if fov_node:
Expand All @@ -31,7 +23,7 @@ func _physics_process(delta):
check_fov()
var pos = get_position()
var dir = (get_global_mouse_position() - pos).normalized()
set_rotation(deg2rad(rad2deg(dir.angle()) - 90))
set_rotation(deg2rad(rad2deg(dir.angle())))


# vel = Vector2()
Expand Down
8 changes: 5 additions & 3 deletions addons/luisboch.field_of_view/demo/Player.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,15 @@ script = ExtResource( 1 )
[node name="field_of_view" type="Node2D" parent="."]
script = ExtResource( 2 )
warn_distance = 700
danger_distance = 300
fov_color = Color( 0.239216, 0.498039, 0.0431373, 0.698039 )
fov_warn_color = Color( 0.933333, 0.87451, 0.0431373, 0.694118 )
danger_distance = 306
fov_color = Color( 0.384314, 0.592157, 0.223529, 0.698039 )
fov_warn_color = Color( 0.392157, 0.380392, 0.231373, 0.694118 )
fov_danger_color = Color( 0.984314, 0.196078, 0.0431373, 0.615686 )
view_detail = 2

[node name="Player" type="Node2D" parent="."]
script = ExtResource( 3 )
color = Color( 0, 0, 1, 1 )
size = Vector2( 96, 96 )

[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
Expand Down
19 changes: 8 additions & 11 deletions addons/luisboch.field_of_view/demo/SecCamera.gd
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ export(Color) var color_1 = Color.yellow setget set_color_1
export(Color) var color_2 = Color.red setget set_color_2
export(int) var fov = 60 setget _set_fov
export(int) var view_dist = 500 setget _set_view_distance
export var show_circle = true setget _set_show_circle
export (Vector2) var size = Vector2(96.0, 96.0) setget _set_size;

func _set_fov(val):
Expand All @@ -20,9 +19,6 @@ func _set_view_distance(val):
$FOV.warn_distance = val
$FOV.danger_distance = val * 0.6

func _set_show_circle(val):
show_circle = val
$FOV.show_circle = val

func _set_state(val):
# listen all state updates, and force this node to redrawn using update when needs.
Expand Down Expand Up @@ -52,13 +48,14 @@ func set_color_2(val):
update()

func _process(delta):
# Check for changes...
if $FOV.in_danger_area.size() > 0:
_set_state(2)
elif $FOV.in_warn_area.size() > 0:
_set_state(1)
else:
_set_state(0)
if not Engine.is_editor_hint():
# Check for changes...
if $FOV.in_danger_area.size() > 0:
_set_state(2)
elif $FOV.in_warn_area.size() > 0:
_set_state(1)
else:
_set_state(0)


func _draw():
Expand Down
55 changes: 19 additions & 36 deletions addons/luisboch.field_of_view/field_of_view.gd
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,9 @@ export var field_of_view = 60 setget _set_field_of_view
export var warn_distance = 500 setget _set_warn_distance
export var danger_distance = 200 setget _set_danger_distance

export var show_circle = false setget _set_show_circle
export var show_fov = true setget _set_show_fov
export var show_target_line = true

export var warn_circle_color = Color("#9f185c0b") setget _set_warn_circle_color
export var danger_circle_color = Color("#9f185c0b") setget _set_danger_circle_color

export var fov_color = Color("#b23d7f0b") setget _set_fov_color
export var fov_warn_color = Color("#b1eedf0b") setget _set_fov_warn_color
export var fov_danger_color = Color("#9dfb320b") setget _set_fov_danger_color
Expand All @@ -37,25 +33,23 @@ var start_angle
var end_angle

func _enter_tree():
timer = Timer.new()
timer.connect("timeout", self, "check_view")
timer.one_shot = false
timer.autostart = true
call_deferred("setup_timer")
call_deferred("_set_frequency", frequency)
if not Engine.is_editor_hint():
timer = Timer.new()
timer.connect("timeout", self, "check_view")
timer.one_shot = false
timer.autostart = true
call_deferred("setup_timer")
call_deferred("_set_frequency", frequency)
_update_rotation()



func setup_timer():
add_child(timer)
timer.owner = self
timer.wait_time = frequency

func _draw():
if show_circle:
draw_circle(get_position(), warn_distance, warn_circle_color)
draw_circle(get_position(), danger_distance, danger_circle_color)

if show_fov:
draw_fov()

Expand All @@ -77,9 +71,11 @@ func deg_to_vector(deg):

func create_draw_points():
points_arc = []
if start_angle:
for i in range(view_detail+1):
var cur_angle = start_angle + (i * (float(field_of_view) / float(view_detail))) + 90
var angles = []
var step = float(field_of_view) / float(view_detail)
if start_angle != null:
for i in range(view_detail):
var cur_angle = float(start_angle) + (float(i) * float(step)) + (float(step) * 0.5)
var point = get_position() + deg_to_vector(cur_angle) * warn_distance
points_arc.append({"pos": point, "level": 0})
update()
Expand Down Expand Up @@ -135,8 +131,10 @@ func check_view():
else :
in_warn_area.append(result.collider)

var tgt_pos = result.collider.get_global_transform().origin
points_arc.append({"pos": to_local(tgt_pos), "level": level})
if show_target_line:
var tgt_pos = result.collider.get_global_transform().origin
points_arc.append({"pos": to_local(tgt_pos), "level": level})

_update_events(original_objs)


Expand All @@ -153,31 +151,17 @@ func _update_events(original):
emit_signal("target_enter", obj)

func _update_rotation():
dir_deg = rad2deg(transform.get_rotation())
start_angle = dir_deg - (field_of_view * 0.5)
end_angle = start_angle + field_of_view

start_angle = -int(field_of_view * 0.5)
end_angle = int(start_angle + field_of_view)

func _set_field_of_view(val):
field_of_view = val
update_view()

func _set_show_circle(val):
show_circle = val
update_view()

func _set_show_fov(val):
show_fov = val
update_view()

func _set_warn_circle_color(val):
warn_circle_color = val
update_view()

func _set_danger_circle_color(val):
danger_circle_color = val
update_view()

func _set_fov_color(val):
fov_color = val
update_view()
Expand Down Expand Up @@ -208,7 +192,6 @@ func update_view():
func _set_frequency(val):
frequency = val
if timer:
print("updating timer")
timer.wait_time = val
timer.start(val)

Expand Down
34 changes: 34 additions & 0 deletions addons/luisboch.field_of_view/icon.jpg.import
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
[remap]

importer="texture"
type="StreamTexture"
path="res://.import/icon.jpg-98ed39bc08daadae29a6e0c6a1d1e095.stex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://addons/luisboch.field_of_view/icon.jpg"
dest_files=[ "res://.import/icon.jpg-98ed39bc08daadae29a6e0c6a1d1e095.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
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0
Loading

0 comments on commit 0ad0e5b

Please sign in to comment.