126
18
127
22

Hello, everyone! The shader we’re going to create in this video definitely isn’t one of the most useful effects for game development. It’s more of a detour from more complex algorithms and includes several interesting techniques that might come in handy. So let’s take a look at how to program a four-dimensional cube.

128
36
129
10

Just a quick demo of an ant BOID system I threw together. Let me know what you think. Did I capture the essence of ants?

130
20
submitted 5 months ago by Fizz to c/godot@programming.dev

I am working on the input and it feels like its getting out of hand. I wanted to check in with people and see how people structure their input handling.

Currently I have 1 function _unhandled_unput(event) and inside there I have a ton of elif statements trying to handle every possible situation and event. Its manageable at the moment but I only have like 4 events so its going to get very out of hand if I continue.

I need to have 100s of these events based on whats selected and what mouse/keyboard buttons are being pressed and I need some way to resuse the actions.

spoiler

func _unhandled_input(event):
	if event is InputEventMouseButton and event.pressed:
		if event.button_index == MOUSE_BUTTON_RIGHT:
			clear_selection()
			gui.queue_redraw()
			get_viewport().set_input_as_handled()
			return
	if selected_item == "colonist": #broken
		if event is InputEventKey:
			if event.OS.get_keycode_string() == "r":
				for colonist in selected_group:
					colonist.set_state("DRAFT")
					get_viewport().set_input_as_handled()
					gui.queue_redraw()
	#nothing selected dragbox to select things and single click to select things - does not work at the moment
	elif selected_type == "" or selected_type == "basic":
		if is_dragging and event is InputEventMouseMotion:
				drag_end = camera.get_global_mouse_position()
				cam_drag_end= get_viewport().get_mouse_position()
				get_selection(drag_start, drag_end)
				gui.queue_redraw()
				get_viewport().set_input_as_handled()
				return
		elif event is InputEventMouseButton and not event.pressed:
			is_dragging = false
			gui.queue_redraw()
			drag_start = null
			drag_end = null
			get_viewport().set_input_as_handled()
			return
		elif event is InputEventMouseButton and event.pressed:
			if event.button_index == MOUSE_BUTTON_LEFT:
				selected_type = "basic"
				is_dragging = true
				drag_start = camera.get_global_mouse_position()
				cam_drag_start = get_viewport().get_mouse_position()
				gui.queue_redraw()
				get_viewport().set_input_as_handled()
				return
	#command flow for dragging a selection box
	elif selected_type == "command":
		if selected_item == "structure_dict_growing":
			if is_dragging and event is InputEventMouseMotion:
				var grid_pos = tilemap.local_to_map(camera.get_global_mouse_position())
				var local_pos = tilemap.map_to_local(grid_pos)
				drag_end = local_pos + Vector2(32, 32)
				cam_drag_end = get_viewport().get_mouse_position()
				gui.queue_redraw()
				get_viewport().set_input_as_handled()
				return
			elif event is InputEventMouseButton and not event.pressed:
				if event.button_index == MOUSE_BUTTON_LEFT:
					is_dragging = false
					gui.queue_redraw()
					get_viewport().set_input_as_handled()
					MessageBus.rpc_id(1, "request_zone_growing", selected_item ,drag_start, drag_end, multiplayer.get_unique_id())
					drag_start = null
					drag_end = null
					return
			elif event is InputEventMouseButton and event.pressed:
				if event.button_index == MOUSE_BUTTON_LEFT:
					is_dragging = true
					#to snap to grid
					var grid_pos = tilemap.local_to_map(camera.get_global_mouse_position())
					var local_pos = tilemap.map_to_local(grid_pos)
					drag_start = local_pos - Vector2(32, 32)
					cam_drag_start = get_viewport().get_mouse_position() #this is broken cbf fixing maybe one day after selection is working 
					gui.queue_redraw()
					get_viewport().set_input_as_handled()
					return
	elif selected_type == "floor":
		if event is InputEventMouseButton and event.pressed:
			if event.button_index == MOUSE_BUTTON_LEFT:
				var global_mouse_pos = camera.get_global_mouse_position()
				var grid_pos = tilemap.local_to_map(global_mouse_pos)
				if selected_item == "":
					return
				MessageBus.rpc_id(1, "request_build_floor", selected_item, grid_pos, multiplayer.get_unique_id())
				get_viewport().set_input_as_handled()
				return
	elif selected_type == "building":
		if event is InputEventMouseButton and event.pressed:
			if event.button_index == MOUSE_BUTTON_LEFT:
				var global_mouse_pos = camera.get_global_mouse_position()
				var grid_pos = tilemap.local_to_map(global_mouse_pos)
				if selected_item == "":
					return
				MessageBus.rpc_id(1, "request_build_structure", selected_item, grid_pos, multiplayer.get_unique_id())
				get_viewport().set_input_as_handled()
				return

131
15
132
16

Hi everyone! The effect we’ll be creating in this video is something I had been planning for a long time, and now I’ve finally implemented it. As the title suggests, it will be a simulation of raindrops falling onto a water surface, including the typical expanding ripple circles.

