diff options
| author | Amir Rajan <[email protected]> | 2021-01-18 12:08:34 -0600 |
|---|---|---|
| committer | Amir Rajan <[email protected]> | 2021-01-18 12:08:34 -0600 |
| commit | a4b9c048a1d751f5226833bb0c527ba1a8ac5d09 (patch) | |
| tree | 3f2535e7a6272e796d50e7f07c906d4c9eb1b14a /samples/04_physics_and_collisions/08_bouncing_on_collision | |
| parent | a24a71805b1924ae7f80776c736f94575c171d2c (diff) | |
| download | dragonruby-game-toolkit-contrib-a4b9c048a1d751f5226833bb0c527ba1a8ac5d09.tar.gz dragonruby-game-toolkit-contrib-a4b9c048a1d751f5226833bb0c527ba1a8ac5d09.zip | |
Synced with 2.3.
Diffstat (limited to 'samples/04_physics_and_collisions/08_bouncing_on_collision')
70 files changed, 627 insertions, 0 deletions
diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/app/ball.rb b/samples/04_physics_and_collisions/08_bouncing_on_collision/app/ball.rb new file mode 100644 index 0000000..80b61e3 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/app/ball.rb @@ -0,0 +1,87 @@ +GRAVITY = -0.08 + +class Ball + attr_accessor :velocity, :center, :radius, :collision_enabled + + def initialize args + #Start the ball in the top center + #@x = args.grid.w / 2 + #@y = args.grid.h - 20 + + @velocity = {x: 0, y: 0} + #@width = 20 + #@height = @width + @radius = 20.0 / 2.0 + @center = {x: (args.grid.w / 2), y: (args.grid.h)} + + #@left_wall = (args.state.board_width + args.grid.w / 8) + #@right_wall = @left_wall + args.state.board_width + @left_wall = 0 + @right_wall = $args.grid.right + + @max_velocity = 7 + @collision_enabled = true + end + + #Move the ball according to its velocity + def update args + @center.x += @velocity.x + @center.y += @velocity.y + @velocity.y += GRAVITY + + alpha = 0.2 + if @center.y-@radius <= 0 + @velocity.y = (@velocity.y.abs*0.7).abs + @velocity.x = (@velocity.x.abs*0.9).abs * ((@velocity.x < 0) ? -1 : 1) + + if @velocity.y.abs() < alpha + @velocity.y=0 + end + if @velocity.x.abs() < alpha + @velocity.x=0 + end + end + + if @center.x > args.grid.right+@radius*2 + @center.x = 0-@radius + elsif @center.x< 0-@radius*2 + @center.x = args.grid.right + @radius + end + end + + def wallBounds args + #if @x < @left_wall || @x + @width > @right_wall + #@velocity.x *= -1.1 + #if @velocity.x > @max_velocity + #@velocity.x = @max_velocity + #elsif @velocity.x < @max_velocity * -1 + #@velocity.x = @max_velocity * -1 + #end + #end + #if @y < 0 || @y + @height > args.grid.h + #@velocity.y *= -1.1 + #if @velocity.y > @max_velocity + #@velocity.y = @max_velocity + #elsif @velocity.y < @max_velocity * -1 + #@velocity.y = @max_velocity * -1 + #end + #end + end + + #render the ball to the screen + def draw args + #args.outputs.solids << [@x, @y, @width, @height, 255, 255, 0]; + args.outputs.sprites << [ + @center.x-@radius, + @center.y-@radius, + @radius*2, + @radius*2, + "sprites/circle-white.png", + 0, + 255, + 255, #r + 0, #g + 255 #b + ] + end + end diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/app/block.rb b/samples/04_physics_and_collisions/08_bouncing_on_collision/app/block.rb new file mode 100644 index 0000000..9254ee4 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/app/block.rb @@ -0,0 +1,159 @@ +DEGREES_TO_RADIANS = Math::PI / 180 + +class Block + def initialize(x, y, block_size, rotation) + @x = x + @y = y + @block_size = block_size + @rotation = rotation + + #The repel velocity? + @velocity = {x: 2, y: 0} + + horizontal_offset = (3 * block_size) * Math.cos(rotation * DEGREES_TO_RADIANS) + vertical_offset = block_size * Math.sin(rotation * DEGREES_TO_RADIANS) + + if rotation >= 0 + theta = 90 - rotation + #The line doesn't visually line up exactly with the edge of the sprite, so artificially move it a bit + modifier = 5 + x_offset = modifier * Math.cos(theta * DEGREES_TO_RADIANS) + y_offset = modifier * Math.sin(theta * DEGREES_TO_RADIANS) + @x1 = @x - x_offset + @y1 = @y + y_offset + @x2 = @x1 + horizontal_offset + @y2 = @y1 + (vertical_offset * 3) + + @imaginary_line = [ @x1, @y1, @x2, @y2 ] + else + theta = 90 + rotation + x_offset = @block_size * Math.cos(theta * DEGREES_TO_RADIANS) + y_offset = @block_size * Math.sin(theta * DEGREES_TO_RADIANS) + @x1 = @x + x_offset + @y1 = @y + y_offset + 19 + @x2 = @x1 + horizontal_offset + @y2 = @y1 + (vertical_offset * 3) + + @imaginary_line = [ @x1, @y1, @x2, @y2 ] + end + + end + + def draw args + args.outputs.sprites << [ + @x, + @y, + @block_size*3, + @block_size, + "sprites/square-green.png", + @rotation + ] + + args.outputs.lines << @imaginary_line + args.outputs.solids << @debug_shape + end + + def multiply_matricies + end + + def calc args + if collision? args + collide args + end + end + + #Determine if the ball and block are touching + def collision? args + #The minimum area enclosed by the center of the ball and the 2 corners of the block + #If the area ever drops below this value, we know there is a collision + min_area = ((@block_size * 3) * args.state.ball.radius) / 2 + + #https://www.mathopenref.com/coordtrianglearea.html + ax = @x1 + ay = @y1 + bx = @x2 + by = @y2 + cx = args.state.ball.center.x + cy = args.state.ball.center.y + + current_area = (ax*(by-cy)+bx*(cy-ay)+cx*(ay-by))/2 + + collision = false + if @rotation >= 0 + if (current_area < min_area && + current_area > 0 && + args.state.ball.center.y > @y1 && + args.state.ball.center.x < @x2) + + collision = true + end + else + if (current_area < min_area && + current_area > 0 && + args.state.ball.center.y > @y2 && + args.state.ball.center.x > @x1) + + collision = true + end + end + + return collision + end + + def collide args + #Slope of the block + slope = (@y2 - @y1) / (@x2 - @x1) + + #Create a unit vector and tilt it (@rotation) number of degrees + x = -Math.cos(@rotation * DEGREES_TO_RADIANS) + y = Math.sin(@rotation * DEGREES_TO_RADIANS) + + #Find the vector that is perpendicular to the slope + perpVect = { x: x, y: y } + mag = (perpVect.x**2 + perpVect.y**2)**0.5 # find the magniude of the perpVect + perpVect = {x: perpVect.x/(mag), y: perpVect.y/(mag)} # divide the perpVect by the magniude to make it a unit vector + + previousPosition = { # calculate an ESTIMATE of the previousPosition of the ball + x:args.state.ball.center.x-args.state.ball.velocity.x, + y:args.state.ball.center.y-args.state.ball.velocity.y + } + + velocityMag = (args.state.ball.velocity.x**2 + args.state.ball.velocity.y**2)**0.5 # the current velocity magnitude of the ball + theta_ball = Math.atan2(args.state.ball.velocity.y, args.state.ball.velocity.x) #the angle of the ball's velocity + theta_repel = (180 * DEGREES_TO_RADIANS) - theta_ball + (@rotation * DEGREES_TO_RADIANS) + + fbx = velocityMag * Math.cos(theta_ball) #the x component of the ball's velocity + fby = velocityMag * Math.sin(theta_ball) #the y component of the ball's velocity + + frx = velocityMag * Math.cos(theta_repel) #the x component of the repel's velocity | magnitude is set to twice of fbx + fry = velocityMag * Math.sin(theta_repel) #the y component of the repel's velocity | magnitude is set to twice of fby + + args.state.display_value = velocityMag + fsumx = fbx+frx #sum of x forces + fsumy = fby+fry #sum of y forces + fr = velocityMag #fr is the resulting magnitude + thetaNew = Math.atan2(fsumy, fsumx) #thetaNew is the resulting angle + + xnew = fr*Math.cos(thetaNew) #resulting x velocity + ynew = fr*Math.sin(thetaNew) #resulting y velocity + + dampener = 0.3 + ynew *= dampener * 0.5 + + #If the bounce is very low, that means the ball is rolling and we don't want to dampenen the X velocity + if ynew > -0.1 + xnew *= dampener + end + + #Add the sine component of gravity back in (X component) + gravity_x = 4 * Math.sin(@rotation * DEGREES_TO_RADIANS) + xnew += gravity_x + + args.state.ball.velocity.x = -xnew + args.state.ball.velocity.y = -ynew + + #Set the position of the ball to the previous position so it doesn't warp throught the block + args.state.ball.center.x = previousPosition.x + args.state.ball.center.y = previousPosition.y + end +end diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/app/cannon.rb b/samples/04_physics_and_collisions/08_bouncing_on_collision/app/cannon.rb new file mode 100644 index 0000000..4df68fe --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/app/cannon.rb @@ -0,0 +1,20 @@ +class Cannon + def initialize args + @pointA = {x: args.grid.right/2,y: args.grid.top} + @pointB = {x: args.inputs.mouse.x, y: args.inputs.mouse.y} + end + def update args + activeBall = args.state.ball + @pointB = {x: args.inputs.mouse.x, y: args.inputs.mouse.y} + + if args.inputs.mouse.click + alpha = 0.01 + activeBall.velocity.y = (@pointB.y - @pointA.y) * alpha + activeBall.velocity.x = (@pointB.x - @pointA.x) * alpha + activeBall.center = {x: (args.grid.w / 2), y: (args.grid.h)} + end + end + def render args + args.outputs.lines << [@pointA.x, @pointA.y, @pointB.x, @pointB.y] + end +end diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/app/main.rb b/samples/04_physics_and_collisions/08_bouncing_on_collision/app/main.rb new file mode 100644 index 0000000..f5883ad --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/app/main.rb @@ -0,0 +1,117 @@ +INFINITY= 10**10 + +require 'app/vector2d.rb' +require 'app/peg.rb' +require 'app/block.rb' +require 'app/ball.rb' +require 'app/cannon.rb' + + +#Method to init default values +def defaults args + args.state.pegs ||= [] + args.state.blocks ||= [] + args.state.cannon ||= Cannon.new args + args.state.ball ||= Ball.new args + args.state.horizontal_offset ||= 0 + init_pegs args + init_blocks args + + args.state.display_value ||= "test" +end + +begin :default_methods + def init_pegs args + num_horizontal_pegs = 14 + num_rows = 5 + + return unless args.state.pegs.count < num_rows * num_horizontal_pegs + + block_size = 32 + block_spacing = 50 + total_width = num_horizontal_pegs * (block_size + block_spacing) + starting_offset = (args.grid.w - total_width) / 2 + block_size + + for i in (0...num_rows) + for j in (0...num_horizontal_pegs) + row_offset = 0 + if i % 2 == 0 + row_offset = 20 + else + row_offset = -20 + end + args.state.pegs.append(Peg.new(j * (block_size+block_spacing) + starting_offset + row_offset, (args.grid.h - block_size * 2) - (i * block_size * 2)-90, block_size)) + end + end + + end + + def init_blocks args + return unless args.state.blocks.count < 10 + + #Sprites are rotated in degrees, but the Ruby math functions work on radians + radians_to_degrees = Math::PI / 180 + + block_size = 25 + #Rotation angle (in degrees) of the blocks + rotation = 30 + vertical_offset = block_size * Math.sin(rotation * radians_to_degrees) + horizontal_offset = (3 * block_size) * Math.cos(rotation * radians_to_degrees) + center = args.grid.w / 2 + + for i in (0...5) + #Create a ramp of blocks. Not going to be perfect because of the float to integer conversion and anisotropic to isotropic coversion + args.state.blocks.append(Block.new((center + 100 + (i * horizontal_offset)).to_i, 100 + (vertical_offset * i) + (i * block_size), block_size, rotation)) + args.state.blocks.append(Block.new((center - 100 - (i * horizontal_offset)).to_i, 100 + (vertical_offset * i) + (i * block_size), block_size, -rotation)) + end + end +end + +#Render loop +def render args + args.outputs.borders << args.state.game_area + render_pegs args + render_blocks args + args.state.cannon.render args + args.state.ball.draw args +end + +begin :render_methods + #Draw the pegs in a grid pattern + def render_pegs args + args.state.pegs.each do |peg| + peg.draw args + end + end + + def render_blocks args + args.state.blocks.each do |block| + block.draw args + end + end + +end + +#Calls all methods necessary for performing calculations +def calc args + args.state.pegs.each do |peg| + peg.calc args + end + + args.state.blocks.each do |block| + block.calc args + end + + args.state.ball.update args + args.state.cannon.update args +end + +begin :calc_methods + +end + +def tick args + defaults args + render args + calc args +end diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/app/peg.rb b/samples/04_physics_and_collisions/08_bouncing_on_collision/app/peg.rb new file mode 100644 index 0000000..52045de --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/app/peg.rb @@ -0,0 +1,182 @@ +class Peg + def initialize(x, y, block_size) + @x = x # x cordinate of the LEFT side of the peg + @y = y # y cordinate of the RIGHT side of the peg + @block_size = block_size # diameter of the peg + + @radius = @block_size/2.0 # radius of the peg + @center = { # cordinatees of the CENTER of the peg + x: @x+@block_size/2.0, + y: @y+@block_size/2.0 + } + + @r = 255 # color of the peg + @g = 0 + @b = 0 + + @velocity = {x: 2, y: 0} + end + + def draw args + args.outputs.sprites << [ # draw the peg according to the @x, @y, @radius, and the RGB + @x, + @y, + @radius*2.0, + @radius*2.0, + "sprites/circle-white.png", + 0, + 255, + @r, #r + @g, #g + @b #b + ] + end + + + def calc args + if collisionWithBounce? args # if the is a collision with the bouncing ball + collide args + @r = 0 + @b = 0 + @g = 255 + else + end + end + + + # do two circles (the ball and this peg) intersect + def collisionWithBounce? args + squareDistance = ( # the squared distance between the ball's center and this peg's center + (args.state.ball.center.x - @center.x) ** 2.0 + + (args.state.ball.center.y - @center.y) ** 2.0 + ) + radiusSum = ( # the sum of the radius squared of the this peg and the ball + (args.state.ball.radius + @radius) ** 2.0 + ) + # if the squareDistance is less or equal to radiusSum, then there is a radial intersection between the ball and this peg + return (squareDistance <= radiusSum) + end + + # ! The following links explain the getRepelMagnitude function ! + # https://raw.githubusercontent.com/DragonRuby/dragonruby-game-toolkit-physics/master/docs/docImages/LinearCollider_4.png + # https://raw.githubusercontent.com/DragonRuby/dragonruby-game-toolkit-physics/master/docs/docImages/LinearCollider_5.png + # https://github.com/DragonRuby/dragonruby-game-toolkit-physics/blob/master/docs/LinearCollider.md + def getRepelMagnitude (args, fbx, fby, vrx, vry, ballMag) + a = fbx ; b = vrx ; c = fby + d = vry ; e = ballMag + if b**2 + d**2 == 0 + #unexpected + end + + x1 = (-a*b+-c*d + (e**2 * b**2 - b**2 * c**2 + 2*a*b*c*d + e**2 + d**2 - a**2 * d**2)**0.5)/(b**2 + d**2) + x2 = -((a*b + c*d + (e**2 * b**2 - b**2 * c**2 + 2*a*b*c*d + e**2 * d**2 - a**2 * d**2)**0.5)/(b**2 + d**2)) + + err = 0.00001 + o = ((fbx + x1*vrx)**2 + (fby + x1*vry)**2 ) ** 0.5 + p = ((fbx + x2*vrx)**2 + (fby + x2*vry)**2 ) ** 0.5 + r = 0 + + if (ballMag >= o-err and ballMag <= o+err) + r = x1 + elsif (ballMag >= p-err and ballMag <= p+err) + r = x2 + else + #unexpected + end + + if (args.state.ball.center.x > @center.x) + return x2*-1 + end + + return x2 + + #return r + end + + #this sets the new velocity of the ball once it has collided with this peg + def collide args + normalOfRCCollision = [ #this is the normal of the collision in COMPONENT FORM + {x: @center.x, y: @center.y}, #see https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.mathscard.co.uk%2Fonline%2Fcircle-coordinate-geometry%2F&psig=AOvVaw2GcD-e2-nJR_IUKpw3hO98&ust=1605731315521000&source=images&cd=vfe&ved=0CAIQjRxqFwoTCMjBo7e1iu0CFQAAAAAdAAAAABAD + {x: args.state.ball.center.x, y: args.state.ball.center.y}, + ] + + normalSlope = ( #normalSlope is the slope of normalOfRCCollision + (normalOfRCCollision[1].y - normalOfRCCollision[0].y) / + (normalOfRCCollision[1].x - normalOfRCCollision[0].x) + ) + slope = normalSlope**-1.0 * -1 # slope is the slope of the tangent + # args.state.display_value = slope + pointA = { # pointA and pointB are using the var slope to tangent in COMPONENT FORM + x: args.state.ball.center.x-1, + y: -(slope-args.state.ball.center.y) + } + pointB = { + x: args.state.ball.center.x+1, + y: slope+args.state.ball.center.y + } + + perpVect = {x: pointB.x - pointA.x, y:pointB.y - pointA.y} # perpVect is to be VECTOR of the perpendicular tangent + mag = (perpVect.x**2 + perpVect.y**2)**0.5 # find the magniude of the perpVect + perpVect = {x: perpVect.x/(mag), y: perpVect.y/(mag)} # divide the perpVect by the magniude to make it a unit vector + perpVect = {x: -perpVect.y, y: perpVect.x} # swap the x and y and multiply by -1 to make the vector perpendicular + args.state.display_value = perpVect + if perpVect.y > 0 #ensure perpVect points upward + perpVect = {x: perpVect.x*-1, y: perpVect.y*-1} + end + + previousPosition = { # calculate an ESTIMATE of the previousPosition of the ball + x:args.state.ball.center.x-args.state.ball.velocity.x, + y:args.state.ball.center.y-args.state.ball.velocity.y + } + + yInterc = pointA.y + -slope*pointA.x + if slope == INFINITY # the perpVect presently either points in the correct dirrection or it is 180 degrees off we need to correct this + if previousPosition.x < pointA.x + perpVect = {x: perpVect.x*-1, y: perpVect.y*-1} + yInterc = -INFINITY + end + elsif previousPosition.y < slope*previousPosition.x + yInterc # check if ball is bellow or above the collider to determine if perpVect is - or + + perpVect = {x: perpVect.x*-1, y: perpVect.y*-1} + end + + velocityMag = # the current velocity magnitude of the ball + (args.state.ball.velocity.x**2 + args.state.ball.velocity.y**2)**0.5 + theta_ball= + Math.atan2(args.state.ball.velocity.y,args.state.ball.velocity.x) #the angle of the ball's velocity + theta_repel= + Math.atan2(args.state.ball.center.y,args.state.ball.center.x) #the angle of the repelling force(perpVect) + + fbx = velocityMag * Math.cos(theta_ball) #the x component of the ball's velocity + fby = velocityMag * Math.sin(theta_ball) #the y component of the ball's velocity + repelMag = getRepelMagnitude( # the magniude of the collision vector + args, + fbx, + fby, + perpVect.x, + perpVect.y, + (args.state.ball.velocity.x**2 + args.state.ball.velocity.y**2)**0.5 + ) + frx = repelMag* Math.cos(theta_repel) #the x component of the repel's velocity | magnitude is set to twice of fbx + fry = repelMag* Math.sin(theta_repel) #the y component of the repel's velocity | magnitude is set to twice of fby + + fsumx = fbx+frx # sum of x forces + fsumy = fby+fry # sum of y forces + fr = velocityMag # fr is the resulting magnitude + thetaNew = Math.atan2(fsumy, fsumx) # thetaNew is the resulting angle + xnew = fr*Math.cos(thetaNew) # resulting x velocity + ynew = fr*Math.sin(thetaNew) # resulting y velocity + if (args.state.ball.center.x >= @center.x) # this is necessary for the ball colliding on the right side of the peg + xnew=xnew.abs + end + + args.state.ball.velocity.x = xnew # set the x-velocity to the new velocity + if args.state.ball.center.y > @center.y # if the ball is above the middle of the peg we need to temporarily ignore some of the gravity + args.state.ball.velocity.y = ynew + GRAVITY * 0.01 + else + args.state.ball.velocity.y = ynew - GRAVITY * 0.01 # if the ball is bellow the middle of the peg we need to temporarily increase the power of the gravity + end + + args.state.ball.center.x+= args.state.ball.velocity.x # update the position of the ball so it never looks like the ball is intersecting the circle + args.state.ball.center.y+= args.state.ball.velocity.y + end +end diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/app/vector2d.rb b/samples/04_physics_and_collisions/08_bouncing_on_collision/app/vector2d.rb new file mode 100644 index 0000000..9cb1954 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/app/vector2d.rb @@ -0,0 +1,49 @@ +class Vector2d + attr_accessor :x, :y + + def initialize x=0, y=0 + @x=x + @y=y + end + + #returns a vector multiplied by scalar x + #x [float] scalar + def mult x + r = Vector2d.new(0,0) + r.x=@x*x + r.y=@y*x + r + end + + # vect [Vector2d] vector to copy + def copy vect + Vector2d.new(@x, @y) + end + + #returns a new vector equivalent to this+vect + #vect [Vector2d] vector to add to self + def add vect + Vector2d.new(@x+vect.x,@y+vect.y) + end + + #returns a new vector equivalent to this-vect + #vect [Vector2d] vector to subtract to self + def sub vect + Vector2d.new(@x-vect.c, @y-vect.y) + end + + #return the magnitude of the vector + def mag + ((@x**2)+(@y**2))**0.5 + end + + #returns a new normalize version of the vector + def normalize + Vector2d.new(@x/mag, @y/mag) + end + + #TODO delet? + def distABS vect + (((vect.x-@x)**2+(vect.y-@y)**2)**0.5).abs() + end + end
\ No newline at end of file diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/docs/LinearCollider.md b/samples/04_physics_and_collisions/08_bouncing_on_collision/docs/LinearCollider.md new file mode 100644 index 0000000..41227a2 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/docs/LinearCollider.md @@ -0,0 +1,13 @@ +<br/>
+<img src="https://github.com/DragonRuby/dragonruby-game-toolkit-physics/blob/master/docs/docImages/LinearCollider_1.png?raw=true" width="300" height="271">
+<br/>
+<img src="https://github.com/DragonRuby/dragonruby-game-toolkit-physics/blob/master/docs/docImages/LinearCollider_2.png?raw=true" width="300" height="271">
+<br/>
+<img src="https://github.com/DragonRuby/dragonruby-game-toolkit-physics/blob/master/docs/docImages/LinearCollider_3.png?raw=true" width="300" height="271">
+<br/>
+<img src="https://github.com/DragonRuby/dragonruby-game-toolkit-physics/blob/master/docs/docImages/LinearCollider_4.png?raw=true" width="634" height="72">
+<br/>
+<img src="https://github.com/DragonRuby/dragonruby-game-toolkit-physics/blob/master/docs/docImages/LinearCollider_5.png?raw=true" width="1226" height="92">
+<br/>
+<img src="https://github.com/DragonRuby/dragonruby-game-toolkit-physics/blob/master/docs/docImages/LinearCollider_6.png?raw=true" width="300" height="271">
+<br/>
diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/docs/docImages/LinearCollider_1.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/docs/docImages/LinearCollider_1.png Binary files differnew file mode 100644 index 0000000..75c8271 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/docs/docImages/LinearCollider_1.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/docs/docImages/LinearCollider_2.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/docs/docImages/LinearCollider_2.png Binary files differnew file mode 100644 index 0000000..231a362 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/docs/docImages/LinearCollider_2.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/docs/docImages/LinearCollider_3.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/docs/docImages/LinearCollider_3.png Binary files differnew file mode 100644 index 0000000..5e552d3 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/docs/docImages/LinearCollider_3.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/docs/docImages/LinearCollider_4.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/docs/docImages/LinearCollider_4.png Binary files differnew file mode 100644 index 0000000..c1284a3 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/docs/docImages/LinearCollider_4.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/docs/docImages/LinearCollider_5.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/docs/docImages/LinearCollider_5.png Binary files differnew file mode 100644 index 0000000..035282c --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/docs/docImages/LinearCollider_5.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/docs/docImages/LinearCollider_6.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/docs/docImages/LinearCollider_6.png Binary files differnew file mode 100644 index 0000000..b1dadcb --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/docs/docImages/LinearCollider_6.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/ball.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/ball.png Binary files differnew file mode 100644 index 0000000..aec6fa4 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/ball.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/border-black.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/border-black.png Binary files differnew file mode 100644 index 0000000..c9d0bad --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/border-black.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-black.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-black.png Binary files differnew file mode 100644 index 0000000..c98e23d --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-black.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-blue.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-blue.png Binary files differnew file mode 100644 index 0000000..1726d2a --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-blue.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-gray.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-gray.png Binary files differnew file mode 100644 index 0000000..960f191 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-gray.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-green.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-green.png Binary files differnew file mode 100644 index 0000000..43cf7ee --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-green.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-indigo.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-indigo.png Binary files differnew file mode 100644 index 0000000..598e240 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-indigo.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-orange.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-orange.png Binary files differnew file mode 100644 index 0000000..5604a42 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-orange.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-red.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-red.png Binary files differnew file mode 100644 index 0000000..7f17ca6 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-red.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-violet.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-violet.png Binary files differnew file mode 100644 index 0000000..681d210 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-violet.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-white.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-white.png Binary files differnew file mode 100644 index 0000000..bd32155 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-white.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-yellow.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-yellow.png Binary files differnew file mode 100644 index 0000000..94992eb --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/circle-yellow.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/dragon-0.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/dragon-0.png Binary files differnew file mode 100644 index 0000000..fb179af --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/dragon-0.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/dragon-1.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/dragon-1.png Binary files differnew file mode 100644 index 0000000..8cfe531 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/dragon-1.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/dragon-2.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/dragon-2.png Binary files differnew file mode 100644 index 0000000..cb462e1 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/dragon-2.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/dragon-3.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/dragon-3.png Binary files differnew file mode 100644 index 0000000..04c4977 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/dragon-3.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/dragon-4.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/dragon-4.png Binary files differnew file mode 100644 index 0000000..b29fa3d --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/dragon-4.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/dragon-5.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/dragon-5.png Binary files differnew file mode 100644 index 0000000..99f4e74 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/dragon-5.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/explosion-0.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/explosion-0.png Binary files differnew file mode 100644 index 0000000..f48636f --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/explosion-0.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/explosion-1.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/explosion-1.png Binary files differnew file mode 100644 index 0000000..b4018d9 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/explosion-1.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/explosion-2.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/explosion-2.png Binary files differnew file mode 100644 index 0000000..3abaedd --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/explosion-2.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/explosion-3.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/explosion-3.png Binary files differnew file mode 100644 index 0000000..fe94a5a --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/explosion-3.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/explosion-4.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/explosion-4.png Binary files differnew file mode 100644 index 0000000..ed04237 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/explosion-4.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/explosion-5.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/explosion-5.png Binary files differnew file mode 100644 index 0000000..2cd8f06 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/explosion-5.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/explosion-6.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/explosion-6.png Binary files differnew file mode 100644 index 0000000..e55909c --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/explosion-6.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/explosion-sheet.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/explosion-sheet.png Binary files differnew file mode 100644 index 0000000..8559a5c --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/explosion-sheet.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-black.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-black.png Binary files differnew file mode 100644 index 0000000..f50c872 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-black.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-blue.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-blue.png Binary files differnew file mode 100644 index 0000000..1696bae --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-blue.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-gray.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-gray.png Binary files differnew file mode 100644 index 0000000..e8c4c5a --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-gray.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-green.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-green.png Binary files differnew file mode 100644 index 0000000..a700602 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-green.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-indigo.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-indigo.png Binary files differnew file mode 100644 index 0000000..15f6f4f --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-indigo.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-orange.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-orange.png Binary files differnew file mode 100644 index 0000000..1587173 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-orange.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-red.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-red.png Binary files differnew file mode 100644 index 0000000..d442f39 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-red.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-violet.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-violet.png Binary files differnew file mode 100644 index 0000000..3be5731 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-violet.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-white.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-white.png Binary files differnew file mode 100644 index 0000000..c1ad970 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-white.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-yellow.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-yellow.png Binary files differnew file mode 100644 index 0000000..63f5f34 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/hexagon-yellow.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-black.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-black.png Binary files differnew file mode 100644 index 0000000..fa9e463 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-black.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-blue.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-blue.png Binary files differnew file mode 100644 index 0000000..a3d8524 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-blue.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-gray.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-gray.png Binary files differnew file mode 100644 index 0000000..85dcc1d --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-gray.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-green.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-green.png Binary files differnew file mode 100644 index 0000000..ec2773e --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-green.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-indigo.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-indigo.png Binary files differnew file mode 100644 index 0000000..e6be50c --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-indigo.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-orange.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-orange.png Binary files differnew file mode 100644 index 0000000..154d81c --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-orange.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-red.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-red.png Binary files differnew file mode 100644 index 0000000..3448c4d --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-red.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-violet.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-violet.png Binary files differnew file mode 100644 index 0000000..f09bf21 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-violet.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-white.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-white.png Binary files differnew file mode 100644 index 0000000..a45793d --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-white.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-yellow.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-yellow.png Binary files differnew file mode 100644 index 0000000..9be20c7 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/isometric-yellow.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-black.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-black.png Binary files differnew file mode 100644 index 0000000..cea7bd7 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-black.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-blue.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-blue.png Binary files differnew file mode 100644 index 0000000..b840849 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-blue.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-gray.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-gray.png Binary files differnew file mode 100644 index 0000000..2142b30 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-gray.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-green.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-green.png Binary files differnew file mode 100644 index 0000000..5ef7f75 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-green.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-indigo.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-indigo.png Binary files differnew file mode 100644 index 0000000..2384108 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-indigo.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-orange.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-orange.png Binary files differnew file mode 100644 index 0000000..bb1eee7 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-orange.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-red.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-red.png Binary files differnew file mode 100644 index 0000000..3ed5f13 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-red.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-violet.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-violet.png Binary files differnew file mode 100644 index 0000000..333540c --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-violet.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-white.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-white.png Binary files differnew file mode 100644 index 0000000..378c565 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-white.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-yellow.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-yellow.png Binary files differnew file mode 100644 index 0000000..0edeeec --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/square-yellow.png diff --git a/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/star.png b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/star.png Binary files differnew file mode 100644 index 0000000..e0ee0f9 --- /dev/null +++ b/samples/04_physics_and_collisions/08_bouncing_on_collision/sprites/star.png |
