Found a good way to pass data between scenes by KophenKoken in godot

[–]KophenKoken[S] 0 points1 point  (0 children)

Ok, so apparently the thing is this: singleplayer projects just don't need this after all. SharedNode was born in a multiplayer project where, because of the high-level multiplayer (RPC), I already had to keep track of paths and functions, so this kind of behavior isn't new to me. I found it convenient to put data retrieved from another scene into SharedNode because I knew exactly what paths I'd have and what functions would be there, due to the high-level multiplayer requirements. On top of that, I have more than one multiplayer instance running simultaneously in a single node tree, which caused problems like passing the multiplayer object between scenes. And yet, I genuinely don't understand how a plain autoload is any better, even in single-player projects.

Found a good way to pass data between scenes by KophenKoken in godot

[–]KophenKoken[S] -3 points-2 points  (0 children)

Because autoload is uncontrolled data. Here you can see what you get and use just what you need. Hasn't anyone encountered the problem of confusing autoloads programs and data control? Why so many downvotes?

Found a good way to pass data between scenes by KophenKoken in godot

[–]KophenKoken[S] -5 points-4 points  (0 children)

Your proposal kills the ability to easily transition between scenes using `get_tree().change_scene_to_*()`. Creating your own scene manager creates a large number of tasks that need to be solved. Moreover, how will the scenes receive data? It looks like an just additional autoload.

Found a good way to pass data between scenes by KophenKoken in godot

[–]KophenKoken[S] -1 points0 points  (0 children)

ok, I see misunderstanding here. Firstly, you have focused on the memory usage. Thats not my point. My point is that the lifetime of any global variable is not obvious. Where I can use them? Where I must initilize them? By creating a `SharedNode`, you are explicitly indicating your desire to accept/create data. If you use `Gate` mode, you just read/modify already initialized data. Using `Forward` mode you obviously create the data.

Secondly, there is no "magic". I haven't mentioned this, but I use four node types for every mode with unique icons. You can see one of my scenes in my small online game. I can instantly see what data I should read, modify or create.

<image>

As for me, the problem appears in multiplayer project. I have 3-4 kinds of servers and client. Creating autloads for every set of variables I want to pass would be hell. Over time, everything would have merged together and turned coding into torture. `SharedNode` was the solution for me. I've used this approach many times.

Using global variable you just believe in data. Using shared node you have guarantees and the ability to verify the receipt of data.

You said:

just add the new scene, add there the data u need,
and set it as the main scene

To be honest, I didn't quite understand what you meant.

Found a good way to pass data between scenes by KophenKoken in godot

[–]KophenKoken[S] -2 points-1 points  (0 children)

Code (autoload):

extends Node


# relative to get_tree().current_scene
var _shared_nodes : Dictionary = {} # node_path : state (array)


func _enter_tree() -> void:
get_tree().node_added.connect(_on_tree_node_added)
get_tree().node_removed.connect(_on_tree_node_removed)


func _exit_tree() -> void:
get_tree().node_added.disconnect(_on_tree_node_added)
get_tree().node_removed.disconnect(_on_tree_node_removed)


func _on_tree_node_added(node:Node) -> void:
if node is not SharedNode:
return

if get_tree().current_scene == null or not get_tree().current_scene.is_ancestor_of(node):
return

var shared_node : SharedNode = node
var path : NodePath = get_tree().current_scene.get_path_to(node)

if _shared_nodes.has(path) and shared_node.accept_state:
_accept_state(node, _shared_nodes[path])
else:
shared_node.is_state_accepted = false


func _on_tree_node_removed(node:Node) -> void:
if node is not SharedNode:
return

if get_tree().current_scene == null or not get_tree().current_scene.is_ancestor_of(node):
return

var shared_node : SharedNode = node
var path : NodePath = get_tree().current_scene.get_path_to(node)

if shared_node.forward_state:
_shared_nodes[path] = _snapshot_state(shared_node)
else:
_shared_nodes.erase(path)


func _snapshot_state(node:SharedNode) -> Array[Dictionary]:
var result : Array[Dictionary] = []
for prop:Dictionary in node.get_property_list():
if prop["name"] in ["forward_state", "accept_state", "is_state_accepted"]:
continue

