Particle formula help 
	 
	
		| Author | 
		Message | 
	 
		 
		copthesaint
 
  
 
    
		 | 
		
		
			
				  Posted: Fri Apr 23, 2010 10:18 pm    Post subject: Particle formula help  | 
	
				
				 | 
			 
			 
				
  | 
			 
			
				So I am making a game like the commonly know games pyro sand, and powder game. But I'm making one that will actually be educational, and realistic. What I'm just trying to do currently is make an effective system that draws the particals. keep in mind it isnt done.
 
 
	  | Turing: | 	 		  
/**
 
 *Version 0.24
 
 *Copthesaint
 
 */
View.Set ("Graphics:400;400,Title: Chemical Reaction,NoButtonBar,OffScreenOnly")
%The Property of the type of partical
type partTypeProperty  :
    record
        clr  : int
        mass  : real
        name  : string
    end record
var partTypeProperties  : flexible array 1 ..  0 of partTypeProperty
 %The identifier that holds what values have been freed.
type freeValue  :
    record
        iD  : int
    end record
var freePartValues  : flexible array 1 ..  0 of freeValue
 var freeBlockValues  : flexible array 1 ..  0 of freeValue
 %The partical values
type partical  :
    record
        x, y, rotate, yPrev  : real
        partType, rotateWay  : int
    end record
var particals  : flexible array 1 ..  0 of partical
 %The block values
type block  :
    record
        x, y  : real
        partType  : int
    end record
var blocks  : flexible array 1 ..  0 of block
 %Frees a current partical
proc destroyPartical  (particalIndex  : int)
    var freedAvalible  : boolean := false
    for i  : lower (freePartValues ) ..  upper (freePartValues )
        if freePartValues  (i ).iD  = 0 then
            freePartValues  (i ).iD  := particalIndex
 
            freedAvalible  := true
        end if
        exit when freedAvalible
     end for
    if not freedAvalible  then
        new freePartValues,  succ (upper (freePartValues ))
        freePartValues  (upper (freePartValues )).iD  := particalIndex
     end if
end destroyPartical
 %Creates a new partical
proc newPartical  (x, y, brushSize, partType  : int)
    for j  : (brushSize  * - 1) .. brushSize
         for p  : (brushSize  * - 1) .. brushSize
             var freedAvalible  : boolean := false
            for i  : lower (freePartValues ) ..  upper (freePartValues )
                if freePartValues  (i ).iD ~ = 0 then
                    particals  (freePartValues  (i ).iD ).x  := x + j + Rand.Int  (- 1,  1)
                    particals  (freePartValues  (i ).iD ).y  := y + p
 
                    particals  (freePartValues  (i ).iD ).partType  := partType
 
                    particals  (freePartValues  (i ).iD ).rotate  := 270
                    particals  (freePartValues  (i ).iD ).rotateWay  := (Rand.Int  (0,  1) * 2) -  1
                    freedAvalible  := true
                    freePartValues  (i ).iD  := 0
                end if
                exit when freedAvalible
             end for
            if not freedAvalible  then
                new particals,  succ (upper (particals ))
                particals  (upper (particals )).x  := x + j + Rand.Int  (- 1,  1)
                particals  (upper (particals )).y  := y + p
 
                particals  (upper (particals )).partType  := partType
 
                particals  (upper (particals )).rotate  := 270
                particals  (upper (particals )).rotateWay  := (Rand.Int  (0,  1) * 2) -  1
            end if
        end for
    end for
end newPartical
 %Translates each particle due to gravity
proc translateGravity  (fps  : real)
    for i  : lower (particals ) ..  upper (particals )
        particals  (i ).yPrev  := particals  (i ).y
 
        particals  (i ).y  := particals  (i ).y -  (partTypeProperties  (particals  (i ).partType ).mass  * fps )
        if particals  (i ).yPrev - particals  (i ).y ~ = 0 then
            particals  (i ).rotate  := particals  (i ).rotate +  (particals  (i ).rotateWay  * partTypeProperties  (particals  (i ).partType ).mass  * fps )
            particals  (i ).x  := particals  (i ).x +  (cosd (particals  (i ).rotate ) * fps )
            if particals  (i ).rotate <  225 or particals  (i ).rotate >  315 then
                particals  (i ).rotate  := 270
                particals  (i ).rotateWay  := (Rand.Int  (0,  1) * 2) -  1
            end if
        end if
    end for
end translateGravity
 %Loads The Partical Values
proc loadTypes  (fileName  : string)
    var streamID  : int
    open : streamID, fileName,  get
    loop
        exit when eof (streamID )
        new partTypeProperties,  succ (upper (partTypeProperties ))
        get : streamID, partTypeProperties  (upper (partTypeProperties )).name
         get : streamID, partTypeProperties  (upper (partTypeProperties )).clr
         get : streamID, partTypeProperties  (upper (partTypeProperties )).mass
     end loop
    close (streamID )
end loadTypes
 
