Пример #1
0
    public void OnSerializeNetworkView2D(BitStream stream, NetworkMessageInfo info,
        UnitActionCommand pUnitActionCommand, bool pIsAlive)
    {
        Transform lTransform = characterController.transform;
        Vector3 lData = Vector3.zero;
        //---------------------------------------------------
        if (stream.isWriting)
        {
            lData = lTransform.position;
            lData.z = yVelocity;
        }
        //---------------------------------------------------
        stream.Serialize(ref lData);
        //---------------------------------------------------
        if (stream.isReading)
        {
            yVelocity = lData.z;
            lData.z = 0f;
            lTransform.position = lData;

            var lDeltaTime = (float)(Network.time - info.timestamp);
            if (lDeltaTime > 0.02f)
                update2D(pUnitActionCommand, UnitFace.getValue(pUnitActionCommand.face),
                    pIsAlive, lDeltaTime * Time.timeScale);
            lastUpdateTime = Time.time;

        }
    }
Пример #2
0
    public UnitActionCommand GetActionCommandFromInput()
    {
        UnitActionCommand lActionCommand = new UnitActionCommand();
        //lActionCommand.MoveLeft=Input.GetButton ("left");
        if (Input.GetButton("left"))
        {
            lActionCommand.FaceLeft = true;
            lActionCommand.GoForward = true;
        }
        //lActionCommand.MoveRight=Input.GetButton ("right");
        if (Input.GetButton("right"))
        {
            lActionCommand.FaceRight = true;
            lActionCommand.GoForward = true;
        }
        lActionCommand.FaceDown = Input.GetButton("down");
        lActionCommand.FaceUp = Input.GetButton("up");

        lActionCommand.Fire = Input.GetButton("fire");
        //lActionCommand.Jump=Input.GetButtonDown("jump");
        lActionCommand.Jump = Input.GetButton("jump");
        lActionCommand.Action1 = Input.GetButton("action1");
        lActionCommand.Action2 = Input.GetButton("action2");
        return lActionCommand;
    }
Пример #3
0
    public void update2D(UnitActionCommand pUnitActionCommand, int pFaceValue, bool isAlive, float pDeltaTime)
    {
        if (!isAlive | !pUnitActionCommand.GoForward)
            pFaceValue = 0;

        var lLastYVelocity = yVelocity;

        if (isAlive && characterController.isGrounded)
        {
            if (!pUnitActionCommand.FaceDown)
            {
                if (pUnitActionCommand.Jump)
                    yVelocity = jumpSpeed;
                else
                    yVelocity = yNullVelocity;	//以免飞起来
            }
        }
        else
            yVelocity = Mathf.Max(yVelocity - gravity * pDeltaTime, minYVelocity);
        if (yVelocity > 0
            && (characterController.collisionFlags & CollisionFlags.Above) > 0)
            yVelocity = 0;

        // Move the controller
        Vector3 lMove = new Vector3(pFaceValue * runSpeed * pDeltaTime,
            (yVelocity + lLastYVelocity) / 2f * pDeltaTime, 0);

        characterController.Move(lMove);
    }
Пример #4
0
 void moveToAim(UnitActionCommand pCommand,Vector3 pAim)
 {
     var lPosition = transform.position;
     if (lPosition.x < pAim.x)
     {
         pCommand.FaceLeft = false;
         pCommand.FaceRight = true;
     }
     else
     {
         pCommand.FaceLeft = true;
         pCommand.FaceRight = false;
     }
 }
    public UnitActionCommand GetActionCommandFromInput()
    {
        UnitActionCommand lActionCommand = new UnitActionCommand();
        if (Input.GetKey(left))
        {
            lActionCommand.FaceLeft = true;
            lActionCommand.GoForward = true;
        }
        if (Input.GetKey(right))
        {
            lActionCommand.FaceRight = true;
            lActionCommand.GoForward = true;
        }
        lActionCommand.FaceDown = Input.GetKey(down);
        lActionCommand.FaceUp = Input.GetKey(up);

        lActionCommand.Fire = Input.GetKey(fire);
        lActionCommand.Jump = Input.GetKey(jump);
        lActionCommand.Action1 = Input.GetKey(action1);
        lActionCommand.Action2 = Input.GetKey(action2);
        return lActionCommand;
    }
Пример #6
0
 public override void setCommand(UnitActionCommand pUnitActionCommand)
 {
     command = pUnitActionCommand;
 }
 public override void processCommand(UnitActionCommand pUnitActionCommand)
 {
     //pUnitActionCommand.face = actionFace;
     pUnitActionCommand.GoForward = !characterController.isGrounded;
     if(actionJump)
     {
         pUnitActionCommand.Jump = actionJump;
         actionJump = false;
     }
 }
Пример #8
0
 void OnCommand(UnitActionCommand pCommand)
 {
     if (character2D.characterController.isGrounded
         && pCommand.Jump
         && !pCommand.FaceDown
         && !_actionEnergyValue.tryUse(jumpCost))
     {
         pCommand.Jump = false;
     }
     processAction(pCommand);
 }
 public override void setCommand(UnitActionCommand pUnitActionCommand)
 {
     /*
         if(gameObject.name!="pismireHero1(Clone)")
         {
             print(gameObject.name);
             print("setCommand");
             print(pUnitActionCommand);
         }
     */
     commandChangedReceiver(pUnitActionCommand);
     pUnitActionCommand.calculateFace(unitActionCommand.face);
     unitActionCommand.command = pUnitActionCommand.command;
 }
    public UnitActionCommand(UnitActionCommand pOther)
    {
        //FaceLeft = pOther.FaceLeft;//������
        //FaceRight = pOther.FaceRight;//������
        //FaceUp = pOther.FaceUp;
        //FaceDown = pOther.FaceDown;
        //GoForward = pOther.GoForward;//ǰ��
        //Fire = pOther.Fire;//����
        //Jump = pOther.Jump;//��Ծ

        command = pOther.command;
    }
 public abstract void setCommand(UnitActionCommand pUnitActionCommand);
 static void nullCommandChangedReciver(UnitActionCommand p)
 {
 }
