Giter Site home page Giter Site logo

godot-3d-lines's Introduction

Instructions:

  • Add DrawLine3D.gd to the Godot AutoLoad list
  • Call DrawLine3D.DrawLine, DrawLine3D.DrawRay, or DrawLine3D.DrawCube from any script

OR

  • Add an instance of the DrawLine3D to the scene:
var LineDrawer = preload("res://DrawLine3D.gd").new() #In 'global' scope  
...
add_child(LineDrawer) #At some point before calling the desired draw function(s) e.g. in '_ready()'
  • Call LineDrawer.DrawLine, LineDrawer.DrawRay, or LineDrawer.DrawCube from the script that created the DrawLine3D node

DrawLine parameters: start point, end point, color, time (optional)
DrawRay parameters: start point, velocity (direction and magnitude), color, time (optional)
DrawCube parameters: start point, half extents (float), color, time (optional)

Examples

  • DrawLine3D.DrawLine(Vector3(0, 0, 0), Vector3(1, 2, 0), Color(0, 0, 1), 1.5) Draws a line from (0, 0, 0) to (1, 2, 0) colored blue and will last for 1.5 seconds
  • DrawLine3D.DrawCube(Vector3(0, 1, 0), 0.5, Color(1, 0, 0)) Draws a cube at (0, 1, 0) with a half extent size of 0.5 and colored red

Cube example

godot-3d-lines's People

Contributors

klaykree avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

godot-3d-lines's Issues

code not working in Godot 4.0

This code does not work in Godot 4.0 since some function names have been changed, the functions are:

  • update() : renamed to queue_redraw()
  • remove() : renamed to remove_at()
  • variable Time now causes conflict with an already reserved node

after changing the function names it seems to work fine, I have provided the fixed code below.

Fixed code
extends Node2D

class Line:
	var Start
	var End
	var LineColor
	var time
	
	func _init(Start, End, LineColor, time):
		self.Start = Start
		self.End = End
		self.LineColor = LineColor
		self.time = time

var Lines = []
var RemovedLine = false

func _process(delta):
	for i in range(len(Lines)):
		Lines[i].time -= delta
	
	if(len(Lines) > 0 || RemovedLine):
		queue_redraw() #Calls _draw
		RemovedLine = false

func _draw():
	var Cam = get_viewport().get_camera_3d()
	for i in range(len(Lines)):
		var ScreenPointStart = Cam.unproject_position(Lines[i].Start)
		var ScreenPointEnd = Cam.unproject_position(Lines[i].End)
		
		#Dont draw line if either start or end is considered behind the camera
		#this causes the line to not be drawn sometimes but avoids a bug where the
		#line is drawn incorrectly
		if(Cam.is_position_behind(Lines[i].Start) ||
			Cam.is_position_behind(Lines[i].End)):
			continue
		
		draw_line(ScreenPointStart, ScreenPointEnd, Lines[i].LineColor)
	
	#Remove lines that have timed out
	var i = Lines.size() - 1
	while (i >= 0):
		if(Lines[i].time < 0.0):
			Lines.remove_at(i)
			RemovedLine = true
		i -= 1

func DrawLine(Start, End, LineColor, time = 0.0):
	Lines.append(Line.new(Start, End, LineColor, time))

func DrawRay(Start, Ray, LineColor, time = 0.0):
	Lines.append(Line.new(Start, Start + Ray, LineColor, time))

func DrawCube(Center, HalfExtents, LineColor, time = 0.0):
	#Start at the 'top left'
	var LinePointStart = Center
	LinePointStart.x -= HalfExtents
	LinePointStart.y += HalfExtents
	LinePointStart.z -= HalfExtents
	
	#Draw top square
	var LinePointEnd = LinePointStart + Vector3(0, 0, HalfExtents * 2.0)
	DrawLine(LinePointStart, LinePointEnd, LineColor, time);
	LinePointStart = LinePointEnd
	LinePointEnd = LinePointStart + Vector3(HalfExtents * 2.0, 0, 0)
	DrawLine(LinePointStart, LinePointEnd, LineColor, time);
	LinePointStart = LinePointEnd
	LinePointEnd = LinePointStart + Vector3(0, 0, -HalfExtents * 2.0)
	DrawLine(LinePointStart, LinePointEnd, LineColor, time);
	LinePointStart = LinePointEnd
	LinePointEnd = LinePointStart + Vector3(-HalfExtents * 2.0, 0, 0)
	DrawLine(LinePointStart, LinePointEnd, LineColor, time);
	
	#Draw bottom square
	LinePointStart = LinePointEnd + Vector3(0, -HalfExtents * 2.0, 0)
	LinePointEnd = LinePointStart + Vector3(0, 0, HalfExtents * 2.0)
	DrawLine(LinePointStart, LinePointEnd, LineColor, time);
	LinePointStart = LinePointEnd
	LinePointEnd = LinePointStart + Vector3(HalfExtents * 2.0, 0, 0)
	DrawLine(LinePointStart, LinePointEnd, LineColor, time);
	LinePointStart = LinePointEnd
	LinePointEnd = LinePointStart + Vector3(0, 0, -HalfExtents * 2.0)
	DrawLine(LinePointStart, LinePointEnd, LineColor, time);
	LinePointStart = LinePointEnd
	LinePointEnd = LinePointStart + Vector3(-HalfExtents * 2.0, 0, 0)
	DrawLine(LinePointStart, LinePointEnd, LineColor, time);
	
	#Draw vertical lines
	LinePointStart = LinePointEnd
	DrawRay(LinePointStart, Vector3(0, HalfExtents * 2.0, 0), LineColor, time)
	LinePointStart += Vector3(0, 0, HalfExtents * 2.0)
	DrawRay(LinePointStart, Vector3(0, HalfExtents * 2.0, 0), LineColor, time)
	LinePointStart += Vector3(HalfExtents * 2.0, 0, 0)
	DrawRay(LinePointStart, Vector3(0, HalfExtents * 2.0, 0), LineColor, time)
	LinePointStart += Vector3(0, 0, -HalfExtents * 2.0)
	DrawRay(LinePointStart, Vector3(0, HalfExtents * 2.0, 0), LineColor, time)

Function asks for Vector2

Im a noob so definitely I could be the problem.
But no matter what I do the draw functions ask for vector 2 parameters.

grafik

How would you like credit to be worded if given?

Hey, I know this is a public domain project but I like crediting everyone who has built anything that helped me. Including addons that I've used in development. What's the preferred way to give credit? If you want I can always credit "The Godot Community" for this plugin.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.