loadTypes  ("Partical_Types.txt")
var x, y, b1, b2  : int := 0
var brushSize  : int := 1
var partType  : int := 1
var hit  : boolean := false
var fpsCurrent, fpsPrevious  : real := 30
loop
    fpsCurrent  := Time.ElapsedCPU - fpsCurrent
 
    fpsPrevious  := 30 /  (1000 / fpsCurrent )
    fpsCurrent  := Time.ElapsedCPU
    Mouse.Where (x, y, b1 )
    if b1  = 0 and hit  = true then
        hit  := false
    end if
    if b1  = 1 and hit ~ = true then
        hit  := true
        b2  := 1
    end if
    if hit  = true and b2  = 1 then
        newPartical  (x, y, brushSize, partType )
    end if
    b2  := 0
    translateGravity  (fpsPrevious )
    for i  : lower (particals ) ..  upper (particals )
        drawdot (round (particals  (i ).x ), round (particals  (i ).y ), partTypeProperties  (particals  (i ).partType ).clr )
    end for
    View.Update
    cls
end loop
  | 	  
 
 
I want to focus specifically on lines 91-96. There is no runtime problems, but I need help developing a formula that will more realistically show the particals moving at different velocities to different angles.  
 
 
	  | Turing: | 	 		  
particals  (i ).rotate  := particals  (i ).rotate +  (particals  (i ).rotateWay  * partTypeProperties  (particals  (i ).partType ).mass  * fps )
            particals  (i ).x  := particals  (i ).x +  (cosd (particals  (i ).rotate ) * fps )
            if particals  (i ).rotate <  225 or particals  (i ).rotate >  315 then
                particals  (i ).rotate  := 270
                particals  (i ).rotateWay  := (Rand.Int  (0,  1) * 2) -  1
            end if
  | 	  
 
 
Save this text in a new text file as Partical_Types.txt:
 
	  | code: | 	 		  hydrogen 22 -1.9 hellium 0 0 lithium 0 0 beryllium 0 0 boron 0 0 carbon 0 0 nitrogen 0 0 oxygen 0 0 fluorine 0 0 neon 0 0 sodium 0 0 magnesium 0 0 aluminium 0 0 silicon 0 0 phosphorus 0 0 sulfur 0 0 chlorine 0 0 argon 0 0  | 	  
 
 
I havnt givin elements proper values yet. | 
			 
			
				 | 
			 
		  | 
	 
	 
		 | 
		
		 | 
	 
	  
		  | 
	 
		 
		Sponsor Sponsor 
		 
  
		 | 
		
 | 
	 
	 
		  | 
	 
				 
		copthesaint
 
  
 
    
		 | 
		
		
			
				  Posted: Fri Apr 23, 2010 10:19 pm    Post subject: RE:Particle formula help  | 
	
				
				 | 
			 
			 
				
  | 
			 
			
				So right now if you ran this, it would look funny moving slow, however it looks more realistic with a higher mass.
 
 
Edit: Fyi: It wont be released this in turing, it will be released in java like the other project I have finished in turing you havnt yet seen (well sorta)   So dont worry about how fast this will run in turing.
 
 
Edit2: This may sound funny, but sorry if you get an error on line 123, its because its running to fast. | 
			 
			
				 | 
			 
		  | 
	 
	 
		 | 
		
		 | 
	 
	  
		  | 
	 
				 
		ProgrammingFun
 
  
 
    
		 | 
		
		
			
				  Posted: Sat Apr 24, 2010 9:27 am    Post subject: Re: Particle formula help  | 
	
				
				 | 
			 
			 
				
  | 
			 
			
				I get an error on line 106 saying that:
 
Quote: 
 
I/O attempted on unopened stream number -10. Open failed with message "File not found"
 
 
 
 
NVM, I guess I'm missing some file.
 
You could look into this for particles.
 
 
BTW, why do you write a program in Turing if you are just going to finalize it in Java? | 
			 
			
				 | 
			 
		  | 
	 
	 
		 | 
		
		 | 
	 
	  
		  | 
	 
				 
		copthesaint
 
  
 
    
		 | 
		
		
			
				  Posted: Sat Apr 24, 2010 10:31 am    Post subject: Re: Particle formula help  | 
	
				
				 | 
			 
			 
				
  | 
			 
			
				I write a program first in turing because Its a good base, then when I have my base, I have something to refer too. Also my thought is, if I can get it to run at a decent speed with turing, then it will run awsome with java. Also if you reed my whole post,
 
 
copthesaint wrote: 
Save this text in a new text file as Partical_Types.txt:
 	  | code: | 	 		  hydrogen 22 -1.9 hellium 0 0 lithium 0 0 beryllium 0 0 boron 0 0 carbon 0 0 nitrogen 0 0 oxygen 0 0 fluorine 0 0 neon 0 0 sodium 0 0 magnesium 0 0 aluminium 0 0 silicon 0 0 phosphorus 0 0 sulfur 0 0 chlorine 0 0 argon 0 0  | 	  
 
 
I havnt givin elements proper values yet.
 
 
 
 
Its the file your missing. and why its not running. Look at line 115
 
 
Edit: also Thats not the particle effect I'm looking for. | 
			 
			
				 | 
			 
		  | 
	 
	 
		 | 
		
		 | 
	 
	  
		  | 
	 
				 
		 | 
	 
 
	
	
	 
	
	 |