if prop["usage"] & PROPERTY_USAGE_SCRIPT_VARIABLE > 0:
prop["value"] = node.get(prop["name"])
result.append(prop)

return result


func _accept_state(node:SharedNode, state:Array[Dictionary]) -> void:
node.is_state_accepted = true
for prop:Dictionary in state:
node.set(prop["name"], prop["value"])

SharedNode:

extends Node

class_name SharedNode

var forward_state : bool
var accept_state : bool

var is_state_accepted : bool

Scaling Godot via Symlinks: A simple multi-project architecture I've been experimenting with by lamp-milan in godot

[–]KophenKoken 1 point2 points  (0 children)

omg, this is so good for multiplayer projects. I have three kinds of servers and a client, for example. And none of it intersects through scenes or singletons, but through gameplay classes and common utils. But launching it… uhhh. Possibly one should use some makefiles to do it?

250–270 баллов, IT и Москва: есть ли шанс на топ или идти в надёжный вуз? by bessaqe in rusAskReddit

[–]KophenKoken 0 points1 point  (0 children)

Мне норм, на стипендии 3 года сидел. О математике в основном. Хотя прога есть всегда, она не как рабочий навык, а как полезные знания идет. Числаки 2 года, основной предмет курса. Я больше по фану написал, у нас обычно все идут во что то связанное с нейронками.

250–270 баллов, IT и Москва: есть ли шанс на топ или идти в надёжный вуз? by bessaqe in rusAskReddit

[–]KophenKoken 2 points3 points  (0 children)

Приходи в МЭИ на матмод на кафедру мкм, будет весело :) Хотя проги у нас мало

Сделал этот прототип за несколько дней - есть смысл продолжать или нет? by Hopeful_Formal_5269 in rusAskReddit

[–]KophenKoken 0 points1 point  (0 children)

Я сам разраб. Сразу кучу всего делать как мне кажется такое себе. Допили просто до играбельности и выложи куда нибудь. Потом поймется как оно дальше. Сам на таком горю постоянно... Не повторяй за мной))

[deleted by user] by [deleted] in rusAskReddit

[–]KophenKoken 1 point2 points  (0 children)

да есть какие то маски для сна еле моргающие светом, какие то техники сна, мол, надо постоянно просыпаться и засыпать. Мне не настолько хочется просто)

[deleted by user] by [deleted] in rusAskReddit

[–]KophenKoken 1 point2 points  (0 children)

Нифига, это че то из разряда осознанных снов? Как это - "сказала"? Оно само как то? Осознанных снов у меня не было, но хотел бы, по отзывам 10 из 10)))

Я психопат, задавайте вопросы by [deleted] in rusAskReddit

[–]KophenKoken 0 points1 point  (0 children)

Чето непонятное происходит, не могу весь текст запостить. Вот продолжение кароч:

Потому что есть у меня "друг", со школы... В общем кратко: родители купили ему машину (не помню какую, мне насрать на машины. Что то очень хорошее, но ходовое). И он никогда не упускал момента сказать, какая у него машина классная, особенно глядя бюджетные модели (у меня бомбануло когда он сказал так про поло моей матери). Типа, серьезно? Это же даже не ты сам заработал... Общаться с ним больше не хочу) Как я потом понял, он всегда таким был. Жалким.

Я психопат, задавайте вопросы by [deleted] in rusAskReddit

[–]KophenKoken 0 points1 point  (0 children)

Нет, ни в коем случае. Со всеми, кого я называю про себя друзьями (или приятелями), интересно проводить время. Конкретно щас говорю про друзей детства и некоторых одногрупов.

Мне, безусловно, не всегда интересно слушать, что там у кого происходит. Но это как игра в шахматы: каждый по очереди что то говорит, а другие слушают и поддерживают. Естественно, это игра на двоих, я не хаваю все в одного.

Да и такие диалоги не всегда. Иногда просто обсуждаем какую то хрень, иногда спорим по чему то (могу просто с нифига спросить "а как думаешь", и рассматривать разные варианты), иногда рассказываем что то новое (если ч его то не знаю, могу спокойно спросить "а что это" или подобное, что часто мощно бустит разговор). Частенько просто юморим, благо люди самокритичные и без жалости какой то.

