Package com.gardeneaters.game_v0.playingfield

Source Code of com.gardeneaters.game_v0.playingfield.Hexagon

package com.gardeneaters.game_v0.playingfield;

import com.google.gwt.canvas.dom.client.CanvasGradient;
import com.google.gwt.canvas.dom.client.Context2d;
import com.google.gwt.canvas.dom.client.CssColor;
import com.google.gwt.dom.client.CanvasElement;

// A hexagon does not know location and number of other hexagons
public class Hexagon {

/* 
    6/ \1
   5|   |2
    4\ /3
  */
 
  private MushroomGroup mushroomGroup;
  private int x,y,hexWidth,hexHeight;
  private Context2d context;

  private int pointingTo;
  private int team;
  //private int isActive;
  private double currentPow, finalPow;// there will be gradual change of currentPow to reach finalPow
    public boolean calculating = false;
    CssColor textWriteColor;
   
  protected Hexagon(Context2d _context, int _x, int _y, int _hexWidth, int _hexHeight){
    this.context = _context;
    mushroomGroup = new MushroomGroup(context,_x, _y, _hexWidth, _hexHeight,2);
    setTeam(0,true);
    //team = 0;
    //mushroomGroup.setType(team);
    currentPow = 0;
    pointingTo = 0;
    //changeColors();
    textWriteColor = CssColor.make("rgba(0,0,0,1)");
    resize(_x,_y,_hexWidth,_hexHeight);
  }
 
  public int getPointingTo(){
    return pointingTo;
  }
 
  protected void resize(int _x, int _y, int _hexWidth, int _hexHeight){
    this.x = _x;
    this.y = _y;
    this.hexWidth = _hexWidth;
    this.hexHeight = _hexHeight;
   
    drawHex();
    mushroomGroup.resize(_x, _y, _hexWidth, _hexHeight);
  }
 
  protected void draw() {
    //don't redraw hexagons again here..
    //if(team!=0)
     

    gradualPowerAdjustment();
    if(team!=0)
    {
      drawHex();
      mushroomGroup.draw(currentPow);
      point();
    }
    //context.setFillStyle(textWriteColor);
    //context.fillText(String.valueOf(currentPow).substring(0,3), x+hexWidth/2, y+hexHeight/2);
  }
 
  protected void gradualPowerAdjustment(){
    //TODO make it according to percentage increase or according to difference b/w final n current pow
    double diff = Math.abs(finalPow-currentPow);
    if(diff<1.0)
      diff=1;// multiplication will not result in a very small number
    if(currentPow < finalPow)
      currentPow += 0.01*diff;
    else if(currentPow > finalPow)
      currentPow -= 0.01*diff;
  }
 
  protected void point(int side) {
    if(team!=0)
    {
      this.pointingTo = side;
      point();
    }
     
  }
 
  private void point() {
   
      context.save();
     
     // drawHex();
     
      if(pointingTo!=0)
      {
        double angle = (Math.atan(0.5)+Math.PI/2)/2;
        double rotateAngle = -angle;
        for(int i =1; i<pointingTo ; i++)// side is not greater than 6
        {
          rotateAngle += angle;
        }
     //   System.out.println(rotateAngle); 
        context.translate(x+hexWidth/2, y+hexHeight/2);
        context.rotate(rotateAngle);
        CanvasElement arrow = Draw.arrow(hexWidth/4, hexHeight/4);
        context.drawImage(arrow, -arrow.getWidth()/2,-arrow.getHeight()/2);
    }
    context.restore();
    //System.out.println(calculating);
  }
 
  private void drawHex(){
//      int rndRedColor = 20;
//      int rndGreenColor = 200;
//      int rndBlueColor = 0;//Random.nextInt(255);
     
        CanvasGradient canvasGradient = context.createLinearGradient(x, y, x+hexWidth, y+hexHeight);
    //    canvasGradient.addColorStop(0, "rgba(" + rndRedColor + ", " + rndGreenColor + "," + rndBlueColor + ", 1)");
    //    canvasGradient.addColorStop(0.6, "rgba(" + (rndRedColor+5) + ", " + (rndGreenColor+5) + "," + (rndBlueColor+5) + ", 1)");
        canvasGradient.addColorStop(0, "rgba(20,200,0,1)");
        canvasGradient.addColorStop(0.6, "rgba(30,210,0,1)");
        canvasGradient.addColorStop(1, "rgba(20,100,0,1)");
       
    context.setFillStyle(canvasGradient);
    context.beginPath();
        context.moveTo(x, y+hexHeight/4);
        context.lineTo(x+hexWidth/2 , y);
        context.lineTo(x+hexWidth, y+hexHeight/4);
        context.lineTo(x+hexWidth, y+hexHeight*3/4);
        context.lineTo(x+hexWidth/2, y+hexHeight);
        context.lineTo(x, y+hexHeight*3/4);
        context.lineTo(x, y+hexHeight/4);
        context.closePath();
      context.stroke();
      context.fill();
     
  }
 
  public double getCurrentPow()
  {
    return currentPow;
  }
 
  public void setFinalPow(double _finalPow)
  {
    if(Double.compare(6.0, _finalPow)==1)
      this.finalPow = _finalPow;
    else
      this.finalPow=6.0;
  }
 
  public double getFinalPower(){
    return finalPow;
  }
 
  public void setTeam(int _team, boolean overRide){
    if(overRide || _team==0 || this.currentPow>=0.3)
    {
      this.team = _team;
      mushroomGroup.setType(team);
      if(_team==0)
        pointingTo=0;
    }
   
    //changeColors();
   
  }
 
  public int getTeam(){
    return this.team;
  }
 
//  private void changeColors(){
//    //mushroomGroup.changeType();
//    if(team==0)
//    {
//      rndRedColor = 255;
//      rndGreenColor = 255;
//      rndBlueColor = 255;
//    }
//    else if(team==1)
//    {
//        rndRedColor = 0;
//        rndGreenColor = 0;
//        rndBlueColor = 255;
//    }
//    else if(team==2)
//    {
//        rndRedColor = 255;
//        rndGreenColor = 0;
//        rndBlueColor = 255;
//    }
//    else if(team==3)
//    {
//        rndRedColor = 255;
//        rndGreenColor = 0;
//        rndBlueColor = 0;
//    }
//  }
 
  public void setPointingTo(int side){
    this.pointingTo = side;
  }
 
  public void bringToLife(int _team){
    setTeam(_team,true);
    this.currentPow = 1;
    this.finalPow = 1;
    //changeColors();
   
  }
 
}
TOP

Related Classes of com.gardeneaters.game_v0.playingfield.Hexagon

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.