133
22
134
21

Hopefully the title is self-explanatory but some more details:

  • game is in isometric perspective with the camera locked to the player but from a significant distance away, creating high likelihood of obstructions by the level and decorations occuring
  • I want the player to see their character's vision and not have these obstructions block the player's view.

One way to achieve this might be to use raycasts from the character to hide objects (like walls or buildings) if they collide with an object on the opposite side to the camera. A slight problem there is if buildings have interiors then the rays wouldn't necessarily hit all relevant objects. Sometimes both the interior and exterior of the building would need to visible.

I've seen a few videos on stencil buffers but my understanding is that this might not apply, but I will admit to not understanding them well. Any help appreciated for this newbie to game dev.

135
23
cursed godot error (www.youtube.com)

had to change how parent component is checked

still not sure what caused this

discord: https://discord.gg/WFwUXe6Em8
stoat: https://stt.gg/6T7e7yb7

136
46
137
80
submitted 5 months ago by testman@lemmy.ml to c/godot@programming.dev
138
21

Hi everyone! Let’s create a shader that looks like a simple radar, which can be useful for many types of games. It will be entirely generated using lines and other primitive shapes, and we’ll add some animation to it as well.

139
13

Just a demo of 3 test cases within the prototype. A more streamlined model is possible.

140
21
submitted 5 months ago* (last edited 5 months ago) by Fizz to c/godot@programming.dev

Edit: ah i was reading an old doc because the reddit comment I saw was 6 years old. The property is get_property_list()

I have a script that is a global it contains a bunch of dictionaries that describe items. I need a way to get a list of the different types.

Searching for solutions I found https://docs.godotengine.org/en/3.2/classes/class_script.html#class-script-method-get-script-property-list

but I cant seem to get it working. Godot says "Function "get_script_property_list()" not found in base self"

Example of the what im trying to get a list of

var tile_dict_grass = {
	"name": "grass",
	"source": 1,
	"atlas": Vector2i(1,0),
	"move_speed": 0.80,
	"path_cost": 2,
	"fertility": 1,
	"cleanliness": 1.5,
	"flammability": 0.60,
	"build_categories": "all",
	"solid": false
}
var tile_dict_rich_soil = {
	"name": "rich soil",
	"source": 1,
	"atlas": Vector2i(1,0),
	"move_speed": 0.80,
	"path_cost": 2,
	"fertility": 1.4,
	"cleanliness": -1.0,
	"flammability": 0.0,
	"build_categories": "all",
	"solid": false
}

How im trying to get it.

func get_tile_dict():
	var property_list = self.get_script_property_list()
	var tile_list = []
	for attr in dir(self):
		if attr.startswith('tile_dict'):
			value = getattr(self, attr)
			tile_list.append(value)
	return tile_list
141
29
Godot JRPG (godotengine.org)
submitted 6 months ago by cm0002@lemy.lol to c/godot@programming.dev

Godot JRPG is a framework for building 2D JRPGs (Japanese Role Playing Games) in Godot game engine, inspired by RPG Maker.

142
32
143
75
144
20

Hi everyone! I think it’s time for another post-processing effect that we can apply to the entire screen or a selected element. This time, we’ll recreate the look of an old photograph that has yellowed over time and developed other signs of wear.

145
20

Play render:

Nothing fancy. Just setting shading in the shader param to Toon and setting the roughness to near zero. I want to make a somewhat good looking game with compatibility render and think this is the best way to go.

146
2

It's a wrap. The last day of the @lgm featured more cool talks including the one about a @fragdenstaat clicker game made in @godot. Kudos to the local team in #Nuremberg. I feel rewired and inspired. See you at the #libregraphicsmeeting 2027 in #Linz!

https://libregraphicsmeeting.org/2026/

#LibreGraphics #lgm26

147
5
148
2
submitted 6 months ago by nomis@chaos.social to c/godot@programming.dev

Alexander from the motion ensemble talking at #lgm26 about working with the @godot engine. If you've never played wit godot: try it. I myself used in a few game jams and while it is not my preferred way of working it is quite powerful and makes game development quite accessible.

149
4
150
15

It's a simple game about chipping wood in a wood chipper. Please enjoy. Be aware it contains gore, thank you for checking it out!

view more: ‹ prev next ›

Godot

7998 readers
44 users here now

Welcome to the programming.dev Godot community!

This is a place where you can discuss about anything relating to the Godot game engine. Feel free to ask questions, post tutorials, show off your godot game, etc.

Make sure to follow the Godot CoC while chatting

We have a matrix room that can be used for chatting with other members of the community here

Links

Other Communities

Rules

We have a four strike system in this community where you get warned the first time you break a rule, then given a week ban, then given a year ban, then a permanent ban. Certain actions may bypass this and go straight to permanent ban if severe enough and done with malicious intent

Wormhole

!roguelikedev@programming.dev

Credits

founded 3 years ago
MODERATORS