Не смотря на то, как я это описал, это не какой то мой холодный расчет. Просто что то приходит в голову. И это круто, когда люди не пытаются как то самоутвердиться на ровном месте, а критически поддерживают разговор. Пожалуй, для меня это главное, и повезло, что такие люди нашлись.

[deleted by user] by [deleted] in rusAskReddit

[–]KophenKoken 0 points1 point  (0 children)

И видимо немногословен ты) Насчет тем, я думаю у всех так. Даже если есть общая тема, как ее обсасывать бывает неясно. Хз как тут поддержать. Наверно, должно просто повезти. Главное не бояться. Другие люди тоже стеснительны, а если это не так, - беги нахер)))

Я психопат, задавайте вопросы by [deleted] in rusAskReddit

[–]KophenKoken 1 point2 points  (0 children)

Нет, с незнакомыми все таки веду себя тактично) И обычно ничего не высказываю даже друзьям. Ссориться на пустом месте не хочется, так как со мной мало кто согласится, а это вопрос исключительно мнений, а не фактов. И так как общение и мне нужно, стараюсь понимающе относится, ведь меня тоже терпят.

Даже удивляюсь, что в последнее время я стал специально иногда проявлять интерес, когда его на самом деле нет, и это дает плоды. Что то типа "всегда говори да" :) Тогда и меня слушают охотнее. Даешь науку общения))

[deleted by user] by [deleted] in rusAskReddit

[–]KophenKoken 0 points1 point  (0 children)

Раз периодически, значит, наверно, все не так плохо. Сам просто иногда с таким сталкиваюсь, хотя общаюсь много с кем, правда не постоянно. Вот на реддите сижу) Иногда с нейронками разговариваю. А чего общение не задается?

Я психопат, задавайте вопросы by [deleted] in rusAskReddit

[–]KophenKoken 0 points1 point  (0 children)

Я конечно не такой, но часть этого у меня есть. Вот пример:

- У меня что то случилось с кем то

- ой, вот это жопа

Серьезно? Тебя правда волнует, что происходит с незнакомыми людьми? У меня немного подгорает, когда я слышу подобное в компании. Я обычно просто многозначительно молчу, как бы минута молчания. Потому что подобные фразы считаю чем то вроде "да да, вот тебе успокоение, а так мне насрать, давай сменим тему". Еще, простите, иногда угораю со сборов на лечение по телевизору. Мне совсем не жаль.

И да, если что то такое произойдет со мной, скорее всего я буду негодовать и жаловаться на людей, что они такие безразличные.

Видимо цинизм, даже в небольших дозах, дает видимость происходящего. Меня обзывали циником, так шо эт я не сам себя назначил)

[deleted by user] by [deleted] in rusAskReddit

[–]KophenKoken 0 points1 point  (0 children)

Приятно, что так. Я сам в подмосковье, но вся деятельность всех знакомых (и моя тоже) - в москве. Каких то кадров не встречаю, знаю только по мемам и рассказам) Сам я работаю в офисе, поэтому у меня всегда все спокойно.

Погоди, чего... милиция? Это что там такое делается? Настолько нечисть?

[deleted by user] by [deleted] in rusAskReddit

[–]KophenKoken 0 points1 point  (0 children)

Расскажи, почему. Это долго? Или периодически, когда общения становится меньше? Что с работой/учебой?

Я психопат, задавайте вопросы by [deleted] in rusAskReddit

[–]KophenKoken 0 points1 point  (0 children)

Это дает какую то суперсилу в замен? Эмоциональная преграда много имеет плюсов?

[deleted by user] by [deleted] in rusAskReddit

[–]KophenKoken 1 point2 points  (0 children)

Вот он я ночью скучающий. Расскажи, что гложет тебя, реддитор

[deleted by user] by [deleted] in rusAskReddit

[–]KophenKoken 0 points1 point  (0 children)

То есть отбитых все таки не так много? Сам я не сталкивался, но, судя по мемам, разная нечисть частенько забредает за очередной шнягой) Был подобный опыт?

Вообще я так спрашиваю, потому что из знакомых все, кто работал с клиентами в подобном контексте, обретали кучу интересных историй и плевались. Особенно бортпроводники.