脚本未命名

根据不同类型的攻击计算伤害   
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);
				}
		}


猜你喜欢

转载自blog.csdn.net/qq_22012149/article/details/54645025