Beispiel #1
0
    // prevents to fall through the scene in case we are jumping 'uphill'
    public static Vector3 BuildSafeFinalPositionForLeavingCover(AgentActionCoverLeave.E_Type type,
                                                                Vector3 position,
                                                                Vector3 right,
                                                                Vector3 forward)
    {
        switch (type)
        {
        case AgentActionCoverLeave.E_Type.Right:
        case AgentActionCoverLeave.E_Type.Left:
            float multiplierHelper = 1;
            if (type == AgentActionCoverLeave.E_Type.Left)
            {
                multiplierHelper = -1.0f;
            }
            return(BuildSafeFinalPositionForLeavingCover(position + right * multiplierHelper * 1.5f + forward * 1.1f));

        case AgentActionCoverLeave.E_Type.Jump:
            return(BuildSafeFinalPositionForLeavingCover(position + forward * 2.0f));

        case AgentActionCoverLeave.E_Type.JumpUp:
            return(position + Vector3.up * 1.4f + forward * 0.65f);

        case AgentActionCoverLeave.E_Type.Back:
            return(BuildSafeFinalPositionForLeavingCover(position + forward * 1.1f));
        }

        Debug.LogWarning("BuildSafeFinalPositionForLeavingCover : Unsupported type of cover leaving : Action.TypeOfLeave");

        return(position);
    }
    protected void CoverLeave(AgentActionCoverLeave.E_Type typeOfLeave, uLink.NetworkMessageInfo info)
    {
        //TODO: How is this? I believe we definitelly cannot afford to ignore the CoverLeave event on both on proxies and I think we
        //should not ignore it on server too. No doubt about proxies - they should just do what they are told to do.
        //About the server - how can we ignore it without fixing a client? If we ignore it, the player stayes in a cover forever
        //which might cause both: visual artefacts and even detecting player as a cheater.
        //I don't think that a potential cheater can gain much of benefit by leaving the cover prematurely.

        //if (Owner.BlackBoard.DontUpdate)
        //	return;

        if (Owner.IsInCover)
        {
#if !DEADZONE_CLIENT
            if (Owner.IsServer)
            {
                ServerAnticheat.ReportCoverLeave(Owner.NetworkView.owner, typeOfLeave, info);
                Owner.NetworkView.RPC("CoverLeave", uLink.RPCMode.OthersExceptOwner, typeOfLeave);
            }
#endif

            AgentActionCoverLeave action = AgentActionFactory.Create(AgentActionFactory.E_Type.CoverLeave) as AgentActionCoverLeave;
            action.TypeOfLeave        = typeOfLeave;
            action.FinalViewDirection = Owner.BlackBoard.Cover.Forward;
            action.Cover = Owner.BlackBoard.Cover;

            Owner.BlackBoard.ActionAdd(action);
        }
    }
Beispiel #3
0
 public static void ReportCoverLeave(uLink.NetworkPlayer player, AgentActionCoverLeave.E_Type typeOfLeave, uLink.NetworkMessageInfo info)
 {
 }
Beispiel #4
0
    bool CheckCapsule(Cover c, AgentActionCoverLeave.E_Type type)
    {
        bool result = true;

        Transform T = c.transform;

        Vector3 center   = T.position;
        Vector3 scale    = T.lossyScale;
        Vector3 right    = T.right;
        Vector3 forward  = T.forward;
        Vector3 rightPos = center + right * scale.x * 0.5f;
        Vector3 leftPos  = center - right * scale.x * 0.5f;
        Vector3 up       = Vector3.up * scale.y * 0.5f;

        Vector3 testedPosition = center;
        Vector3 fromPos        = center;

        Color debugColor = Color.white;

        switch (type)
        {
        case AgentActionCoverLeave.E_Type.JumpUp:
            testedPosition = AnimStateCoverLeave.BuildSafeFinalPositionForLeavingCover(type, center, right, forward);
            debugColor     = Color.cyan;
            fromPos        = center;

            if (!CheckCapsuleAtPos(AnimStateCoverLeave.BuildSafeFinalPositionForLeavingCover(type, rightPos, right, forward), debugColor, rightPos + up))
            {
                result = false;
            }

            if (!CheckCapsuleAtPos(AnimStateCoverLeave.BuildSafeFinalPositionForLeavingCover(type, leftPos, right, forward), debugColor, leftPos + up))
            {
                result = false;
            }
            break;

        case AgentActionCoverLeave.E_Type.Left:
            testedPosition = AnimStateCoverLeave.BuildSafeFinalPositionForLeavingCover(type, leftPos, right, forward);
            debugColor     = Color.red;
            fromPos        = leftPos;
            break;

        case AgentActionCoverLeave.E_Type.Right:
            testedPosition = AnimStateCoverLeave.BuildSafeFinalPositionForLeavingCover(type, rightPos, right, forward);
            debugColor     = Color.green;
            fromPos        = rightPos;
            break;

        case AgentActionCoverLeave.E_Type.Back:
            testedPosition = AnimStateCoverLeave.BuildSafeFinalPositionForLeavingCover(type, center, right, -forward);
            debugColor     = Color.blue;
            fromPos        = center;

            if (!CheckCapsuleAtPos(AnimStateCoverLeave.BuildSafeFinalPositionForLeavingCover(type, rightPos, right, -forward), debugColor, rightPos + up))
            {
                result = false;
            }

            if (!CheckCapsuleAtPos(AnimStateCoverLeave.BuildSafeFinalPositionForLeavingCover(type, leftPos, right, -forward), debugColor, leftPos + up))
            {
                result = false;
            }
            break;
        }

        if (!CheckCapsuleAtPos(testedPosition, debugColor, fromPos + up))
        {
            result = false;
        }


        return(result);
    }