diff --git a/src/main.cpp b/src/main.cpp index c9fd154..596a1de 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -266,17 +266,41 @@ static void render(void) { int mod = MyPinball.borders.size(); for( int i=0; iradius = radius; this->mass = mass; this->pos = pos.Clone(); this->vel = vel.Clone(); this->restitution = restitution; + this->color = color; } ~Ball() {} @@ -35,21 +36,24 @@ public: libnum::num32 radius, mass, restitution; Vector2D pos, vel; + uint16_t color; }; class Obstacle { public: - Obstacle(libnum::num32 radius, Vector2D pos, libnum::num32 pushVel) { + Obstacle(libnum::num32 radius, Vector2D pos, libnum::num32 pushVel, uint16_t color) { this->radius = radius; this->pos = pos.Clone(); this->pushVel = pushVel; + this->color = color; } Obstacle() {} libnum::num32 radius, pushVel; Vector2D pos; + uint16_t color; }; @@ -57,7 +61,7 @@ class Flipper { public: Flipper(libnum::num32 radius, Vector2D pos, libnum::num32 length, libnum::num32 restAngle, libnum::num32 maxRotation, - libnum::num32 angularVelocity, libnum::num32 restitution, uint8_t side ) { + libnum::num32 angularVelocity, libnum::num32 restitution, uint8_t side, uint16_t color ) { this->radius = radius; this->pos = pos.Clone(); this->length = length; @@ -69,6 +73,7 @@ public: this->currentAngularVelocity = libnum::num32(0); this->touchIdentifier = libnum::num32(-1); this->side=side; + this->color=color; } void Simulate(libnum::num32 dt) { @@ -102,6 +107,7 @@ public: libnum::num32 currentAngularVelocity; libnum::num32 touchIdentifier; uint8_t side; + uint16_t color; }; diff --git a/src/tables.h b/src/tables.h index afd5627..553e340 100644 --- a/src/tables.h +++ b/src/tables.h @@ -25,42 +25,30 @@ void Setup_Table_0(void) { MyPinball.pause = true; MyPinball.borders.clear(); - MyPinball.borders.push_back( - Vector2D(libnum::num32(0.74), libnum::num32(0.25))); - MyPinball.borders.push_back( - Vector2D(libnum::num32(1.0) - offset, libnum::num32(0.4))); - MyPinball.borders.push_back( - Vector2D(libnum::num32(1.0) - offset, flipperHeight - offset)); - MyPinball.borders.push_back(Vector2D(offset, flipperHeight - offset)); - MyPinball.borders.push_back(Vector2D(offset, libnum::num32(0.4))); - MyPinball.borders.push_back( - Vector2D(libnum::num32(0.26), libnum::num32(0.25))); - MyPinball.borders.push_back( - Vector2D(libnum::num32(0.26), libnum::num32(offset))); - MyPinball.borders.push_back( - Vector2D(libnum::num32(0.74), libnum::num32(offset))); + MyPinball.borders.push_back( Vector2D(libnum::num32(0.74), libnum::num32(0.25))); + MyPinball.borders.push_back( Vector2D(libnum::num32(1.0) - offset, libnum::num32(0.4))); + MyPinball.borders.push_back( Vector2D(libnum::num32(1.0) - offset, flipperHeight - offset)); + MyPinball.borders.push_back( Vector2D(offset, flipperHeight - offset)); + MyPinball.borders.push_back( Vector2D(offset, libnum::num32(0.4))); + MyPinball.borders.push_back( Vector2D(libnum::num32(0.26), libnum::num32(0.25))); + MyPinball.borders.push_back( Vector2D(libnum::num32(0.26), libnum::num32(offset))); + MyPinball.borders.push_back( Vector2D(libnum::num32(0.74), libnum::num32(offset))); MyPinball.balls.clear(); libnum::num32 ball_radius = libnum::num32(0.03); libnum::num32 ball_mass = libnum::num32(PI) * ball_radius * ball_radius; Vector2D ball_pos1(libnum::num32(0.92), libnum::num32(0.5)); Vector2D ball_vel1(libnum::num32(0.2), libnum::num32(3.5)); - MyPinball.balls.push_back( - Ball(ball_radius, ball_mass, ball_pos1, ball_vel1, 0.2)); + MyPinball.balls.push_back( Ball(ball_radius, ball_mass, ball_pos1, ball_vel1, 0.2, RGB565_BLOODYRED)); Vector2D ball_pos2(libnum::num32(0.08), libnum::num32(0.5)); Vector2D ball_vel2(libnum::num32(0.2), libnum::num32(3.5)); - MyPinball.balls.push_back( - Ball(ball_radius, ball_mass, ball_pos2, ball_vel2, 0.2)); + MyPinball.balls.push_back( Ball(ball_radius, ball_mass, ball_pos2, ball_vel2, 0.2, RGB565_BLOODYRED )); MyPinball.obstacles.clear(); - MyPinball.obstacles.push_back( - Obstacle(0.1, Vector2D(libnum::num32(0.25), libnum::num32(0.6)), 2.0)); - MyPinball.obstacles.push_back( - Obstacle(0.1, Vector2D(libnum::num32(0.75), libnum::num32(0.5)), 2.0)); - MyPinball.obstacles.push_back( - Obstacle(0.12, Vector2D(libnum::num32(0.7), libnum::num32(1.0)), 2.0)); - MyPinball.obstacles.push_back( - Obstacle(0.1, Vector2D(libnum::num32(0.2), libnum::num32(1.2)), 2.0)); + MyPinball.obstacles.push_back( Obstacle(0.1, Vector2D(libnum::num32(0.25), libnum::num32(0.6)), 2.0, RGB565_OCEANBLUE)); + MyPinball.obstacles.push_back( Obstacle(0.1, Vector2D(libnum::num32(0.75), libnum::num32(0.5)), 2.0, RGB565_OCEANBLUE)); + MyPinball.obstacles.push_back( Obstacle(0.12, Vector2D(libnum::num32(0.7), libnum::num32(1.0)), 2.0, RGB565_OCEANBLUE)); + MyPinball.obstacles.push_back( Obstacle(0.1, Vector2D(libnum::num32(0.2), libnum::num32(1.2)), 2.0, RGB565_OCEANBLUE)); MyPinball.flippers.clear(); @@ -72,28 +60,80 @@ void Setup_Table_0(void) { libnum::num32 flip_restitution = libnum::num32(0.0); Vector2D flip_pos1(libnum::num32(0.26), libnum::num32(0.22)); - MyPinball.flippers.push_back(Flipper(flip_radius, flip_pos1, flip_length, - -flip_restAngle, flip_maxRotation, - flip_angularVelocity, flip_restitution, LEFT)); + MyPinball.flippers.push_back(Flipper(flip_radius, flip_pos1, flip_length, -flip_restAngle, flip_maxRotation, flip_angularVelocity, flip_restitution, LEFT, RGB565_LEMONYELLOW)); Vector2D flip_pos2(libnum::num32(0.74), libnum::num32(0.22)); - MyPinball.flippers.push_back(Flipper( - flip_radius, flip_pos2, flip_length, libnum::num32(PI) + flip_restAngle, - -flip_maxRotation, flip_angularVelocity, flip_restitution, RIGHT)); + MyPinball.flippers.push_back(Flipper( flip_radius, flip_pos2, flip_length, libnum::num32(PI) + flip_restAngle, -flip_maxRotation, flip_angularVelocity, flip_restitution, RIGHT, RGB565_LEMONYELLOW)); Vector2D flip_pos3(libnum::num32(offset), libnum::num32(1.50)); - MyPinball.flippers.push_back(Flipper(flip_radius, flip_pos3, flip_length, - -flip_restAngle, flip_maxRotation, - flip_angularVelocity, flip_restitution, LEFT)); + MyPinball.flippers.push_back(Flipper(flip_radius, flip_pos3, flip_length, -flip_restAngle, flip_maxRotation, flip_angularVelocity, flip_restitution, LEFT, RGB565_LEMONYELLOW)); Vector2D flip_pos4(libnum::num32(1.0)-offset, libnum::num32(1.25)); - MyPinball.flippers.push_back(Flipper( - flip_radius, flip_pos4, flip_length, libnum::num32(PI) + flip_restAngle, - -flip_maxRotation, flip_angularVelocity, flip_restitution, RIGHT)); - + MyPinball.flippers.push_back(Flipper( flip_radius, flip_pos4, flip_length, libnum::num32(PI) + flip_restAngle, -flip_maxRotation, flip_angularVelocity, flip_restitution, RIGHT, RGB565_LEMONYELLOW)); } + void Setup_Table_1(void) { + libnum::num32 offset = libnum::num32(0.02); + + flipperHeight = libnum::num32(1.7); + cScale = libnum::num32(azrp_height) / flipperHeight; + simWidth = libnum::num32(azrp_width) / cScale; + simHeight = libnum::num32(azrp_height) / cScale; + + MyPinball.score = 0; + MyPinball.gravity.Set(Vector2D(libnum::num32(0.0), libnum::num32(-3.0))); + MyPinball.pause = true; + + MyPinball.borders.clear(); + MyPinball.borders.push_back( Vector2D(libnum::num32(0.74), libnum::num32(0.25))); + MyPinball.borders.push_back( Vector2D(libnum::num32(1.0) - offset, libnum::num32(0.4))); + MyPinball.borders.push_back( Vector2D(libnum::num32(1.0) - offset, flipperHeight - offset)); + MyPinball.borders.push_back( Vector2D(offset, flipperHeight - offset)); + MyPinball.borders.push_back( Vector2D(offset, libnum::num32(0.4))); + MyPinball.borders.push_back( Vector2D(libnum::num32(0.26), libnum::num32(0.25))); + MyPinball.borders.push_back( Vector2D(libnum::num32(0.26), libnum::num32(offset))); + MyPinball.borders.push_back( Vector2D(libnum::num32(0.74), libnum::num32(offset))); + + MyPinball.balls.clear(); + libnum::num32 ball_radius = libnum::num32(0.03); + libnum::num32 ball_mass = libnum::num32(PI) * ball_radius * ball_radius; + Vector2D ball_pos1(libnum::num32(0.92), libnum::num32(0.5)); + Vector2D ball_vel1(libnum::num32(0.2), libnum::num32(3.5)); + MyPinball.balls.push_back( Ball(ball_radius, ball_mass, ball_pos1, ball_vel1, 0.2, RGB565_LEMONYELLOW)); + Vector2D ball_pos2(libnum::num32(0.08), libnum::num32(0.5)); + Vector2D ball_vel2(libnum::num32(0.2), libnum::num32(3.5)); + MyPinball.balls.push_back( Ball(ball_radius, ball_mass, ball_pos2, ball_vel2, 0.2, RGB565_LEMONYELLOW )); + + MyPinball.obstacles.clear(); + MyPinball.obstacles.push_back( Obstacle(0.1, Vector2D(libnum::num32(0.25), libnum::num32(0.6)), 2.0, RGB565_DEEPPURPLE)); + MyPinball.obstacles.push_back( Obstacle(0.1, Vector2D(libnum::num32(0.75), libnum::num32(0.5)), 2.0, RGB565_DEEPPURPLE)); + MyPinball.obstacles.push_back( Obstacle(0.12, Vector2D(libnum::num32(0.7), libnum::num32(1.0)), 2.0, RGB565_DEEPPURPLE)); + MyPinball.obstacles.push_back( Obstacle(0.1, Vector2D(libnum::num32(0.2), libnum::num32(1.2)), 2.0, RGB565_DEEPPURPLE)); + + + MyPinball.flippers.clear(); + libnum::num32 flip_radius = libnum::num32(0.03); + libnum::num32 flip_length = libnum::num32(0.2); + libnum::num32 flip_maxRotation = libnum::num32(1.0); + libnum::num32 flip_restAngle = libnum::num32(0.5); + libnum::num32 flip_angularVelocity = libnum::num32(10.0); + libnum::num32 flip_restitution = libnum::num32(0.0); + + Vector2D flip_pos1(libnum::num32(0.26), libnum::num32(0.22)); + MyPinball.flippers.push_back(Flipper(flip_radius, flip_pos1, flip_length, -flip_restAngle, flip_maxRotation, flip_angularVelocity, flip_restitution, LEFT, RGB565_OCEANBLUE)); + + Vector2D flip_pos2(libnum::num32(0.74), libnum::num32(0.22)); + MyPinball.flippers.push_back(Flipper( flip_radius, flip_pos2, flip_length, libnum::num32(PI) + flip_restAngle, -flip_maxRotation, flip_angularVelocity, flip_restitution, RIGHT, RGB565_OCEANBLUE)); + + Vector2D flip_pos3(libnum::num32(offset), libnum::num32(1.50)); + MyPinball.flippers.push_back(Flipper(flip_radius, flip_pos3, flip_length, -flip_restAngle, flip_maxRotation, flip_angularVelocity, flip_restitution, LEFT, RGB565_OCEANBLUE)); + + Vector2D flip_pos4(libnum::num32(1.0)-offset, libnum::num32(1.25)); + MyPinball.flippers.push_back(Flipper( flip_radius, flip_pos4, flip_length, libnum::num32(PI) + flip_restAngle, -flip_maxRotation, flip_angularVelocity, flip_restitution, RIGHT, RGB565_OCEANBLUE)); +} + +/*void Setup_Table_1(void) { flipperHeight = libnum::num32(2.0); cScale = libnum::num32(azrp_height) / flipperHeight; simWidth = libnum::num32(azrp_width) / cScale; @@ -196,6 +236,6 @@ void Setup_Table_1(void) { MyPinball.flippers.push_back(Flipper( flip_radius, flip_pos2, flip_length, libnum::num32(PI) + flip_restAngle, -flip_maxRotation, flip_angularVelocity, flip_restitution, RIGHT)); -} +}*/ #endif \ No newline at end of file diff --git a/src/utilities.h b/src/utilities.h index 52576e6..e5bed39 100644 --- a/src/utilities.h +++ b/src/utilities.h @@ -53,4 +53,32 @@ libnum::num32 SIN( libnum::num32 angle ) #define PI 3.14159265 +/* usual colors*/ +#define RGB565_BLACK 0x0000 +#define RGB565_RED 0xF800 +#define RGB565_GREEN 0x07E0 +#define RGB565_BLUE 0x001F +#define RGB565_YELLOW 0xFFE0 +#define RGB565_PURPLE 0xF81F +#define RGB565_CYAN 0x07FF +#define RGB565_WHITE 0xFFFF + + +/* advanced palette */ +#define RGB565_DARKORANGE 0xF280 +#define RGB565_ORANGE 0xF4A0 +#define RGB565_LIGHORANGE 0xF5C0 + +#define RGB565_LEMONYELLOW 0xF7C6 +#define RGB565_APPLEGREEN 0xCF25 +#define RGB565_LEAFGREEN 0x6566 + +#define RGB565_OCEANBLUE 0x0479 +#define RGB565_AZURBLUE 0x023E +#define RGB565_DEEPBLUE 0x3813 + +#define RGB565_DEEPPURPLE 0x8015 +#define RGB565_CHERRYRED 0xA0C9 +#define RGB565_BLOODYRED 0xF122 + #endif \ No newline at end of file