Changeset 6ebf60f in galcon-client for src/com/example/helloandroid/Fleet.java


Ignore:
Timestamp:
Jun 5, 2010, 9:55:49 PM (14 years ago)
Author:
Zero Cool <devnull@…>
Branches:
master
Children:
b15ff93
Parents:
17dfb52
Message:

Updates to fleet traveling + planet attack and fleet deletion

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/com/example/helloandroid/Fleet.java

    r17dfb52 r6ebf60f  
    1616        private double slope, xIntercept;
    1717        private double direction;
    18         private Planet destination;
     18        private Planet destination, nearPlanet;
    1919        private int numShips;
    2020        private int faction;
    2121        private boolean isNextToAPlanet;
    22         private boolean dirChanged, isClockwise;
     22        private boolean isClockwise;
     23       
    2324
    2425        /* Optimising: pre-calculate paths */
     
    6364                this.destination = destination;
    6465                this.isNextToAPlanet = false;
    65                 dirChanged = false;
    6666        }
    6767
     
    175175
    176176        public void update(ArrayList<Planet> planets) {
    177                 int speed = 1; //pixels per move
     177                int speed = 3; //pixels per move
    178178                double distance, tangentDirection, angle;
    179                 Planet temp = null;
     179               
    180180                //is the ship going around a planet already
    181181                if(!isNextToAPlanet){
     
    186186                                distance = getDistanceBetween(dblX,dblY,p.getX(),p.getY());
    187187                                if(distance <= p.radius){
    188                                         temp = p;
     188                                        nearPlanet = p;
    189189                                        break;
    190190                                }
    191191                        }
    192192                        //if temp planet is not picked move along the direction by #speed
    193                         if(temp == null || dirChanged) {
     193                        if(nearPlanet == null) {
    194194                                dblY += (Math.sin(direction)*speed);
    195195                                dblX += (Math.cos(direction)*speed);
     
    198198                                y = (int)dblY;
    199199                        }else {                         
    200                                 double radAngle = Math.atan(getSlope(temp.getX(), temp.getY(), dblX, dblY));
     200                                if(nearPlanet == destination){
     201                                        attack();
     202                                        return;
     203                                }
     204                               
     205                                double radAngle = Math.atan(getSlope(nearPlanet.getX(), nearPlanet.getY(), dblX, dblY));
    201206                                //figure out which way to go clockwise or counter clockwise
    202                                 tangentDirection = (Math.atan(getSlope(temp.getX(),temp.getY(),dblX,dblY))) + (Math.PI/2);
     207                                tangentDirection = (Math.atan(getSlope(nearPlanet.getX(),nearPlanet.getY(),dblX,dblY))) + (Math.PI/2);
    203208                                angle = Math.atan((Math.tan(tangentDirection) - Math.tan(direction))/(1 + Math.tan(tangentDirection)*Math.tan(direction)));
     209                               
    204210                                if (angle <= Math.PI/2)
    205211                                        angle = Math.PI - angle;
    206212                               
    207                                 if(dblX < temp.getX())
     213                                if(dblX < nearPlanet.getX())
    208214                                        radAngle += Math.PI;
    209215                               
     
    216222                                else
    217223                                        isClockwise = true;
     224                               
    218225                                if(Math.abs(diff)>Math.PI/2)
    219226                                        direction = angle-Math.PI;
    220227                                else
    221228                                        direction = angle;
    222                                        
    223                                 dirChanged = true;
    224                                
     229                               
     230                                xIntercept = dblY - (dblX*Math.tan(direction));
     231                               
     232                                isNextToAPlanet = true;
    225233                                //figure out which way to go clockwise or counter clockwise
    226234                                /*tangentDirection = (Math.atan(getSlope(temp.getX(),temp.getY(),dblX,dblY))) + (Math.PI/2);
     
    235243                        //otherwise continue moving along the circumferenceds4
    236244                       
    237                        
    238                         if(true){
    239                                
     245                        double dist = Math.abs(destination.getY() - (direction*destination.getY()) - xIntercept)/(double)Math.sqrt(Math.pow(direction,2)+1);
     246                        Log.i("Gencon", dist + " units");
     247                        if(dist < 5){
     248                                dblY += (Math.sin(direction)*speed);
     249                                dblX += (Math.cos(direction)*speed);
     250
     251                                x = (int)dblX;
     252                                y = (int)dblY;
     253                               
     254                                if (getDistanceBetween(dblX,dblY,nearPlanet.getX(),nearPlanet.getY()) > nearPlanet.radius){
     255                                        isNextToAPlanet = false;
     256                                        nearPlanet = null;
     257                                }
    240258                        } else {
    241                                 angle = speed/temp.radius;
     259                                angle = speed/(double)nearPlanet.radius;
     260                                Log.i("Gencon", angle + "%");
    242261                                if(isClockwise){
    243                                         dblX = ((Math.cos(direction + (Math.PI/2) - angle)*(temp.radius) + temp.getX()));
    244                                         dblY = ((Math.sin(direction + (Math.PI/2) - angle)*(temp.radius) + temp.getY()));
    245                                         direction = direction - (Math.PI/2);
     262                                        dblX = ((Math.cos(direction + (Math.PI/2) - angle)*(nearPlanet.radius) + nearPlanet.getX()));
     263                                        dblY = ((Math.sin(direction + (Math.PI/2) - angle)*(nearPlanet.radius) + nearPlanet.getY()));
     264                                        direction = direction - (angle*.4);
    246265                                } else {
    247                                         dblX = ((Math.cos(direction - (Math.PI/2) + angle)*(temp.radius) + temp.getX()));
    248                                         dblY = ((Math.sin(direction - (Math.PI/2) + angle)*(temp.radius) + temp.getY()));
    249                                         direction = direction + (Math.PI/2);
     266                                        dblX = ((Math.cos(direction - (Math.PI/2) + angle)*(nearPlanet.radius) + nearPlanet.getX()));
     267                                        dblY = ((Math.sin(direction - (Math.PI/2) + angle)*(nearPlanet.radius) + nearPlanet.getY()));
     268                                        direction = direction + (angle*.4);
    250269                                }
     270                                x = (int)dblX;
     271                                y = (int)dblY;
     272                                xIntercept = dblY - (dblX*Math.tan(direction));
    251273                        }
    252274                }
     
    256278        //after the method is called the fleet needs to removed
    257279        public void attack() {
    258                 if(numShips <= destination.getNumShips()){
     280                if(this.faction == destination.getFaction())
     281                        destination.setNumShips(destination.getNumShips() + numShips);
     282                else if(numShips <= destination.getNumShips()){
    259283                        destination.setNumShips(destination.getNumShips() - numShips);
    260284                } else {
     
    262286                        destination.setFaction(this.faction);
    263287                }
     288                this.numShips = 0;
    264289        }
    265290
Note: See TracChangeset for help on using the changeset viewer.