根据不同类型的攻击计算伤害
public int CalculateDamage(int type ,float ratio)
{
int damage=0;
if (type == 1)
damage = (int)(150 * ratio);
else if (type == 2)//表示大锤
damage = (int)(100 * ratio);
else if (type / 100 == 3) //子弹发射的攻击力要根据不同子弹类型进行区分
{
if (type == 301)
damage = (int)(200 * ratio);
else if (type == 302)
damage = (int)(100 * ratio);
else if (type == 303)
damage = (int)(100 * ratio);
}
else if (type == 4) { }
// KPlayer.I.HitLife((int)(500 * ratio));
else if (type == 5) //表示匕首攻击力
{
damage = (int)(50 * ratio);
}
return damage;//
}
public void FixedUpdate()
{
// Debug.Log("skillManager FixedUpdate() 本机id ------:" + KPlayer.I.playerInfo.id );
if (Time.time > nextAutoSortTime) {
// Debug.Log ("进行排名");
KPlayerManager.I. PlayerSort();//玩家排序
nextAutoSortTime = Time.time + 2f;
}
// Debug.Log ("-----------------------head:" + KPlayer.I.headDis);
// 让所有的人物进行转头
/*
要执行所有人的扭头变化,自己和除自己
*/
if (KSkillManager.I.forwordAttack == true)
return;
foreach (KPlayer player in KPlayerManager.I.allPlayers) {
if (!player)
Debug.Log ("为空啊");
LookAtTarget(player.targetPlayerID,player.playerInfo.id );//目标人物和本人id
}
/*
跟随变化的所有可能性:
1.现在无跟随对象的情况下:
1.原来没有跟随对象,直接return
2.原来有跟随对象,发送重置身体的请求
2.现在找到跟随对象:
1.原来无跟随对象,发送跟随请求
2.原来有跟随对象
1.原来的跟随对象与现在的一致 ,不发请求
2.不一致,发送跟随请求
*/
if (KPlayerManager.I.GetNearestEnemy(KPlayer.I.playerInfo.id)==0)//无跟随对象
if(!LookAtPlayer ){ return ;} //没有找到敌人要返回 //此处需要赋值-11么???
else //说明原来有跟随,现在没有
{KSocketManager.I.sendLookAt (-11, 2);
LookAtPlayer=null; ///////////////////////////////////////////////////////////////////////////////////////////////////////**************************************************
return;}//-111表示没有跟随对象//发送不转头的消息
//以下为找到跟随对象
KPlayer temp=KPlayerManager.I.FindPlayer (KPlayerManager.I.GetNearestEnemy (KPlayer.I.playerInfo.id));
/*
if (temp == null) {
Debug.Log ("现在没有找到最近敌人");
} else
Debug.Log ("找到最近敌人: id:"+temp.playerInfo.id);
*/
float angle =checkTargetDirForMe(temp.trans,KPlayer.I.trans);//求角度
bool morethan90=false;
float angleHead = 0;
if (KPlayer.I.isRifle ||KPlayer.I.isMace) //枪状态或者大锤状态,
{
//如果在枪的状态下 ,角度减少90度,就可以。 并且要添加一个标识,是左边攻击,还是右边攻击
if (angle > 90) {//这个判断必须添加,但是来复枪的攻击方式可以在攻击的时候传递就可以,根本不用在这里添加区别
angle -= 90;
KPlayer.I.RifleAttackType = 3;
} else if (angle < -90) {
KPlayer.I.RifleAttackType = 2;
angle += 90;
}
else
KPlayer.I.RifleAttackType = 1;
}
else//
{
if (angle > 90) {
morethan90 = true;
//angle -= 90;
angleHead = angle - 90;
angle = 90;
} else if (angle < -90) {
morethan90 = true;
angleHead = angle+90; //
angle=-90;
} else
angleHead = 0.5f;
}
angle = 0.5f + angle / 90f * 0.5f;//
angleHead=0.5f + angleHead / 90f * 0.5f;//
float dis = Vector3.Distance (KPlayer.I.trans.position, temp.trans.position);//求距离
if (!LookAtPlayer || LookAtPlayer != temp) {//原来无跟随请求2.1 ,或者 原来有跟随请求但跟随对象不一致 2.2.2
// Debug.Log ("不一致!!!!");
LookAtPlayer = temp;
if (dis <KPlayer.I.waistDis){//扭腰
//Debug.Log ("发送扭腰对象");
KSocketManager.I.sendLookAt (LookAtPlayer.playerInfo.id, 2);
//if (morethan90) {
KPlayer.I.playerModel.setHeadRoat (angleHead);
//}
KPlayer.I.playerModel.setWaistRoat (angle);
Debug.Log ("anglehead angle:"+angleHead +" "+angle);
} else if (dis < KPlayer.I. headDis) {//扭头
KSocketManager.I.sendLookAt (LookAtPlayer.playerInfo.id ,1);
//Debug.Log ("发送牛头对象");
KPlayer.I.playerModel.setHeadRoat (angle);
KPlayer.I.playerModel.setWaistRoat (0.5f);
} else {//改为朝前
//没有朝前的目标
//Debug.Log
KSocketManager.I.sendLookAt (LookAtPlayer.playerInfo.id ,1); //这句话之后要修改掉
KPlayer.I.playerModel.setHeadRoat (0.5f);
KPlayer.I.playerModel.setWaistRoat (0.5f);
}
} else {//现在有跟随对象,但是原来也有跟随对象,只是跟随对象一致,不需要发送请求。 2.2.1 //可以用方法分离出来。
// Debug.Log("一致");
if (dis <KPlayer.I. waistDis) {//扭腰
// Debug.Log("扭腰: angle : "+angle);
KPlayer.I.playerModel.setHeadRoat (angleHead);
KPlayer.I.playerModel.setWaistRoat (angle);
}
else if (dis < KPlayer.I. headDis) {//扭头
KPlayer.I.playerModel.setHeadRoat (angle);
KPlayer.I.playerModel.setWaistRoat (0.5f);
} else {//改为朝前
//没有朝前的目标
KPlayer.I.playerModel.setHeadRoat (0.5f);
KPlayer.I.playerModel.setWaistRoat (0.5f);
}
}
}
public void LookAtTarget(int targetPlayerID,int OwnerPlayerID )
{
// Debug.Log ("targetid + ownerid"+ targetPlayerID+" "+OwnerPlayerID);
KPlayer targetPlayer = KPlayerManager.I.FindPlayer (targetPlayerID);
KPlayer OwnerPlayer = KPlayerManager.I.FindPlayer (OwnerPlayerID);
if (targetPlayerID == -11) {
OwnerPlayer.playerModel.setHeadRoat(0.5f);
OwnerPlayer.playerModel.setWaistRoat(0.5f);
return;
}
OwnerPlayer.targetPlayerID = targetPlayerID;
float angle =checkTargetDirForMe( targetPlayer.trans, OwnerPlayer.trans);//目标角色以及本机角色
bool morethan90=false;
float angleHead = 0;
if (OwnerPlayer.isRifle||OwnerPlayer.isMace) {
//如果在枪的状态下 ,角度减少90度,就可以。 并且要添加一个标识,是左边攻击,还是右边攻击
if (angle > 90) {//这个判断必须添加,但是来复枪的攻击方式可以在攻击的时候传递就可以,根本不用在这里添加区别
angle -= 90;
OwnerPlayer.RifleAttackType = 3;
} else if (angle < -90) {
OwnerPlayer.RifleAttackType = 2;
angle += 90;
} else
OwnerPlayer.RifleAttackType = 1;
}
else {
if (angle > 90) {
morethan90 = true;
//angle -= 90;
angleHead = angle - 90;
angle = 90;
} else if (angle < -90) {
morethan90 = true;
angleHead = angle+90; //
angle=-90;
} else
angleHead = 0;
}
angle = 0.5f + angle / 90f * 0.5f;//
angleHead=0.5f + angleHead / 90f * 0.5f;//
float dis =Vector3.Distance(OwnerPlayer.trans.position, targetPlayer.trans.position);
if (dis <OwnerPlayer. waistDis) {//扭腰
OwnerPlayer.playerModel.setHeadRoat(angleHead);
OwnerPlayer.playerModel.setWaistRoat(angle);
}
else if (dis < OwnerPlayer.headDis) {//扭头
OwnerPlayer.playerModel.setHeadRoat(angle);
OwnerPlayer.playerModel.setWaistRoat(0.5f);
}
else {//改为朝前
//没有朝前的目标
OwnerPlayer.playerModel.setHeadRoat(0.5f);
OwnerPlayer.playerModel.setWaistRoat(0.5f);
}
}