/*
* Catroid: An on-device visual programming system for Android devices
* Copyright (C) 2010-2016 The Catrobat Team
* (<http://developer.catrobat.org/credits>)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* An additional term exception under section 7 of the GNU Affero
* General Public License, version 3, is available at
* http://developer.catrobat.org/license_additional_term
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.catrobat.catroid.common.defaultprojectcreators;
import android.content.Context;
import org.catrobat.catroid.ProjectManager;
import org.catrobat.catroid.R;
import org.catrobat.catroid.common.Constants;
import org.catrobat.catroid.common.DroneVideoLookData;
import org.catrobat.catroid.common.LookData;
import org.catrobat.catroid.content.Project;
import org.catrobat.catroid.content.Script;
import org.catrobat.catroid.content.SingleSprite;
import org.catrobat.catroid.content.Sprite;
import org.catrobat.catroid.content.StartScript;
import org.catrobat.catroid.content.WhenScript;
import org.catrobat.catroid.content.bricks.BrickBaseType;
import org.catrobat.catroid.content.bricks.PlaceAtBrick;
import org.catrobat.catroid.content.bricks.SetLookBrick;
import org.catrobat.catroid.content.bricks.SetSizeToBrick;
import org.catrobat.catroid.content.bricks.TurnLeftBrick;
import org.catrobat.catroid.drone.DroneBrickFactory;
import org.catrobat.catroid.io.StorageHandler;
import org.catrobat.catroid.ui.fragment.SpriteFactory;
import org.catrobat.catroid.utils.ImageEditing;
import org.catrobat.catroid.utils.UtilFile;
import java.io.File;
import java.io.IOException;
public class DefaultProjectCreatorDrone extends DefaultProjectCreator {
private static SpriteFactory spriteFactory = new SpriteFactory();
public DefaultProjectCreatorDrone() {
standardProjectNameID = R.string.default_drone_project_name;
}
@Override
public Project createDefaultProject(String projectName, Context context, boolean landscapeMode)
throws
IOException,
IllegalArgumentException {
if (StorageHandler.getInstance().projectExists(projectName)) {
throw new IllegalArgumentException("Project with name '" + projectName + "' already exists!");
}
String backgroundName = context.getString(R.string.add_look_drone_video);
TurnLeftBrick turnLeftBrick = new TurnLeftBrick(90f);
SetSizeToBrick setSizeBrick = new SetSizeToBrick(100.0);
Script whenProjectStartsScript = new StartScript();
whenProjectStartsScript.addBrick(turnLeftBrick);
whenProjectStartsScript.addBrick(setSizeBrick);
BrickBaseType brick = DroneBrickFactory.getInstanceOfDroneBrick(DroneBrickFactory.DroneBricks.DRONE_SWITCH_CAMERA_BRICK, 0, 0);
Script whenSpriteTappedScript = new WhenScript();
whenSpriteTappedScript.addBrick(brick);
Project defaultDroneProject = new Project(context, projectName, landscapeMode);
String sceneName = defaultDroneProject.getDefaultScene().getName();
defaultDroneProject.setDeviceData(context); // density anywhere here
StorageHandler.getInstance().saveProject(defaultDroneProject);
ProjectManager.getInstance().setProject(defaultDroneProject);
backgroundImageScaleFactor = ImageEditing.calculateScaleFactorToScreenSize(
R.drawable.drone_project_background, context);
File backgroundFile = UtilFile.copyImageFromResourceIntoProject(projectName, sceneName, backgroundName
+ Constants.IMAGE_STANDARD_EXTENSION, R.drawable.ic_video, context,
true, backgroundImageScaleFactor);
Sprite sprite = spriteFactory.newInstance(SingleSprite.class.getSimpleName(), backgroundName);
LookData backgroundLookData = new DroneVideoLookData();
backgroundLookData.setLookName(context.getString(R.string.add_look_drone_video));
backgroundLookData.setLookFilename(backgroundFile.getName());
sprite.getLookDataList().add(backgroundLookData);
Sprite backgroundSprite = defaultDroneProject.getDefaultScene().getSpriteList().get(0);
backgroundSprite.getLookDataList().add(backgroundLookData);
Script backgroundStartScript = new StartScript();
SetLookBrick setLookBrick = new SetLookBrick();
setLookBrick.setLook(backgroundLookData);
backgroundStartScript.addBrick(setLookBrick);
backgroundSprite.addScript(backgroundStartScript);
backgroundSprite.addScript(whenProjectStartsScript);
backgroundSprite.addScript(whenSpriteTappedScript);
String takeOffSpriteName = context.getString(R.string.default_drone_project_sprites_takeoff);
File takeOffArrowFile = UtilFile.copyImageFromResourceIntoProject(projectName, sceneName, takeOffSpriteName
+ Constants.IMAGE_STANDARD_EXTENSION, R.drawable.default_drone_project_orange_takeoff, context, true,
backgroundImageScaleFactor);
defaultDroneProject.getDefaultScene().addSprite(createDroneSprite(takeOffSpriteName, DroneBrickFactory.DroneBricks
.DRONE_TAKE_OFF_LAND_BRICK,
200, -500, takeOffArrowFile));
String rotateSpriteName = context.getString(R.string.default_drone_project_sprites_rotate);
File rotateFile = UtilFile.copyImageFromResourceIntoProject(projectName, sceneName, rotateSpriteName
+ Constants.IMAGE_STANDARD_EXTENSION, R.drawable.default_drone_project_orange_rotate, context, true,
backgroundImageScaleFactor);
defaultDroneProject.getDefaultScene().addSprite(createDroneSprite(rotateSpriteName, DroneBrickFactory.DroneBricks.DRONE_FLIP_BRICK,
-260, -500, rotateFile));
String upSpriteName = context.getString(R.string.default_drone_project_sprites_up);
File upFile = UtilFile.copyImageFromResourceIntoProject(projectName, sceneName, upSpriteName
+ Constants.IMAGE_STANDARD_EXTENSION, R.drawable.default_drone_project_orange_arrow_up, context, true,
backgroundImageScaleFactor);
defaultDroneProject.getDefaultScene().addSprite(createDroneSprite(upSpriteName, DroneBrickFactory.DroneBricks.DRONE_MOVE_UP_BRICK, -100,
500, upFile, 2000));
//Down Sprite
String downSpriteName = context.getString(R.string.default_drone_project_sprites_down);
File downFile = UtilFile.copyImageFromResourceIntoProject(projectName, sceneName, downSpriteName
+ Constants.IMAGE_STANDARD_EXTENSION, R.drawable.default_drone_project_orange_arrow_down, context,
true, backgroundImageScaleFactor);
defaultDroneProject.getDefaultScene().addSprite(createDroneSprite(downSpriteName, DroneBrickFactory.DroneBricks.DRONE_MOVE_DOWN_BRICK,
-100, -500, downFile, 2000));
//Forward Sprite
String forwardSpriteName = context.getString(R.string.default_drone_project_sprites_forward);
File forwardFile = UtilFile.copyImageFromResourceIntoProject(projectName, sceneName, forwardSpriteName
+ Constants.IMAGE_STANDARD_EXTENSION, R.drawable.default_drone_project_orange_go_forward, context,
true, backgroundImageScaleFactor);
defaultDroneProject.getDefaultScene().addSprite(createDroneSprite(forwardSpriteName,
DroneBrickFactory.DroneBricks.DRONE_MOVE_FORWARD_BRICK, 100, 300, forwardFile, 2000));
//Backward Sprite
String backwardSpriteName = context.getString(R.string.default_drone_project_sprites_back);
File backwardFile = UtilFile.copyImageFromResourceIntoProject(projectName, sceneName, downSpriteName
+ Constants.IMAGE_STANDARD_EXTENSION, R.drawable.default_drone_project_orange_go_back, context, true,
backgroundImageScaleFactor);
defaultDroneProject.getDefaultScene().addSprite(createDroneSprite(backwardSpriteName,
DroneBrickFactory.DroneBricks.DRONE_MOVE_BACKWARD_BRICK, 100, -300, backwardFile, 2000));
//Left Sprite
String leftSpriteName = context.getString(R.string.default_drone_project_sprites_left);
File leftFile = UtilFile.copyImageFromResourceIntoProject(projectName, sceneName, leftSpriteName
+ Constants.IMAGE_STANDARD_EXTENSION, R.drawable.default_drone_project_orange_go_left, context, true,
backgroundImageScaleFactor);
defaultDroneProject.getDefaultScene().addSprite(createDroneSprite(leftSpriteName, DroneBrickFactory.DroneBricks.DRONE_MOVE_LEFT_BRICK,
0, -100, leftFile, 2000));
//Right Sprite
String rightSpriteName = context.getString(R.string.default_drone_project_sprites_right);
File rightFile = UtilFile.copyImageFromResourceIntoProject(projectName, sceneName, rightSpriteName
+ Constants.IMAGE_STANDARD_EXTENSION, R.drawable.default_drone_project_orange_go_right, context, true,
backgroundImageScaleFactor);
defaultDroneProject.getDefaultScene().addSprite(createDroneSprite(rightSpriteName, DroneBrickFactory.DroneBricks.DRONE_MOVE_RIGHT_BRICK,
0, 100, rightFile, 2000));
//Turn Left Sprite
String turnLeftSpriteName = context.getString(R.string.default_drone_project_sprites_turn_left);
File turnLeftFile = UtilFile.copyImageFromResourceIntoProject(projectName, sceneName, turnLeftSpriteName
+ Constants.IMAGE_STANDARD_EXTENSION, R.drawable.default_drone_project_orange_turn_left, context, true,
backgroundImageScaleFactor);
defaultDroneProject.getDefaultScene().addSprite(createDroneSprite(turnLeftSpriteName,
DroneBrickFactory.DroneBricks.DRONE_TURN_LEFT_BRICK, 200, -100, turnLeftFile, 2000));
//Turn Right Sprite
String turnRightSpriteName = context.getString(R.string.default_drone_project_sprites_turn_right);
File turnRightFile = UtilFile.copyImageFromResourceIntoProject(projectName, sceneName, turnRightSpriteName
+ Constants.IMAGE_STANDARD_EXTENSION, R.drawable.default_drone_project_orange_turn_right, context,
true, backgroundImageScaleFactor);
defaultDroneProject.getDefaultScene().addSprite(createDroneSprite(turnRightSpriteName,
DroneBrickFactory.DroneBricks.DRONE_TURN_RIGHT_BRICK, 200, 100, turnRightFile, 2000));
//Emergency Sprite
String emergencySpriteName = context.getString(R.string.default_drone_project_sprites_emergency);
File emergencyFile = UtilFile.copyImageFromResourceIntoProject(projectName, sceneName, emergencySpriteName
+ Constants.IMAGE_STANDARD_EXTENSION, R.drawable.default_drone_project_orange_go_emergency, context,
true, backgroundImageScaleFactor);
defaultDroneProject.getDefaultScene().addSprite(createDroneSprite(emergencySpriteName,
DroneBrickFactory.DroneBricks.DRONE_GO_EMERGENCY, 200, 500, emergencyFile, 2000));
StorageHandler.getInstance().saveProject(defaultDroneProject);
return defaultDroneProject;
}
private Sprite createDroneSprite(String spriteName, DroneBrickFactory.DroneBricks droneBrick, int xPosition,
int yPosition, File lookFile) {
return createDroneSprite(spriteName, droneBrick, xPosition, yPosition, lookFile, 0, 0);
}
private Sprite createDroneSprite(String spriteName, DroneBrickFactory.DroneBricks brickName, int xPosition,
int yPosition, File lookFile, int timeInMilliseconds) {
return createDroneSprite(spriteName, brickName, xPosition, yPosition, lookFile, timeInMilliseconds, 20);
}
private Sprite createDroneSprite(String spriteName, DroneBrickFactory.DroneBricks droneBrick, int xPosition,
int yPosition, File lookFile, int timeInMilliseconds, int powerInPercent) {
Sprite sprite = spriteFactory.newInstance(SingleSprite.class.getSimpleName(), spriteName);
Script whenSpriteTappedScript = new WhenScript();
BrickBaseType brick = DroneBrickFactory.getInstanceOfDroneBrick(droneBrick, timeInMilliseconds, powerInPercent);
whenSpriteTappedScript.addBrick(brick);
Script whenProjectStartsScript = new StartScript();
PlaceAtBrick placeAtBrick = new PlaceAtBrick(calculateValueRelativeToScaledBackground(xPosition),
calculateValueRelativeToScaledBackground(yPosition));
SetSizeToBrick setSizeBrick = new SetSizeToBrick(50.0);
TurnLeftBrick turnLeftBrick = new TurnLeftBrick(90f);
whenProjectStartsScript.addBrick(placeAtBrick);
whenProjectStartsScript.addBrick(setSizeBrick);
whenProjectStartsScript.addBrick(turnLeftBrick);
LookData lookData = new LookData(spriteName + " icon", lookFile.getName());
sprite.getLookDataList().add(lookData);
sprite.addScript(whenSpriteTappedScript);
sprite.addScript(whenProjectStartsScript);
return sprite;
}
}