示例#1
0
 public void SetTarget(FightElement target)
 {
     //TODO
     pathNode[0] = breedPos;
     pathNode[1] = shipHead;
     pathNode[2] = attackPosition;
 }
 public void SetTarget(FightElement target, float lifeTime)
 {
     lockTarget    = target;
     this.lifeTime = lifeTime;
     gameObject.SetActive(true);
     StartCoroutine(LockTarget());
 }
示例#3
0
    public bool SetTarget(FightElement target) //设定移动目标
    {
        switch (team)                          //判断自己所在阵营
        {
        case Team.Self:
        case Team.Alliance:
            if (target.team == Team.Enemy)
            {
                hitTarget = target;
                moveState = ShipMoveState.MoveToTarget;
                return(true);
            }
            break;

        case Team.Enemy:
            if (target.team != team)
            {
                hitTarget = target;
                moveState = ShipMoveState.MoveToTarget;
                return(true);
            }
            break;
        }
        return(false);
    }
示例#4
0
    //发射炮弹入口(内部处理旋转,角度问题)
    public void OnFire(Transform belongTo, FightElement target)
    {
        this.belongTo = belongTo;
        if (!CanFire(target))   //首先判断是否可攻击
        {
            return;
        }
        Ship hitTarget;

        if ((hitTarget = target.GetComponent <Ship>()) && hitTarget.isMoving)    //判断目标是否正在移动
        {
            #region 来吧!计算一个提前量!!!!!!
            Vector3 hitPos    = GetPointInBounds(hitTarget);
            float   t         = Vector3.Distance(hitPos, transform.position) / bulletPrefs.data.moveSpeed;
            Vector3 targetPos = hitTarget.shipData.moveSpeed * target.transform.forward * (t + fireInterval * .25f) + hitPos;//最终目标中心点
            StartCoroutine(RotateTo(targetPos));
            #endregion
        }
        else
        {
            if (target.GetComponent <FightElement>())
            {
                StartCoroutine(RotateTo(GetPointInBounds(target.GetComponent <FightElement>())));
            }
            else
            {
                StartCoroutine(RotateTo(target.transform.position));
            }
        }
    }
 public void SetTarget(FightElement self, FightElement target, float lifeTime)
 {
     this.skillReleaser = self;
     lockTarget         = target;
     this.lifeTime      = lifeTime;
     gameObject.SetActive(true);
     StartCoroutine(LockTarget());
 }
    /// <summary>
    /// 获取他妈的碰撞盒之内的一个他妈的随机点,擦!
    /// </summary>
    /// <param name="target">拥有他妈的碰撞盒的他妈的战斗元素</param>
    /// <returns></returns>
    public Vector3 GetPointInBounds(FightElement target)
    {
        Vector3 externts = target.externts;

        return(target.transform.localToWorldMatrix.MultiplyPoint3x4(new Vector3(Random.Range(-externts.x, externts.x), externts.y, Random.Range(-externts.z, externts.z))));

        return(target.transform.rotation * (new Vector3(Random.Range(-externts.x, externts.x), Random.Range(-externts.y, externts.y), Random.Range(-externts.z, externts.z)) + target.transform.worldToLocalMatrix.MultiplyPoint3x4(target.collider.bounds.center + target.transform.position)));
    }
示例#7
0
 public void SetTarget(FightElement belongTo, FightElement target)
 {
     hitTarget     = target;
     this.belongTo = belongTo;
     path.Insert(0, belongTo.transform.position);
     path.Insert(1, belongTo.transform.position + belongTo.transform.forward * 100);
     path.Insert(2, target.transform.position);
 }
示例#8
0
    /// <summary>
    /// 判断攻击目标是否在可攻击视角内
    /// </summary>
    /// <param name="target">攻击目标</param>
    /// <returns></returns>
    public bool CanFire(FightElement target)
    {
        switch (cannonType)
        {
        case CannonType.主炮:                                                                                                //主炮
            if (!(target.fightElementType == FightElementType.Ship || target.fightElementType == FightElementType.Island)) //攻击目标不为战舰或者岛,不可攻击
            {
                return(false);
            }
            break;

        case CannonType.组合炮:    //组合炮 //攻击目标为全部,无需判断目标,直接进行下面的角度判断.
            break;

        case CannonType.高射炮:                                          //高射炮
            if (target.fightElementType != FightElementType.AirCraft) //攻击目标不为飞机,不可攻击
            {
                return(false);
            }
            break;

        case CannonType.副炮:                                         //副炮
            if (target.fightElementType != FightElementType.Island) //攻击目标不为岛,不可攻击
            {
                return(false);
            }
            break;
        }
        Vector3 targetDir = belongTo.worldToLocalMatrix.MultiplyVector(target.transform.position - transform.position);

        targetDir.y = 0;
        if (isObtuseAngle)                                                                                      //如果视角 ≥ 180°
        {
            if (Vector3.Cross(righSightAxis, targetDir).y > 0 && Vector3.Cross(targetDir, leftSightAxis).y > 0) //判断在右轴与左轴之间.
            {
                return(false);
            }
            else
            {
                return(true);
            }
        }
        else                                                                                                    //如果视角 < 180°
        {
            if (Vector3.Cross(leftSightAxis, targetDir).y > 0 && Vector3.Cross(targetDir, righSightAxis).y > 0) //判断在左轴与右轴之间.
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
    }
示例#9
0
 public Vector3 shipHead;   // 甲板尽头
 public void OnFire(Transform belongTo, FightElement target)
 {
     //TODO
     //投弹
 }
示例#10
0
 public bool CanFire(FightElement target)
 {
     return(true);
     //TODO
 }
 void OnEnable()
 {
     fightElement = target as FightElement;
 }
 public void OnFire(FightElement target)
 {
     //TODO
 }
示例#13
0
    /// <summary>
    /// 获取他妈的碰撞盒之内的一个他妈的随机点,擦!
    /// </summary>
    /// <param name="target">拥有他妈的碰撞盒的他妈的战斗元素</param>
    /// <returns></returns>
    public Vector3 GetPointInBounds(FightElement target)
    {
        Vector3 externts = target.externts;

        return(target.transform.localToWorldMatrix.MultiplyPoint3x4(new Vector3(Random.Range(-externts.x, externts.x), externts.y, Random.Range(-externts.z, externts.z))));
    }