mirror of
https://github.com/Ttanasart-pt/Pixel-Composer.git
synced 2024-12-25 06:26:42 +01:00
86 lines
6.9 KiB
Text
86 lines
6.9 KiB
Text
function fd_GUIDE() {
|
|
/*
|
|
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
Thank you for purchasing the GameMaker Studio 2 version of Fluid Dynamics. Here's some information on how to use the asset.
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
Before you start:
|
|
|
|
If you have imported this marketplace asset into a clean project and want to test the examples either move the "Fluid Dynamics" folder in the "Rooms"
|
|
resources to the top so it's above all other rooms, or delete the rooms above the folder.
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
The resources:
|
|
|
|
If you've imported all the resources from the asset into your project you'll see that they're all organized into folders called "Fluid Dynamics".
|
|
Inside these folders you can find occurrences of three types of folders: "API", "Example", and "Internal". "API" and "Internal" contain the essential
|
|
resources needed to use the Fluid Dynamics asset. "Example" contains resources used in the example that shows up when you run the game. Resources in the
|
|
"Example" folders show you how you can use most aspects of the Fluid Dynamics asset in a game.
|
|
|
|
To use Fluid Dynamics all you have to do is to call scripts from the "API" folder. All of the scripts are commented with a general
|
|
description of what the script does as well as descriptions specific to each parameter. It's recommended that you read through these whenever
|
|
you want to use them. When they are referred to later in this guide, open them and read them if you're unsure what they do.
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
Implementing Fluid Dynamics into your game - the essential steps:
|
|
|
|
First off you'll have to create a fluid dynamics rectangle with fd_rectangle_create. This script returns an instance id that you will use with the
|
|
other scripts in the asset later. A fluid dynamics rectangle represents an area that the fluid can move around in. All simulation and visualization
|
|
is done via a fluid dynamics rectangle.
|
|
|
|
After you have created a fluid dynamics rectangle, you should find a step event that you can call fd_rectangle_update in. This will make
|
|
the fluid dynamics rectangle regularly get updated so it moves the fluid around.
|
|
|
|
Then you should find a draw event to call fd_rectangle_draw in. This will draw your fluid dynamics rectangle to the screen.
|
|
|
|
After these three steps, you have a working fluid dynamics rectangle implemented, but it won't show you anything special because it doesn't have any
|
|
fluid in it yet. To add fluid, you can call fd_rectangle_replace_material or fd_rectangle_add_material. Material is the term used for the visual content
|
|
of a fluid dynamics rectangle. In a left mouse button event, you can for example do
|
|
fd_rectangle_replace_material("your fluid dynamics rectangle", "the sprite to add", "image index of sprite", "relative x", "relative y", 1, 1, c_white, 1)
|
|
which will continuously add fluid where you click with your mouse. "relative x" and "relative y" is the mouse coordinate relative to the fluid dynamics
|
|
rectangle. If you draw the fluid dynamics rectangle with 1 in scale, you can use mouse_x and mouse_y directly, but if you're scaling the fluid dynamics
|
|
rectangle (which is recommended, as it's much faster), you have to scale the mouse as well. If you're unsure on how to do this, see the example code
|
|
for how it is done.
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
How can I improve the performance of the simulation?
|
|
|
|
One way to improve performance is by reducing the fluid dynamics rectangle size. This can be done by using a smaller size when calling
|
|
fd_rectangle_create. This will set all internal textures to the size entered. Alternatively, you can change the sizes of individual elements of the fluid
|
|
dynamics rectangle after creation. This can be done with the scripts fd_rectangle_set_pressure_size, fd_rectangle_set_material_size, and
|
|
fd_rectangle_set_velocity_size.
|
|
|
|
Another way to improve performance is by reducing the quality of the simulation by lowering the number of pressure iterations. The largest bottleneck of the
|
|
simulation is to solve for pressure. You can reduce the number of pressure iterations with fd_rectangle_set_pressure_iteration_type.
|
|
|
|
If you are using multiple fluid dynamics rectangles at the same time over the same region in the world, you might want to look into
|
|
fd_rectangle_inherit_velocity. The slowest part of the simulation is to update the velocity field, and with multiple fluid dynamics rectangles you will by
|
|
default have multiple velocity fields being solved individually. If it's okay that the fluids inside these rectangles follow the same directions, you
|
|
can use fd_rectangle_inherit_velocity to reuse a velocity field, thereby removing a velocity field update and greatly improving performance.
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
Can I use this asset for a large or even infinite game world?
|
|
|
|
Yes, you can for example shift the content of the fluid dynamics rectangle as the view moves around with fd_rectangle_shift_content, and draw it at
|
|
the view's position. This will only make fluid near the view get simulated, allowing for highly detailed fluids even in large or infinite worlds. You
|
|
can make the fluid dynamics rectangle slightly bigger than the view size so that fluid outside the view disappears in an elegant way. The folder in the
|
|
API folder named "SimenGames' View Extension" contains some very useful scripts that can do all of this for you.
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
If you want to know more, there are several comments with explanations in the example code and the scripts themselves. If you need more help, you can
|
|
visit the forum thread at "https://forum.yoyogames.com/index.php?threads/fluid-dynamics-gm-studio-2.26605/" or contact me by sending a mail to
|
|
asbjorn.lystrup@gmail.com or messaging Dragon47 on the GameMaker Community.
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
|
|
|
|
}
|