# Best way to pass data to GUI

**URL:** <https://forum.defold.com/t/best-way-to-pass-data-to-gui/63992>\
**Category:** Questions\
**Created:** [November 27, 2019, 3:53pm UTC](https://forum.defold.com/t/best-way-to-pass-data-to-gui/63992 "2019-11-27T15:53:46Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![davidgrabeuk](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/davidgrabeuk/32/19333_2.png) [@davidgrabeuk](https://forum.defold.com/u/davidgrabeuk)\
**Post date:** [November 27, 2019, 3:53pm UTC](https://forum.defold.com/t/best-way-to-pass-data-to-gui/63992/1 "2019-11-27T15:53:46Z")

</div>

I need to pass bit of data every frame to GUI. What is best way to do that?

Specifically, I want to have arrows pointing in direction of nearby enemies, while player is moving around with camera attached to him.  
Shoud this even be done with GUI?

---

<div class="post-metadata">

**Author:** ![sergey.lerg](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/sergey.lerg/32/3970_2.png) [@sergey.lerg](https://forum.defold.com/u/sergey.lerg)\
**Post date:** [November 27, 2019, 4:20pm UTC](https://forum.defold.com/t/best-way-to-pass-data-to-gui/63992/2 "2019-11-27T16:20:35Z")

</div>

Personally I would do it with game objects without GUI, but for fast GUI communication you have to use a buffer Lua module. Write arrow positions to the Lua module from game script, read arrow positions in gui script.

---

<div class="post-metadata">

**Author:** ![britzl](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/britzl/32/23_2.png) [@britzl](https://forum.defold.com/u/britzl)\
**Post date:** [November 28, 2019, 4:46am UTC](https://forum.defold.com/t/best-way-to-pass-data-to-gui/63992/3 "2019-11-28T04:46:14Z")

</div>

> [@sergey.lerg](#):
>
> use a buffer Lua module. Write arrow positions to the Lua module from game script, read arrow positions in gui script.

This is good advice.

You could also post a message containing a list of vector3. It will not be as efficient but maybe it’s enough in your case?

---

<div class="post-metadata">

**Author:** ![davidgrabeuk](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/davidgrabeuk/32/19333_2.png) [@davidgrabeuk](https://forum.defold.com/u/davidgrabeuk)\
**Post date:** [November 28, 2019, 3:56pm UTC](https://forum.defold.com/t/best-way-to-pass-data-to-gui/63992/4 "2019-11-28T15:56:13Z")

</div>

Thank you for your answers. While we’re on topic, I’m using global variables to pass data to GUI for stats like player’s current speed and energy. Is there downside to that?

---

<div class="post-metadata">

**Author:** ![sergey.lerg](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/sergey.lerg/32/3970_2.png) [@sergey.lerg](https://forum.defold.com/u/sergey.lerg)\
**Post date:** [November 28, 2019, 4:12pm UTC](https://forum.defold.com/t/best-way-to-pass-data-to-gui/63992/5 "2019-11-28T16:12:35Z")

</div>

Global variables lead to unpredictable errors, it’s advised not to use them at all.

---

<div class="post-metadata">

**Author:** ![davidgrabeuk](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/davidgrabeuk/32/19333_2.png) [@davidgrabeuk](https://forum.defold.com/u/davidgrabeuk)\
**Post date:** [November 28, 2019, 6:33pm UTC](https://forum.defold.com/t/best-way-to-pass-data-to-gui/63992/6 "2019-11-28T18:33:45Z")

</div>

Is this what is meant by buffer Lua module?

```
 --inside Lua Module
       
     local value = 0

        function getValue()
        	return value
        end

        function setValue(_value)
        	value = _value
        end

```

---

<div class="post-metadata">

**Author:** ![sergey.lerg](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/sergey.lerg/32/3970_2.png) [@sergey.lerg](https://forum.defold.com/u/sergey.lerg)\
**Post date:** [November 28, 2019, 9:42pm UTC](https://forum.defold.com/t/best-way-to-pass-data-to-gui/63992/7 "2019-11-28T21:42:46Z")

</div>

No

```lua
return {
  values = {}
}

```

Then

```lua
local buffer_module = require('buffer_module')

-- Set
buffer_module.values[1] = vmath.vector3(0,0,0)

-- Get
print(buffer_module.values[1])

```

---

<div class="post-metadata">

**Author:** ![davidgrabeuk](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/davidgrabeuk/32/19333_2.png) [@davidgrabeuk](https://forum.defold.com/u/davidgrabeuk)\
**Post date:** [November 29, 2019, 8:55pm UTC](https://forum.defold.com/t/best-way-to-pass-data-to-gui/63992/8 "2019-11-29T20:55:34Z")

</div>

Oh, that looks much simpler.  
Thank you very much!

---

<div class="post-metadata">

**Author:** ![carlfredriknybergbro](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/carlfredriknybergbro/32/8719_2.png) [@carlfredriknybergbro](https://forum.defold.com/u/carlfredriknybergbro)\
**Post date:** [December 3, 2019, 12:07am UTC](https://forum.defold.com/t/best-way-to-pass-data-to-gui/63992/9 "2019-12-03T00:07:40Z")

</div>

Global variables also have a great deal of overhead when it comes to performance.
