Elements used in the Balls and Things games for the RETRO.

Dependents:   RETRO_BallsAndPaddle RETRO_BallAndHoles

Files at this revision

API Documentation at this revision

Comitter:
maxint
Date:
Sat Feb 28 16:32:03 2015 +0000
Parent:
4:f421e34313d3
Child:
6:860b82c19ecf
Commit message:
added holes

Changed in this revision

Ball.cpp Show annotated file Show diff for this revision Revisions of this file
Ball.h Show annotated file Show diff for this revision Revisions of this file
Hole.cpp Show annotated file Show diff for this revision Revisions of this file
Hole.h Show annotated file Show diff for this revision Revisions of this file
Wall.cpp Show annotated file Show diff for this revision Revisions of this file
Wall.h Show annotated file Show diff for this revision Revisions of this file
--- a/Ball.cpp	Sat Feb 28 11:40:24 2015 +0000
+++ b/Ball.cpp	Sat Feb 28 16:32:03 2015 +0000
@@ -86,6 +86,16 @@
     return(rBall.collides(r));
 }
 
+bool Ball::collides(Circle cObject)
+{
+    Circle cBall=this->getBoundingCircle();
+    Rectangle rBall=cBall.getBoundingRectangle();
+    Rectangle rObject=cObject.getBoundingRectangle();
+
+    return(rBall.collides(rObject));
+}
+
+
 bool Ball::collides(Line ln)
 {
     Circle cBall=this->getBoundingCircle();
--- a/Ball.h	Sat Feb 28 11:40:24 2015 +0000
+++ b/Ball.h	Sat Feb 28 16:32:03 2015 +0000
@@ -33,6 +33,7 @@
 
         Circle getBoundingCircle();
         bool collides(Rectangle r);
+        bool collides(Circle cObject);
         bool collides(Line ln);
         void Bounce(Vector vBounce);
         void BounceAgainst(Vector vBounce);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Hole.cpp	Sat Feb 28 16:32:03 2015 +0000
@@ -0,0 +1,86 @@
+#include "Hole.h"
+
+Hole::Hole() : cHole(0,0,0)
+{   // constructor
+}
+
+Hole::Hole(LCD_ST7735* pDisp) : cHole(0,0,0)
+{   // constructor
+    this->pDisp=pDisp;
+    setColor(Color565::Gray);
+    this->fActive=false;
+}
+
+Hole::Hole(LCD_ST7735* pDisp, uint16_t uClr) : cHole(0,0,0)
+{   // constructor
+    this->pDisp=pDisp;
+    setColor(uClr);
+    this->fActive=false;
+}
+
+uint16_t Hole::dimmedColor(uint16_t uColor)
+{
+    uint16_t r, g, b;
+   
+    r=(uColor >> 11) <<3;
+    g=((uColor >> 5) & 0x3F) <<2;
+    b=(uColor & 0x1F) << 3;
+    r=r*2/3;
+    g=g*2/3;
+    b=b*2/3;
+
+    return(Color565::fromRGB((uint16_t)r,(uint16_t)g,(uint16_t)b));
+}
+
+void Hole::setColor(uint16_t uClr)
+{
+    uColor=uClr;
+    this->uColorHigh=uColor;
+    this->uColorMid=dimmedColor(uColorHigh);
+    this->uColorLow=dimmedColor(uColorMid);
+}
+
+
+
+void Hole::setCirc(Circle cNew)
+{
+    cHole=cNew;
+}
+
+
+Circle Hole::getCirc()
+{
+    return(cHole);
+}
+
+bool Hole::collides(Circle cObject)
+{
+    // TODO: could be more precise
+    Rectangle rHole=cHole.getBoundingRectangle();
+    Rectangle rObject=cObject.getBoundingRectangle();
+
+    return(rHole.collides(rObject));
+}
+
+bool Hole::hasGoneIn(Circle cObject)
+{   // check if circular object has entered the hole
+    if(abs(cHole.getX()-cObject.getX())<=2 && abs(cHole.getY()-cObject.getY())<=2)
+        return(true);
+    return(false);
+}
+
+void Hole::draw()
+{
+    int x=cHole.getX();
+    int y=cHole.getY();
+    int r=cHole.getRadius();
+    pDisp->fillCircle(x, y, r, this->uColorMid, this->uColorLow);
+    pDisp->fillCircle(x+r/2-r/3, y+r/2-r/3, r-2, Color565::Black, Color565::Black);
+
+/*
+char szBuffer[256];
+sprintf(szBuffer, "h:%d,%d - %d     ", cHole.getX(), cHole.getY(), cHole.getRadius());
+pDisp->drawString(font_oem, 0, 0, szBuffer);
+*/
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Hole.h	Sat Feb 28 16:32:03 2015 +0000
@@ -0,0 +1,35 @@
+#pragma once
+#include "mbed.h"
+
+#include "Color565.h"
+#include "font_OEM.h"
+#include "LCD_ST7735.h"
+
+#include "Shapes.h"
+
+class Hole
+{
+    public:
+        Hole();
+        Hole(LCD_ST7735* pDisp);
+        Hole(LCD_ST7735* pDisp, uint16_t uClr);
+        void setColor(uint16_t uClr);
+        void draw();
+        void setCirc(Circle cNew);
+        Circle getCirc();
+        bool collides(Circle cObject);
+        bool hasGoneIn(Circle cObject);
+
+        bool fActive;
+
+    protected:
+        uint16_t dimmedColor(uint16_t uColor);
+
+    private:
+        uint16_t uColor;
+        uint16_t uColorHigh;
+        uint16_t uColorMid;
+        uint16_t uColorLow;
+        LCD_ST7735* pDisp;
+        Circle cHole;        
+};        
\ No newline at end of file
--- a/Wall.cpp	Sat Feb 28 11:40:24 2015 +0000
+++ b/Wall.cpp	Sat Feb 28 16:32:03 2015 +0000
@@ -11,6 +11,14 @@
     this->fActive=false;
 }
 
+Wall::Wall(LCD_ST7735* pDisp, uint16_t uClr) : rWall(0,0,0,0)
+{   // constructor
+    this->pDisp=pDisp;
+    uColor=uClr;
+    this->fActive=false;
+}
+
+
 void Wall::setRect(Rectangle rNew)
 {
     rWall=rNew;
--- a/Wall.h	Sat Feb 28 11:40:24 2015 +0000
+++ b/Wall.h	Sat Feb 28 16:32:03 2015 +0000
@@ -12,6 +12,7 @@
     public:
         Wall();
         Wall(LCD_ST7735* pDisp);
+        Wall(LCD_ST7735* pDisp, uint16_t uClr);
         void draw();
         bool fActive;
         void setRect(Rectangle rNew);