package fight3D;
import java.util.ArrayList;
import framework.animation.Animation3D;
import framework.animation.AnimationFactory;
import framework.audio.Sound3D;
import framework.gameMain.AbstractManager;
public class CharacterManager extends AbstractManager{
private static CharacterManager theInstance = null;
private static String filename = "data";
private static String characterFile = "character.def";
private static final String NAME_TAG = "Name";
private static final String MODEL_FILE_TAG = "ModelFile";
private static final String RIGHTMOVE_ANIMATION_FILE_TAG = "RightMoveAnimationFile";
private static final String LEFTMOVE_ANIMATION_FILE_TAG = "LeftMoveAnimationFile";
private static final String JUMP_ANIMATION_FILE_TAG = "JumpAnimationFile";
private static final String JUMP_SOUND_FILE_TAG = "JumpSoundFile";
private static final String JUMP_POWER_TAG = "JumpPower";
private static final String JUMP_FREQUENCY_TAG = "JumpFrequency";
private static final String DAMAGED_ANIMATION_FILE_TAG = "DamagedAnimationFile";
private static final String DAMAGED_SOUND_FILE_TAG = "DamagedSoundFile";
private static final String RUN_SPEED_TAG = "RunSpeed";
private static final String POWER_TAG = "Power";
private static final String DEFENSE_TAG = "Defense";
private static final String ATTACKING_PART_NAME_TAG = "AttackingPartName";
private static final String ATTACK_ANIMATION_FILE_TAG = "AttackAnimationFile";
private static final String ATTACK_SOUND_FILE_TAG = "AttackSoundFile";
private static final String ATTACK_TIME_LAG_TAG = "AttackTimeLag";
private static final String WEAPON_FILE_TAG = "WeaponFile";
private static final String WEAPON_ANIMATION_FILE_TAG = "WeaponAnimationFile";
private static final String WEAPON_SPEED_TAG = "WeaponSpeed";
private static final String UPPER_ATTACKING_PART_NAME_TAG = "UpperAttackingPartName";
private static final String UPPER_ATTACK_ANIMATION_FILE_TAG = "UpperAttackAnimationFile";
private static final String UPPER_ATTACK_SOUND_FILE_TAG = "UpperAttackSoundFile";
private static final String UPPER_ATTACK_TIME_LAG_TAG = "UpperAttackTimeLag";
private static final String UPPER_WEAPON_FILE_TAG = "UpperWeaponFile";
private static final String UPPER_WEAPON_ANIMATION_FILE_TAG = "UpperWeaponAnimationFile";
private static final String UPPER_WEAPON_SPEED_TAG = "UpperWeaponSpeed";
private static final String JUMP_ATTACKING_PART_NAME_TAG = "JumpAttackingPartName";
private static final String JUMP_ATTACK_ANIMATION_FILE_TAG = "JumpAttackAnimationFile";
private static final String JUMP_ATTACK_SOUND_FILE_TAG = "JumpAttackSoundFile";
private static final String JUMP_ATTACK_TIME_LAG_TAG = "JumpAttackTimeLag";
private static final String JUMP_WEAPON_FILE_TAG = "JumpWeaponFile";
private static final String JUMP_WEAPON_ANIMATION_FILE_TAG = "JumpWeaponAnimationFile";
private static final String JUMP_WEAPON_SPEED_TAG = "JumpWeaponSpeed";
private static final String SIZE_TAG = "Size";
private static final String COMMENT_TAG = "Comment";
private ArrayList<Character> characterList = new ArrayList<Character>();
private CharacterManager() {
addSeekFile(characterFile);
setTag(NAME_TAG);
setTag(MODEL_FILE_TAG);
setTag(RIGHTMOVE_ANIMATION_FILE_TAG);
setTag(LEFTMOVE_ANIMATION_FILE_TAG);
setTag(JUMP_ANIMATION_FILE_TAG);
setTag(JUMP_SOUND_FILE_TAG);
setTag(JUMP_POWER_TAG);
setTag(JUMP_FREQUENCY_TAG);
setTag(DAMAGED_ANIMATION_FILE_TAG);
setTag(DAMAGED_SOUND_FILE_TAG);
setTag(RUN_SPEED_TAG);
setTag(POWER_TAG);
setTag(DEFENSE_TAG);
setTag(ATTACKING_PART_NAME_TAG);
setTag(ATTACK_ANIMATION_FILE_TAG);
setTag(ATTACK_SOUND_FILE_TAG);
setTag(ATTACK_TIME_LAG_TAG);
setTag(WEAPON_FILE_TAG);
setTag(WEAPON_ANIMATION_FILE_TAG);
setTag(WEAPON_SPEED_TAG);
setTag(UPPER_ATTACKING_PART_NAME_TAG);
setTag(UPPER_ATTACK_ANIMATION_FILE_TAG);
setTag(UPPER_ATTACK_SOUND_FILE_TAG);
setTag(UPPER_ATTACK_TIME_LAG_TAG);
setTag(UPPER_WEAPON_FILE_TAG);
setTag(UPPER_WEAPON_ANIMATION_FILE_TAG);
setTag(UPPER_WEAPON_SPEED_TAG);
setTag(JUMP_ATTACKING_PART_NAME_TAG);
setTag(JUMP_ATTACK_ANIMATION_FILE_TAG);
setTag(JUMP_ATTACK_SOUND_FILE_TAG);
setTag(JUMP_ATTACK_TIME_LAG_TAG);
setTag(JUMP_WEAPON_FILE_TAG);
setTag(JUMP_WEAPON_ANIMATION_FILE_TAG);
setTag(JUMP_WEAPON_SPEED_TAG);
setTag(SIZE_TAG);
setTag(COMMENT_TAG);
seek(filename);
}
static public CharacterManager getInstance() {
if(theInstance == null) {
theInstance = new CharacterManager();
}
return theInstance;
}
/**
* キャラクターを返します。
* @param idキャラクターナンバー
* @return
*/
public Character getCharacter(int id) {
if(id < characterList.size()) {
return characterList.get(id);
}
else {
return null;
}
}
/**
* キャラクターの数を返します。
* @return
*/
public int getNumberOfCharacters() {
return characterList.size();
}
@Override
protected void create() {
// TODO Auto-generated method stub
Character p = new Character(getData(MODEL_FILE_TAG));
//WeaponModel w = new WeaponModel(getData(WEAPON_FILE_TAG));
//p.setWeponModel(w);
// キャラクタ名
p.setName(getData(NAME_TAG));
// キャラクタの説明
p.setComment(getData(COMMENT_TAG));
// アニメーションファイル
if(getData(RIGHTMOVE_ANIMATION_FILE_TAG) != null) {
Animation3D animation = AnimationFactory.loadAnimation(getData(RIGHTMOVE_ANIMATION_FILE_TAG));
if(animation != null) {
p.rightMoveAnimation = animation;
}
}
if(getData(LEFTMOVE_ANIMATION_FILE_TAG) != null) {
Animation3D animation = AnimationFactory.loadAnimation(getData(LEFTMOVE_ANIMATION_FILE_TAG));
if(animation != null) {
p.leftMoveAnimation = animation;
}
}
if(getData(JUMP_ANIMATION_FILE_TAG) != null) {
Animation3D animation = AnimationFactory.loadAnimation(getData(JUMP_ANIMATION_FILE_TAG));
if(animation != null) {
p.jumpAnimation = animation;
}
}
if(hasData(JUMP_SOUND_FILE_TAG)) {
Sound3D sound = new Sound3D(getData(JUMP_SOUND_FILE_TAG));
if(sound != null) {
p.jumpSound = sound;
}
}
if(getData(DAMAGED_ANIMATION_FILE_TAG) != null) {
Animation3D animation = AnimationFactory.loadAnimation(getData(DAMAGED_ANIMATION_FILE_TAG));
if(animation != null) {
p.damagedAnimation = animation;
}
}
if(hasData(DAMAGED_SOUND_FILE_TAG)) {
Sound3D sound = new Sound3D(getData(DAMAGED_SOUND_FILE_TAG));
if(sound != null) {
p.damagedSound = sound;
}
}
// パラメータ
if(!hasData(RUN_SPEED_TAG)) System.out.println("Error!! No RunSpeed data.");
else p.setRunSpeed(Double.parseDouble(getData(RUN_SPEED_TAG)));
if(!hasData(POWER_TAG)) System.out.println("Error!! No Power data.");
else p.setPower(Integer.parseInt(getData(POWER_TAG)));
if(!hasData(JUMP_POWER_TAG)) System.out.println("Error!! No JumpPower data.");
else p.setJumpPower(Double.parseDouble(getData(JUMP_POWER_TAG)));
if(!hasData(JUMP_FREQUENCY_TAG)) System.out.println("Error!! No JumpFrequency data.");
else p.setJumpFrequency(Integer.parseInt(getData(JUMP_FREQUENCY_TAG)));
if(!hasData(DEFENSE_TAG)) System.out.println("Error!! No Defense data.");
else p.setDefense(Integer.parseInt(getData(DEFENSE_TAG)));
if(!hasData(SIZE_TAG)) System.out.println("Error!! No Size data.");
else p.setSize(Integer.parseInt(getData(SIZE_TAG)));
// 通常の攻撃(牽制攻撃)
if(getData(ATTACK_ANIMATION_FILE_TAG) != null) {
Animation3D animation = AnimationFactory.loadAnimation(getData(ATTACK_ANIMATION_FILE_TAG));
if(animation != null) {
p.attackAnimation = animation;
}
}
if(hasData(ATTACK_SOUND_FILE_TAG)) {
Sound3D sound = new Sound3D(getData(ATTACK_SOUND_FILE_TAG));
if(sound != null) {
p.attackSound = sound;
}
}
if(hasData(ATTACKING_PART_NAME_TAG)) p.setAttackingPartName(getData(ATTACKING_PART_NAME_TAG));
if(hasData(ATTACK_TIME_LAG_TAG)) p.setAttackTimeLag(Long.parseLong(getData(ATTACK_TIME_LAG_TAG)));
if(hasData(WEAPON_FILE_TAG)) {
WeaponModel weapon = new WeaponModel(getData(WEAPON_FILE_TAG));
if(hasData(WEAPON_ANIMATION_FILE_TAG)) {
Animation3D animation = AnimationFactory.loadAnimation(getData(WEAPON_ANIMATION_FILE_TAG));
if(animation != null) {
weapon.weaponAnimation = animation;
}
}
p.setWeaponModel(weapon);
}
if(hasData(WEAPON_SPEED_TAG)) {
String vector = getData(WEAPON_SPEED_TAG);
String axis[] = vector.split(",");
p.setWeaponSpeed(Double.parseDouble(axis[0]),Double.parseDouble(axis[1]),Double.parseDouble(axis[2]));
}
//ATTACKING_PART_NAMEとWEAPON_FILEのデータが重複するとき、どちらもデータがないとき、エラー。
if((!hasData(ATTACKING_PART_NAME_TAG))&&(!hasData(WEAPON_FILE_TAG)))
System.out.println("Error!! No Weapon nor AttackingPart data.");
else if((hasData(ATTACKING_PART_NAME_TAG))&&(hasData(WEAPON_FILE_TAG)))
System.out.println("Error!! Weapon & AttackingPart are overlapping.");
// 上向きの攻撃(対空攻撃)
if(getData(UPPER_ATTACK_ANIMATION_FILE_TAG) != null) {
Animation3D animation = AnimationFactory.loadAnimation(getData(UPPER_ATTACK_ANIMATION_FILE_TAG));
if(animation != null) {
p.upperAttackAnimation = animation;
}
}
if(hasData(UPPER_ATTACK_SOUND_FILE_TAG)) {
Sound3D sound = new Sound3D(getData(UPPER_ATTACK_SOUND_FILE_TAG));
if(sound != null) {
p.upperAttackSound = sound;
}
}
if(hasData(UPPER_ATTACKING_PART_NAME_TAG)) p.setUpperAttackingPartName(getData(UPPER_ATTACKING_PART_NAME_TAG));
if(hasData(UPPER_ATTACK_TIME_LAG_TAG)) p.setUpperAttackTimeLag(Long.parseLong(getData(UPPER_ATTACK_TIME_LAG_TAG)));
if(hasData(UPPER_WEAPON_FILE_TAG)) {
WeaponModel upperWeapon = new WeaponModel(getData(UPPER_WEAPON_FILE_TAG));
if(hasData(UPPER_WEAPON_ANIMATION_FILE_TAG)) {
Animation3D animation = AnimationFactory.loadAnimation(getData(UPPER_WEAPON_ANIMATION_FILE_TAG));
if(animation != null) {
upperWeapon.weaponAnimation = animation;
}
}
p.setUpperWeaponModel(upperWeapon);
}
if(hasData(UPPER_WEAPON_SPEED_TAG)) {
String vector = getData(UPPER_WEAPON_SPEED_TAG);
String axis[] = vector.split(",");
p.setUpperWeaponSpeed(Double.parseDouble(axis[0]),Double.parseDouble(axis[1]),Double.parseDouble(axis[2]));
}
//UPPER_ATTACKING_PART_NAMEとUPPER_WEAPON_FILEのデータが重複するとき、エラー。
if((hasData(UPPER_ATTACKING_PART_NAME_TAG))&&(hasData(UPPER_WEAPON_FILE_TAG)))
System.out.println("Error!! Weapon & AttackingPart are overlapping.");
// 下向きの攻撃(ジャンプ攻撃)
if(getData(JUMP_ATTACK_ANIMATION_FILE_TAG) != null) {
Animation3D animation = AnimationFactory.loadAnimation(getData(JUMP_ATTACK_ANIMATION_FILE_TAG));
if(animation != null) {
p.jumpAttackAnimation = animation;
}
}
if(hasData(JUMP_ATTACK_SOUND_FILE_TAG)) {
Sound3D sound = new Sound3D(getData(JUMP_ATTACK_SOUND_FILE_TAG));
if(sound != null) {
p.jumpAttackSound = sound;
}
}
if(hasData(JUMP_ATTACKING_PART_NAME_TAG)) p.setJumpAttackingPartName(getData(JUMP_ATTACKING_PART_NAME_TAG));
if(hasData(JUMP_ATTACK_TIME_LAG_TAG)) p.setJumpAttackTimeLag(Long.parseLong(getData(JUMP_ATTACK_TIME_LAG_TAG)));
if(hasData(JUMP_WEAPON_FILE_TAG)) {
WeaponModel jumpWeapon = new WeaponModel(getData(JUMP_WEAPON_FILE_TAG));
if(hasData(JUMP_WEAPON_ANIMATION_FILE_TAG)) {
Animation3D animation = AnimationFactory.loadAnimation(getData(JUMP_WEAPON_ANIMATION_FILE_TAG));
if(animation != null) {
jumpWeapon.weaponAnimation = animation;
}
}
p.setJumpWeaponModel(jumpWeapon);
}
if(hasData(JUMP_WEAPON_SPEED_TAG)) {
String vector = getData(JUMP_WEAPON_SPEED_TAG);
String axis[] = vector.split(",");
p.setJumpWeaponSpeed(Double.parseDouble(axis[0]),Double.parseDouble(axis[1]),Double.parseDouble(axis[2]));
}
//JUMP_ATTACKING_PART_NAMEとJUMP_WEAPON_FILEのデータが重複するとき、エラー。
if((hasData(JUMP_ATTACKING_PART_NAME_TAG))&&(hasData(JUMP_WEAPON_FILE_TAG)))
System.out.println("Error!! Weapon & AttackingPart are overlapping.");
characterList.add(p);
}
}