Package com.google.gwt.maeglin89273.game.ashinyballonthecross.client.tutorial

Source Code of com.google.gwt.maeglin89273.game.ashinyballonthecross.client.tutorial.TutorialManager

/**
*
*/
package com.google.gwt.maeglin89273.game.ashinyballonthecross.client.tutorial;

import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.maeglin89273.game.ashinyballonthecross.client.tutorial.component.BlueMark;
import com.google.gwt.maeglin89273.game.ashinyballonthecross.client.tutorial.component.NextStepButton;
import com.google.gwt.maeglin89273.game.ashinyballonthecross.client.tutorial.component.StepBoard;
import com.google.gwt.maeglin89273.game.ashinyballonthecross.client.tutorial.component.StepComponent;
import com.google.gwt.maeglin89273.game.ashinyballonthecross.client.tutorial.component.TasksList;
import com.google.gwt.maeglin89273.game.mengine.asset.JsonFile;
import com.google.gwt.maeglin89273.game.mengine.physics.Point;

/**
* @author Maeglin Liao
*
*/
public class TutorialManager{

  private final TaskDetector detector;
  private int stepIndex=-1;
 
  private final StepBoard board;
 
  private final StepComponent[] taskCmpts;
  private static final int BUTTON_INDEX=0,LIST_INDEX=1,MARK_INDEX=2;
 
  private Step[] steps;
  public TutorialManager(JsonFile configs,double gameWidth,double gameHeight,int markNum,TaskHandler[] handlers){
    this.detector=new TaskDetector(this);
   
    this.board=new StepBoard(new Point(10,10),gameWidth/2);
   
    this.taskCmpts=new StepComponent[2+(markNum<1?1:markNum)];
    this.taskCmpts[BUTTON_INDEX]=new NextStepButton(new Point(gameWidth-130,gameHeight-60),this);
    this.taskCmpts[LIST_INDEX]=new TasksList(gameWidth-185,gameHeight)
    for(int i=2;i<this.taskCmpts.length;i++){
      this.taskCmpts[i]=new BlueMark();
    }
   
    this.parseSteps(configs,handlers);
  }
  public void startTutorial(){
    toNextStep();
  }
  private void parseSteps(JsonFile jsonConfigs,TaskHandler[] handlers){
    JSONArray stepConfigs=jsonConfigs.getJsonValue().isObject().get("tutorial_steps").isArray();
    this.steps=new Step[stepConfigs.size()];
    JSONObject jsonStep;
    for(int i=0;i<steps.length;i++){
      jsonStep=stepConfigs.get(i).isObject();
      this.steps[i]=new Step(jsonStep.get(Step.TITLE_KEY).isString().stringValue(),
          (int)jsonStep.get(Step.CORNER_X_KEY).isNumber().doubleValue(),
          (int)jsonStep.get(Step.CORNER_Y_KEY).isNumber().doubleValue(),
          parseTasks(jsonStep), handlers[i]);
    }
  }
  private TaskBuilder[] parseTasks(JSONObject jsonStep) {
    JSONObject jsonTasks=jsonStep.get(TaskBuilder.TASKS_KEY).isObject();
    TaskBuilder[] builders=new TaskBuilder[jsonTasks.size()];
    int i=0;
    if(jsonTasks.containsKey(TaskBuilder.ButtonBuilder.BUTTON_KEY)){
      builders[i++]=new TaskBuilder.ButtonBuilder();
    }
   
    if(jsonTasks.containsKey(TaskBuilder.BlueMarkBuilder.MARK_KEY)){
      JSONObject jsonMark=jsonTasks.get(TaskBuilder.BlueMarkBuilder.MARK_KEY).isObject();
      builders[i++]=new TaskBuilder.BlueMarkBuilder((int) jsonMark.get(TaskBuilder.BlueMarkBuilder.INDEX_KEY).isNumber().doubleValue(),
                              jsonMark.get(TaskBuilder.BlueMarkBuilder.X_KEY).isNumber().doubleValue(),
                              jsonMark.get(TaskBuilder.BlueMarkBuilder.Y_KEY).isNumber().doubleValue(),
                              jsonMark.get(TaskBuilder.BlueMarkBuilder.ANGLE_KEY).isNumber().doubleValue());
    }
   
    if(jsonTasks.containsKey(TaskBuilder.TaskListBuilder.LIST_KEY)){
      JSONObject jsonList=jsonTasks.get(TaskBuilder.TaskListBuilder.LIST_KEY).isObject();
      builders[i++]=new TaskBuilder.TaskListBuilder((int)jsonList.get(TaskBuilder.TaskListBuilder.HEIGHT_KEY).isNumber().doubleValue(),
                              (int)jsonList.get(TaskBuilder.TaskListBuilder.Y_KEY).isNumber().doubleValue(),
                              (int)jsonList.get(TaskBuilder.TaskListBuilder.NUM_KEY).isNumber().doubleValue());
    }
    return builders;
  }

  public TaskDetector getDetector(){
    return detector;
  }
 
  public int getStepIndex(){
    return stepIndex;
  }
  public StepBoard getStepBoard(){
    return board;
  }
  public NextStepButton getButton(){
    return (NextStepButton) this.taskCmpts[BUTTON_INDEX];
  }
  public TasksList getTasksList(){
    return (TasksList) this.taskCmpts[LIST_INDEX];
  }
  public BlueMark getBlueMark(int index){
    return (BlueMark) this.taskCmpts[MARK_INDEX+index];
  }
  public void handInEvidence(Object evidence){
    if(steps[getStepIndex()].getTaskHandler().handleTask(evidence,this)&&getStepIndex()+1<steps.length){
      toNextStep();
    }
  }
  private void toNextStep(){
    stepIndex++;
    Step step=steps[stepIndex];
    getStepBoard().nextStep(step.getTitle(),
                step.getBoardCornerX(),
                step.getBoardCornerY());
    for(StepComponent c:taskCmpts){
      c.setEnabled(false);
    }
   
    for(TaskBuilder builder:step.getTaskBuilder()){
      builder.setupTask(this);
    }
  }
 
}
TOP

Related Classes of com.google.gwt.maeglin89273.game.ashinyballonthecross.client.tutorial.TutorialManager

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.