| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -56,38 +56,37 @@ func (a *Animation) animateMario() {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						}
 | 
					 | 
					 | 
					 | 
						}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					// what mario does every frame
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					func (a *Animation) updateMarioPosition() {
 | 
					 | 
					 | 
					 | 
					func (a *Animation) updateMarioPosition() {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						// Ellipse parameters (centered on canvas)
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						centerX := a.ctx.Width() / 2
 | 
					 | 
					 | 
					 | 
						centerX := a.ctx.Width() / 2
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						centerY := a.ctx.Height() / 2
 | 
					 | 
					 | 
					 | 
						centerY := a.ctx.Height() / 2
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						// Calculate new position using parametric ellipse equations
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						t := a.mario.angle
 | 
					 | 
					 | 
					 | 
						t := a.mario.angle
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						marioX := int(float64(centerX) + math.Round(a.mario.a*math.Cos(t)))
 | 
					 | 
					 | 
					 | 
						marioX := int(math.Round(float64(a.mario.a * math.Cos(t))))
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						marioY := int(float64(centerY) + math.Round(a.mario.b*math.Sin(t)))
 | 
					 | 
					 | 
					 | 
						marioY := int(math.Round(float64(a.mario.b * math.Sin(t))))
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						// Adjust position relative to the center of the panel
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						marioX += centerX
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						marioY += centerY
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						a.mario.position.X = marioX
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						a.mario.position.Y = marioY
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						// Update angle to move along the ellipse
 | 
					 | 
					 | 
					 | 
						// Update angle to move along the ellipse
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						a.mario.angle += 0.1 // Adjust speed as needed
 | 
					 | 
					 | 
					 | 
						a.mario.angle += 0.1
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if a.mario.angle >= 2*math.Pi {
 | 
					 | 
					 | 
					 | 
						if a.mario.angle >= 2*math.Pi {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							a.mario.angle -= 2 * math.Pi
 | 
					 | 
					 | 
					 | 
							a.mario.angle -= 2 * math.Pi
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						}
 | 
					 | 
					 | 
					 | 
						}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						// Determine horizontal direction (left/right) for image flipping
 | 
					 | 
					 | 
					 | 
						// Direction logic
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if math.Sin(t) > 0 {
 | 
					 | 
					 | 
					 | 
						if math.Sin(t) > 0 {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							a.mario.dir.X = -1 // Moving left
 | 
					 | 
					 | 
					 | 
							a.mario.dir.X = -1 // Moving left
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						} else {
 | 
					 | 
					 | 
					 | 
						} else {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							a.mario.dir.X = 1 // Moving right
 | 
					 | 
					 | 
					 | 
							a.mario.dir.X = 1 // Moving right
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						}
 | 
					 | 
					 | 
					 | 
						}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						// Determine vertical direction (up/down) for image selection
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if math.Cos(t) > 0 {
 | 
					 | 
					 | 
					 | 
						if math.Cos(t) > 0 {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							a.mario.updown = "marioUp" // Moving downward
 | 
					 | 
					 | 
					 | 
							a.mario.updown = "marioUp" // Moving downward
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						} else {
 | 
					 | 
					 | 
					 | 
						} else {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							a.mario.updown = "marioDown" // Moving upward
 | 
					 | 
					 | 
					 | 
							a.mario.updown = "marioDown" // Moving upward
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						}
 | 
					 | 
					 | 
					 | 
						}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						// Update Mario's position
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						a.mario.position.X = marioX
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						a.mario.position.Y = marioY
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}
 | 
					 | 
					 | 
					 | 
					}
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
					 | 
					 | 
					
 
 |