
-----------------------------------
amz_best
Sat Jan 03, 2015 6:33 pm

Water...?
-----------------------------------
What is it you are trying to achieve?
I don't have the slightest clue about how to program water with water physics. I did search it up, and it talk about pressure and viscosity and elasticity... which is not wut i was looking for.


What is the problem you are having?
No idea where to begin


Post any relevant code (You may choose to attach the file instead of posting the code if it is too long)
Literally the only thing i could think off...


setscreen ("graphics:500, 500, offscreenonly")
var x, y : int := maxx div 2
loop
    cls
    x += Rand.Int (-1, 1)
    y += Rand.Int (-1, 1)
    drawfillbox (x, y, x + 50, y + 10, blue)
    View.Update
end loop



Please specify what version of Turing you are using
Latest

-----------------------------------
Nathan4102
Sat Jan 03, 2015 6:58 pm

RE:Water...?
-----------------------------------
Do you have any experience working with physics and programming together? Are you able to simulate a bouncing ball first? I don't know how to program realistic liquid physics, but I know it isn't simple with no experience.

-----------------------------------
Zren
Sat Jan 03, 2015 7:04 pm

RE:Water...?
-----------------------------------
By water, what do you mean? Do you mean an area that the player moves through slowly? You can get away with a drawing the area blue. If you want waves, then things get a lot more complicated.

As a stepping stone project, make a particle engine. In other words, a flexible array of points that move independently according to their own velocity.

-----------------------------------
amz_best
Sat Jan 03, 2015 7:20 pm

Re: Water...?
-----------------------------------
Here is the bouncing ball program you wanted:


setscreen ("graphics:500, 500, offscreenonly") 
const bRadius : int := 5 
var bX, bY : real := maxx / 2 
bY := 50 
var bouncePower : real := 5 
var fallVel : real := 0 

loop 
    if bouncePower = (bRadius + fallVel) then 
            fallVel += 0.1 
        else 
            bY := (bRadius + fallVel) 
            bouncePower -= fallVel / 10 
            fallVel := 0 
        end if 
    end if 
    cls 
    bY += bouncePower 
    bY -= fallVel 

    drawoval (round (bX), round (bY), bRadius, bRadius, black) 
    delay (10) 
    View.Update () 
end loop 


I've seen water with waves, and its super complicated. All i want is simple block water. Im making Terraria.

-----------------------------------
Insectoid
Sat Jan 03, 2015 8:30 pm

RE:Water...?
-----------------------------------
I've seen water with waves, and its super complicated.

Water IS super complicated. Even simple block water. I'm not saying you can't do it, but it will take a lot of thought. Take a very close look at Terraria's water system and try to define how it behaves. Here's some things you should think about:

-How can we calculate the proper height & width of the pool?
-How can we check if there is a leak or overflow?
-How can individual blocks of water behave?

You can cheat for now and ignore pressure, etc. I doubt even Terraria uses them.

-----------------------------------
amz_best
Sun Jan 04, 2015 6:30 pm

RE:Water...?
-----------------------------------
We know that water moves, meaning that is you check a the previous cell of water in a current section of a loop, it might be on the opposite side of the screen. Is there anyway to reorganize an array so that the previous cell becomes the one right beside it?

OR even better, 

Somehow get information about the surrounding area of the cell?

-----------------------------------
Insectoid
Sun Jan 04, 2015 7:38 pm

RE:Water...?
-----------------------------------
Is there anyway to reorganize an array so that the previous cell becomes the one right beside it? 

There are many ways, most of which are really easy. You can figure that out on your own.


Try making a program that just fills up a rectangular bucket (a U shape, basically) with water. Design it so the height of the water is a variable, so you can change the height by changing the variable. From there, you might add in a feature that automatically adjusts the height if the size of the bucket changes, to preserve volume (this is important). This will only require basic math operations to do, so you should be able to figure it out. From there, you'll notice some problems that are a little more complicated but can be solved with a lot of work.

-----------------------------------
amz_best
Tue Jan 06, 2015 5:05 pm

Re: Water...?
-----------------------------------
I got water working on my game, using this guide:
http://w-shadow.com/blog/2009/09/01/simple-fluid-simulation/

I added a variable for each block, every block has a fluid mass between 0 and 1 by 0.1.
However, their is a new problem. 

All blocks on my screen in loaded by a for loop, from left to right. 
When Water flows to the right, it ends up on the end of the screen.

Why is this happening? how do i fix it?

-----------------------------------
Nathan4102
Tue Jan 06, 2015 5:35 pm

RE:Water...?
-----------------------------------
Can you provide a code snippet or a working example?

-----------------------------------
amz_best
Tue Jan 06, 2015 5:53 pm

Re: Water...?
-----------------------------------
This is the code used for moving the blocks left and right. its litterally the exact same, but im still getting weird results..

i  - Vertical Number
s - Horizontal Number

changeInFlow := 0.1

fMass (fluid Mass) is always either, or between 0 and 1.
