package fight3D;
import framework.animation.Animation3D;
import framework.audio.Sound3D;
import framework.gameMain.Mode;
import framework.gameMain.ModeOnGround;
import framework.gameMain.ActorModel;
import framework.physics.Velocity3D;
public class Character extends ActorModel {
private String name, comment;
private String attackingPartName = null;
private String upperAttackingPartName = null;
private String jumpAttackingPartName = null;
private long attackTimeLag = 0;
private long upperAttackTimeLag = 0;
private long jumpAttackTimeLag = 0;
private WeaponModel weaponModel, upperWeaponModel, jumpWeaponModel;
private Velocity3D weaponSpeed = new Velocity3D(4.0, 0.0, 0.0);
private Velocity3D upperWeaponSpeed = new Velocity3D(4.0, 0.0, 0.0);
private Velocity3D jumpWeaponSpeed = new Velocity3D(4.0, 0.0, 0.0);
private double runSpeed = 5.0, jumpPower = 10.0;
private int p, jf, d, s;
private static Animation3D defaultAnimation = new Animation3D();
public Animation3D rightMoveAnimation = defaultAnimation;
public Animation3D leftMoveAnimation = defaultAnimation;
public Animation3D jumpAnimation = defaultAnimation;
public Animation3D damagedAnimation = defaultAnimation;
public Animation3D attackAnimation = defaultAnimation;
public Animation3D upperAttackAnimation = defaultAnimation;
public Animation3D jumpAttackAnimation = defaultAnimation;
public Sound3D jumpSound = null;
public Sound3D attackSound = null;
public Sound3D upperAttackSound = null;
public Sound3D jumpAttackSound = null;
public Sound3D damagedSound = null;
public Character(String fileName) {
super(fileName);
}
/**
* アニメーションを返す
* @param m プレイヤーのモード
* @param s プレイヤーの状態
* @return アニメーション
*/
public Animation3D getAnimation(Mode m, State s) {
if(m instanceof ModeOnGround) {
//左右に動くアニメーションは地上にいるときのみ
if(s instanceof StateLeftMove) {
return new Animation3D(leftMoveAnimation);
}
else if(s instanceof StateRightMove) {
return new Animation3D(rightMoveAnimation);
}
}
if(s instanceof StateJump) {
return new Animation3D(jumpAnimation);
}
else if(s instanceof StateAttack){
return new Animation3D(attackAnimation);
}
else if(s instanceof StateUpperAttack){
return new Animation3D(upperAttackAnimation);
}
else if(s instanceof StateJumpAttack){
return new Animation3D(jumpAttackAnimation);
}
else if(s instanceof StateDamaged){
return new Animation3D(damagedAnimation);
}
return new Animation3D(defaultAnimation);
}
/**
* 効果音を返す
* @param m プレイヤーのモード
* @param s プレイヤーの状態
* @return 効果音
*/
public Sound3D getSoundEffect(Mode m, State s) {
if(s instanceof StateJump) {
return jumpSound;
}
else if(s instanceof StateAttack){
return attackSound;
}
else if(s instanceof StateUpperAttack){
return upperAttackSound;
}
else if(s instanceof StateJumpAttack){
return jumpAttackSound;
}
else if(s instanceof StateDamaged){
return damagedSound;
}
return null;
}
// public Attackable getAttackable(Player p){
// Attackable a = new AttackingPart(attackingPartName , p);
// return a;
// }
public void setName(String n) {
name = n;
}
public String getName() {
return name;
}
public void setComment(String comment) {
this.comment = comment;
}
public String getComment() {
return comment;
}
// 攻撃する部分の名前(通常攻撃、上向きの攻撃、下向きの攻撃)
public void setAttackingPartName(String apn) {
attackingPartName = apn;
}
public String getAttackingPartName() {
return attackingPartName;
}
public void setUpperAttackingPartName(String s) {
upperAttackingPartName = s;
}
public String getUpperAttackingPartName() {
return upperAttackingPartName;
}
public void setJumpAttackingPartName(String s) {
jumpAttackingPartName = s;
}
public String getJumpAttackingPartName() {
return jumpAttackingPartName;
}
// 武器モデル(通常攻撃、上向きの攻撃、下向きの攻撃)
public void setWeaponModel(WeaponModel w) {
weaponModel = w;
}
public WeaponModel getWeaponModel() {
return weaponModel;
}
public void setUpperWeaponModel(WeaponModel w) {
upperWeaponModel = w;
}
public WeaponModel getUpperWeaponModel() {
return upperWeaponModel;
}
public void setJumpWeaponModel(WeaponModel w) {
jumpWeaponModel = w;
}
public WeaponModel getJumpWeaponModel() {
return jumpWeaponModel;
}
//飛び道具の速さ(通常攻撃、上向きの攻撃、下向きの攻撃)
public void setWeaponSpeed(double x, double y, double z) {
this.weaponSpeed = new Velocity3D(x, y, z);
}
public Velocity3D getWeaponSpeed() {
return weaponSpeed;
}
public void setUpperWeaponSpeed(double x, double y, double z) {
upperWeaponSpeed = new Velocity3D(x, y, z);
}
public Velocity3D getUpperWeaponSpeed() {
return upperWeaponSpeed;
}
public void setJumpWeaponSpeed(double x, double y, double z) {
jumpWeaponSpeed = new Velocity3D(x, y, z);
}
public Velocity3D getJumpWeaponSpeed() {
return jumpWeaponSpeed;
}
//移動の速さ
public void setRunSpeed(double rs) {
this.runSpeed = rs;
}
public double getRunSpeed() {
return runSpeed;
}
//攻撃力
public void setPower(int p) {
this.p = p;
}
public int getPower() {
return p;
}
//ジャンプ力
public void setJumpPower(double e) {
this.jumpPower = e;
}
public double getJumpPower() {
return jumpPower;
}
//ジャンプ回数
public void setJumpFrequency(int jf) {
this.jf = jf;
}
public int getJumpFrequency() {
return jf;
}
//防御力
public void setDefense(int d) {
this.d = d;
}
public int getDefense() {
return d;
}
public void setSize(int s) {
this.s = s;
}
public int getSize() {
return s;
}
//WeaponとAttackingPartとどちらを持っているかを聞くメソッド
public boolean hasAttackingPart(){
if(getAttackingPartName() != null)
return true;
else return false;
}
public boolean hasUpperAttackingPart(){
if(getUpperAttackingPartName() != null)
return true;
else return false;
}
public boolean hasJumpAttackingPart(){
if(getJumpAttackingPartName() != null)
return true;
else return false;
}
public void setAttackTimeLag(long attackTimeLag) {
this.attackTimeLag = attackTimeLag;
}
public long getAttackTimeLag() {
return attackTimeLag;
}
public void setUpperAttackTimeLag(long upperAttackTimeLag) {
this.upperAttackTimeLag = upperAttackTimeLag;
}
public long getUpperAttackTimeLag() {
return upperAttackTimeLag;
}
public void setJumpAttackTimeLag(long jumpAttackTimeLag) {
this.jumpAttackTimeLag = jumpAttackTimeLag;
}
public long getJumpAttackTimeLag() {
return jumpAttackTimeLag;
}
}