Changeset 27
- Timestamp:
- 12/12/07 08:58:59 (1 year ago)
- Files:
-
- trunk/guisterax/data/bounce/bounce.png (modified) (previous)
- trunk/guisterax/src/asteroid.d (modified) (1 diff)
- trunk/guisterax/src/bounce.d (modified) (5 diffs)
- trunk/guisterax/src/fire.d (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/guisterax/src/asteroid.d
r22 r27 86 86 m_rot_speed = rand(-0.05, 0.05); 87 87 this.speed = speed; 88 max_speed = 5; 88 89 89 90 if (type > SMALL) { trunk/guisterax/src/bounce.d
r24 r27 33 33 import utils; 34 34 35 import std.math : PI ;35 import std.math : PI, tan; 36 36 37 37 … … 41 41 static Surface[] m_surfs; 42 42 public: 43 static float max_radius = 45;44 static float min_radius = 24;45 static float stable_radius = 42;46 static float k_radius = 0. 1;43 static float max_radius = 30; 44 static float min_radius = 10; 45 static float stable_radius = 28; 46 static float k_radius = 0.01; 47 47 float radius_force = 0; 48 48 float radius_speed = 0; … … 58 58 this(in Vect pos, in Vect speed = Vect()) { 59 59 super(new Sprite(m_surfs), pos); 60 radius = m ax_radius;61 mass = 1 0;62 max_speed = 5;60 radius = min_radius; 61 mass = 1; 62 max_speed = 4; 63 63 this.speed = speed; 64 64 } … … 72 72 radius_speed += radius_force * dt; 73 73 radius += radius_speed * dt; 74 if (radius < min_radius) {radius = min_radius; radius_speed = 0;} 75 if (radius > max_radius) {radius = max_radius; radius_speed = 0;} 74 if (radius < min_radius || radius >= max_radius) { 75 radius -= radius_speed * dt; 76 radius_speed = 0; 77 } 76 78 radius_force = 0; 77 angle = ( -radius + max_radius) / min_radius* 2*PI;79 angle = (radius - min_radius) / (max_radius - min_radius) * 2*PI; 78 80 super.move(dt); 79 81 } … … 83 85 } 84 86 85 float strenght() {86 return pow((-radius + max_radius) / min_radius, 2.) * 1;87 }88 87 89 88 override void collide(Element e) { 90 repeal(e.pos, strenght(), false); 91 e.repeal(pos, strenght(), false); 92 float inside = radius + e.radius - (e.pos - pos).norm(); 93 radius_force -= inside * 0.5; 89 // How much inside the ball the element is 90 float inside = (radius + e.radius - (e.pos - pos).norm()) / radius; 91 // How pressed is the ball 92 float pressed = (radius - max_radius) / (min_radius - max_radius); 93 // The force applied is proportional to these two factors 94 float force = inside + pressed; 95 repeal(e.pos, force, false); 96 e.repeal(pos, force, false); 97 // We also add an arbirtary radius force 98 radius_force -= 0.05; 94 99 } 95 100 }; trunk/guisterax/src/fire.d
r22 r27 60 60 if (!cast(Bounce)e) { 61 61 kill(); 62 } else { 63 append(new Timer(1, &this.kill)); 62 64 } 63 65 }
