package sample.game.model;
import java.util.ArrayList;
import library.core.model.CoreAnimation;
import library.core.model.CoreAnimationModel;
import sample.game.model.CharaModel.TARGET_TYPE;
/***
*
* isMountTarget()いらない?
*
* @author 貴裕
*
*/
public class BoatModel extends CoreAnimationModel {
private ArrayList<CharaModel> rideMenbers;
private int maxMenberNum; //乗船人数の制限
private static final int BOAT_RIGHT_X=800;
private static final int BOAT_LEFT_X=500;
private static final int BOAT_DIFER=300;
private float time=0;
private int count=0;
private int moveCount=10;
private int countMaxDefo=10;
private int moveSpeed=4;
private int moveSpeedDefo=4;
private int moveChangeSpeed;
private int moveNum=0; //移動回数
private boolean nowRight;
public BoatModel(int maxNum,ArrayList<CoreAnimation> animations,
int startTargetAnimIndex, float centerX, float centerY,
float width, float height) {
super(animations, startTargetAnimIndex, centerX, centerY, width, height);
this.maxMenberNum=maxNum;
this.rideMenbers=new ArrayList<CharaModel>();
this.nowRight=true;
this.moveChangeSpeed=moveCount;
moveNum=0; //移動回数
}
@Override
public BoatModel clone(){
BoatModel b=null;
b=(BoatModel)super.clone();
b.rideMenbers=new ArrayList<CharaModel>(this.rideMenbers);
return b;
}
/**
* 船にキャラクターを乗せる
* @param c
* @return
*/
public boolean addCharacter(CharaModel c){
if(maxMenberNum<=this.rideMenbers.size()){
return false;
}
this.rideMenbers.add(c);
return true;
}
public int getRideMenberNum(){
return this.rideMenbers.size();
}
public int getRideMenberNum(TARGET_TYPE type){
int num=0;
for(int i=0;i<rideMenbers.size();i++){
if(rideMenbers.get(i).getType()==type){
num++;
}
}
return num;
}
/**
* 船の移動速度変更
*/
public void changeAiMoveCharaSpeed(){
moveSpeed--;
if(moveSpeed<1) moveSpeed=4;
this.moveChangeSpeed=(int) (countMaxDefo*(moveSpeed/(float)moveSpeedDefo));
}
////////////////////////////////////////////////////
/**
* キャラクターが乗ったかどうかの判定
* @return
*/
public boolean isMountTarget(){
return false;
}
////////////////////////////////////////
/**
* 移動状態の初期化
*/
public void moveInit(){
time=0;
count=0;
if(moveCount!=moveChangeSpeed) moveCount=moveChangeSpeed;
}
/**
* 移動処理
* @param deltaTime
* @return
*/
public boolean move(float deltaTime){
boolean r;
if(!nowRight){
r=moveRight(deltaTime);
}else{
r=moveLeft(deltaTime);
}
return r;
}
private boolean moveRight(float deltaTime){
time+=deltaTime;
if(time>0.05){
time=0;
this.setCenterX((int) (BOAT_LEFT_X+BOAT_DIFER*((float)count/moveCount)));
//乗船している対象の移動
for(int i=0;i<this.getRideMenberNum();i++){
this.getRideMenber(i).move(BOAT_DIFER*(1f/moveCount), 0);
}
count++;
if(count>moveCount){
moveInit();
nowRight=true;
return true;
}
}
return false;
}
private boolean moveLeft(float deltaTime){
time+=deltaTime;
if(time>0.05){
time=0;
this.setCenterX((int) (BOAT_RIGHT_X-BOAT_DIFER*((float)count/moveCount)));
//乗船している対象の移動
for(int i=0;i<this.getRideMenberNum();i++){
this.getRideMenber(i).move(-BOAT_DIFER*(1f/moveCount), 0);
}
count++;
if(count>moveCount){
moveInit();
nowRight=false;
return true;
}
}
return false;
}
public ArrayList<CharaModel> getRideMenbers(){
return this.rideMenbers;
}
public CharaModel getRideMenber(int index){
return this.rideMenbers.get(index);
}
public void clearRideMenber(){
this.rideMenbers.clear();
}
public int getRideMaxMenberNum(){
return this.maxMenberNum;
}
public void difMoveNum(){
this.moveNum--;
}
public void addMoveNum(){
this.moveNum++;
}
public int getMoveNum(){
return this.moveNum;
}
@Override
public void endAnimationEvent(CoreAnimation endAnim) {
}
}