Пример #13
0
 //public int getFaceValue(UnitActionCommand pActionCommand)
 //{
 //    if (pActionCommand.FaceLeft)
 //    {
 //        return -1;
 //    }
 //    else if (pActionCommand.FaceRight)
 //    {
 //        return 1;
 //    }
 //    return 0;
 //}
 public void setFaceCommand(UnitActionCommand pActionCommand, int face)
 {
     if (face < 0)
     {
         pActionCommand.FaceLeft = true;
     }
     else if (face > 0)
     {
         pActionCommand.FaceRight = true;
     }
 }
Пример #14
0
    /// <summary>
    /// 
    /// </summary>
    /// <param name="pAimPos">路途点</param>
    /// <param name="pFinalPos">最终点</param>
    /// <returns></returns>
    public UnitActionCommand moveToAim(Vector3 pAimPos,Transform pFinalAim)
    {
        UnitActionCommand lActionCommand = new UnitActionCommand();
        Vector3 lPosition = transform.position;
        int lFaceValue;

        bool lTooCloseToFinalPos = isOverGun(pFinalAim);
        //if (Mathf.Abs(lPosition.y - pFinalPos.y) < 0.5f
        //    && Mathf.Abs(pFinalPos.x - lPosition.x) < tooCloseDistance)
        //    lTooCloseToFinalPos = true;
        //else
        //    lTooCloseToFinalPos = false;
        //离目标太近时,不改变方向
        if (lTooCloseToFinalPos)
            lFaceValue = actionCommandControl.getFaceValue();
        else//否则继续接近下一个目标(寻路)点
            lFaceValue = Mathf.RoundToInt(pAimPos.x - lPosition.x);

        lActionCommand.GoForward = true;

        if (character.isGrounded)
        {
            //目标x值 在一定范围内时,可跳跃
            if (Mathf.Abs(pAimPos.x - lPosition.x) < 1.0f)
            {
                if (pAimPos.y > lPosition.y + 0.8f)
                {
                    lActionCommand.Jump = true;
                    //Debug.Log("jump1");
                }
                else if (pAimPos.y < lPosition.y - 0.5f)
                {
                    lActionCommand.Jump = true;
                    lActionCommand.FaceDown = true;
                }

            }
        }

        //目标x值 在一定范围内时,停止前进
        if (
            Mathf.Abs(pAimPos.x - lPosition.x) < 0.3f
            && !lTooCloseToFinalPos //不能离最终位置太近
            )
            lActionCommand.GoForward = false;
        else if (
            character.isGrounded
            && !lActionCommand.Jump

            &&
                (
                    haveBarrier//前方是否有障碍
                    || (//判断前进的方向上是否有可站立的地方,没有 就跳跃
                        pAimPos.y >= lPosition.y
                        && forwardBoardDetector.detect(1, layers.standPlaceValue).Length == 0
                    )
                )
            )
        {
            lActionCommand.Jump = true;
            //Debug.Log("jump2");
        }

        setFaceCommand(lActionCommand, lFaceValue);
        return lActionCommand;
    }
Пример #15
0
 void processAction(UnitActionCommand lActionCommand)
 {
     //if (nowAction && !nowAction.inActing)
     //{
     //    nowAction = null;
     //}
     //if (nowAction)
     //{
     //    nowAction.processCommand(lActionCommand);
     //}
     //else
     if (!nowAction)
     {
         if (lActionCommand.Fire && _actionEnergyValue.tryUse(fireCost))
         {
             nowAction = fireAction;
         }
         else if (lActionCommand.Action1 && _actionEnergyValue.tryUse(action1Cost))
         {
             nowAction = action1;
         }
         else if (lActionCommand.Action2 && _actionEnergyValue.tryUse(action2Cost))
         {
             nowAction = action2;
         }
     }
     lActionCommand.Action1 = action1.inActing;
     lActionCommand.Action2 = action2.inActing;
     lActionCommand.Fire = fireAction.inActing;
 }
Пример #16
0
 public void update2D(UnitActionCommand pUnitActionCommand, int pFaceValue, bool isAlive)
 {
     update2D(pUnitActionCommand, pFaceValue, isAlive, Time.time - lastUpdateTime);
     lastUpdateTime = Time.time;
 }
Пример #17
0
 ///// <summary>
 ///// 
 ///// </summary>
 ///// <returns>是否成功开启动作</returns>
 //public virtual bool beginAction()
 //{
 //    _inActing = true;
 //    return true;
 //}
 public virtual void processCommand( UnitActionCommand pUnitActionCommand)
 {
 }
Пример #18
0
 void OnCommand(UnitActionCommand pCommand)
 {
     //pCommand.Fire = fireAction.inActing;
     if (nowAction)
     {
         //若在无 if (nowAction)下执行,会关闭动作命令
         pCommand.Action1 = action1.inActing;
         pCommand.Action2 = action2.inActing;
         pCommand.Fire = fireAction.inActing;
         //print(!nowAction.canMove);
         if (!nowAction.canChangeFace)
             pCommand.command &= UnitActionCommand.negFaceCommand;
         if (!nowAction.canMove)
             pCommand.command &= UnitActionCommand.negGoForwardCommand;
     }
     //else if (pCommand.Action1 && pCommand.Action2)
     //    pCommand.Action2 = false;
 }