private void placePlanets() { int width = getWidth(); float planetStart = 150 * getPixelScale(); float distanceBetweenPlanets = width - planetStart; distanceBetweenPlanets /= mPlanetInfos.length; for (int i = 0; i < mPlanetInfos.length; i++) { PlanetInfo planetInfo = mPlanetInfos[i]; float distanceFromSun = planetStart + (distanceBetweenPlanets * i) + (distanceBetweenPlanets / 2.0f); float x = 0; float y = -1 * distanceFromSun; float angle = (0.5f / (mPlanetInfos.length + 1)); angle = (float) ((angle * i * Math.PI) + angle * Math.PI); Vector2 centre = new Vector2(x, y); centre.rotate(angle); centre.y *= -1; planetInfo.centre = centre; planetInfo.distanceFromSun = distanceFromSun; List<BaseColony> colonies = mStar.getColonies(); if (colonies != null && !colonies.isEmpty()) { for (BaseColony colony : colonies) { if (colony.getPlanetIndex() == mPlanetInfos[i].planet.getIndex()) { planetInfo.colony = (Colony) colony; planetInfo.buildings = new ArrayList<Building>(); for (BaseBuilding building : colony.getBuildings()) { BuildingDesign design = (BuildingDesign) DesignManager.i.getDesign(DesignKind.BUILDING, building.getDesignID()); if (design.showInSolarSystem()) { planetInfo.buildings.add((Building) building); } } if (!planetInfo.buildings.isEmpty()) { Collections.sort(planetInfo.buildings, mBuildingDesignComparator); } } } } mPlanetInfos[i] = planetInfo; } updateSelection(); }
private void drawPlanets(Canvas canvas) { for (int i = 0; i < mPlanetInfos.length; i++) { canvas.drawCircle(0, 0, mPlanetInfos[i].distanceFromSun, mPlanetPaint); } PlanetImageManager pim = PlanetImageManager.getInstance(); for (int i = 0; i < mPlanetInfos.length; i++) { final PlanetInfo planetInfo = mPlanetInfos[i]; Sprite sprite = pim.getSprite(planetInfo.planet); mMatrix.reset(); mMatrix.postTranslate(-(sprite.getWidth() / 2.0f), -(sprite.getHeight() / 2.0f)); mMatrix.postScale( 100.0f * getPixelScale() / sprite.getWidth(), 100.0f * getPixelScale() / sprite.getHeight()); mMatrix.postTranslate((float) planetInfo.centre.x, (float) planetInfo.centre.y); canvas.save(); canvas.concat(mMatrix); sprite.draw(canvas); canvas.restore(); if (planetInfo.buildings != null) { int j = 0; float angleOffset = (float) (Math.PI / 4.0) * (planetInfo.buildings.size() - 1) / 2.0f; for (Building building : planetInfo.buildings) { BuildingDesign design = building.getDesign(); Sprite buildingSprite = SpriteManager.i.getSprite(design.getSpriteName()); Vector2 pt = Vector2.pool.borrow().reset(0, -30.0f); pt.rotate(angleOffset - (float) (Math.PI / 4.0) * j); mMatrix.reset(); mMatrix.postTranslate( -(buildingSprite.getWidth() / 2.0f), -(buildingSprite.getHeight() / 2.0f)); mMatrix.postScale( 20.0f * getPixelScale() / buildingSprite.getWidth(), 20.0f * getPixelScale() / buildingSprite.getHeight()); mMatrix.postTranslate( (float) (planetInfo.centre.x + (pt.x * getPixelScale())), (float) (planetInfo.centre.y + (pt.y * getPixelScale()))); canvas.save(); canvas.concat(mMatrix); buildingSprite.draw(canvas); canvas.restore(); j++; } } if (planetInfo.colony != null) { Empire empire = EmpireManager.i.getEmpire(planetInfo.colony.getEmpireID()); if (empire != null) { Bitmap shield = EmpireShieldManager.i.getShield(mContext, empire); if (shield != null) { mMatrix.reset(); mMatrix.postTranslate(-shield.getWidth() / 2.0f, -shield.getHeight() / 2.0f); mMatrix.postScale( 20.0f * getPixelScale() / shield.getWidth(), 20.0f * getPixelScale() / shield.getHeight()); mMatrix.postTranslate( (float) planetInfo.centre.x, (float) planetInfo.centre.y + (30.0f * getPixelScale())); canvas.drawBitmap(shield, mMatrix, mPlanetPaint); } } } } }