示例#1
0
    public override void OnDeactivate()
    {
        //Time.timeScale = 1;
        Owner.BlackBoard.BusyAction = false;

        Animation.Stop(AnimNameUp);
        Animation.Stop(AnimNameDown);
        Animation.Stop(AnimNameLeft);
        Animation.Stop(AnimNameRight);

        if (Owner.IsAlive)
        {
            Owner.BlackBoard.CoverFire = false;
        }

        //Debug.Log("deactivate " + Owner.BlackBoard.CoverFire);
        if (ActionCancel != null)
        {
            ActionCancel.SetSuccess();
        }

        ActionCancel = null;
        Action.SetSuccess();
        Action = null;
        base.OnDeactivate();
    }
示例#2
0
    protected override void Initialize(AgentAction action)
    {
        base.Initialize(action);

        Action = action as AgentActionCoverFire;

        AnimNameBase = Owner.AnimSet.GetCoverAnim(AnimSet.E_CoverAnim.AimStart, Action.CoverPose, Action.CoverDirection);
        Animation[AnimNameBase].speed = 1.2f;

        EndOfStateTime = Animation[AnimNameBase].length * 0.9f + Time.timeSinceLevelLoad;

        Owner.WeaponComponent.GetCurrentWeapon().SetBusy(Animation[AnimNameBase].length);

        Owner.BlackBoard.MotionType = E_MotionType.None;

        State = E_State.Start;

        AnimNameUp    = Owner.AnimSet.GetAimAnim(E_AimDirection.Up, Action.CoverPose, Action.CoverDirection);
        AnimNameDown  = Owner.AnimSet.GetAimAnim(E_AimDirection.Down, Action.CoverPose, Action.CoverDirection);
        AnimNameRight = Owner.AnimSet.GetAimAnim(E_AimDirection.Right, Action.CoverPose, Action.CoverDirection);
        AnimNameLeft  = Owner.AnimSet.GetAimAnim(E_AimDirection.Left, Action.CoverPose, Action.CoverDirection);

        Animation[AnimNameUp].layer    = 1;
        Animation[AnimNameDown].layer  = 1;
        Animation[AnimNameRight].layer = 1;
        Animation[AnimNameLeft].layer  = 1;

        //AnimName = Owner.AnimSet.GetCoverAnim(AnimSet.E_CoverAnim.AimLoop, Owner.BlackBoard.CoverPose, Owner.BlackBoard.CoverDirection);
        Animation[AnimNameBase].wrapMode = WrapMode.ClampForever;

        CrossFade(AnimNameBase, 0.15f, PlayMode.StopSameLayer);
        Owner.SetDominantAnimName(AnimNameBase);

        float time = Animation[AnimNameBase].length * 0.9f;

        if (uLink.Network.isClient && Owner.NetworkView.isMine)
        {
            float newFOV = GameCamera.Instance.DefaultFOV;
            newFOV *= Owner.WeaponComponent.GetCurrentWeapon().CoverFireFovModificator;
            GameCamera.Instance.SetFov(newFOV, 60);
        }

        UpdateBlendValues();

        Animation[AnimNameUp].weight    = 0;
        Animation[AnimNameDown].weight  = 0;
        Animation[AnimNameRight].weight = 0;
        Animation[AnimNameLeft].weight  = 0;

        Animation.Blend(AnimNameUp, BlendUp, time);
        Animation.Blend(AnimNameDown, BlendDown, time);
        Animation.Blend(AnimNameRight, BlendRight, time);
        Animation.Blend(AnimNameLeft, BlendLeft, time);

        Owner.WeaponComponent.DisableCurrentWeapon(time);
    }
示例#3
0
    public override void Activate()
    {
        base.Activate();

        Action = AgentActionFactory.Create(AgentActionFactory.E_Type.CoverFire) as AgentActionCoverFire;
        Action.CoverDirection = Owner.BlackBoard.CoverPosition;
        Action.CoverPose      = Owner.BlackBoard.CoverPose;

        ActionCancel = null;

        Owner.BlackBoard.ActionAdd(Action);
    }
示例#4
0
    public override void Reset()
    {
        if (ActionCancel != null)
        {
            ActionCancel.SetSuccess();
        }

        if (Owner.IsOwner)
        {
            //WeaponBase	weapon = Owner.WeaponComponent.GetCurrentWeapon();

            GameCamera.Instance.Reset(0, 30);
        }

        Owner.BlackBoard.CoverFire = false;
        ActionCancel = null;

        Action.SetSuccess();
        Action = null;

        base.Reset();
    }
    protected void CoverFireStart(E_CoverPose pose, E_CoverDirection direction, uLink.NetworkMessageInfo info)
    {
        if (Owner.BlackBoard.DontUpdate)
        {
            return;
        }

#if !DEADZONE_CLIENT
        if (Owner.IsServer)
        {
            ServerAnticheat.ReportCoverFireStart(Owner.NetworkView.owner, pose, direction, info);
            Owner.NetworkView.RPC("CoverFireStart", uLink.RPCMode.OthersExceptOwner, pose, direction);
        }
#endif

        if (Owner.IsInCover)
        {
            AgentActionCoverFire action = AgentActionFactory.Create(AgentActionFactory.E_Type.CoverFire) as AgentActionCoverFire;
            action.CoverPose      = pose;
            action.CoverDirection = direction;

            Owner.BlackBoard.ActionAdd(action);
        }
    }
    void HandleAction(AgentAction action)
    {
        if (action is AgentActionAttack)
        {
            if (Owner.IsOwner)
            {
                Owner.NetworkView.RPC("AttackS", uLink.RPCMode.Server, (action as AgentActionAttack).FromPos, (action as AgentActionAttack).AttackDir);
            }
        }
        else if (action is AgentActionInjury)
        {
            var injury = action as AgentActionInjury;
            if (Owner.IsServer)
            {
                uLink.NetworkViewID viewId = (injury.Attacker != null && injury.Attacker.NetworkView != null)
                                                                                                                         ? injury.Attacker.NetworkView.viewID
                                                                                                                         : uLink.NetworkViewID.unassigned;

                Owner.NetworkView.RPC("Injury", RPCMode.Others, viewId, injury.Pos, injury.Impulse, (short)injury.Damage, (short)injury.BodyPart);
            }
        }
        else if (action is AgentActionReload)
        {
            if (Owner.IsOwner)
            {
                Owner.NetworkView.RPC("Reload", uLink.RPCMode.Server);
            }
        }
        else if (action is AgentActionTeamCommand)
        {
            AgentActionTeamCommand a = action as AgentActionTeamCommand;
            if (Owner.IsOwner)
            {
                Owner.NetworkView.RPC("TeamCmd", RPCMode.Server, a.Command);
            }
        }

        else if (action is AgentActionRoll)
        {
            if (Owner.IsOwner)
            {
                Owner.NetworkView.RPC("Roll", uLink.RPCMode.Server, (action as AgentActionRoll).Direction);
            }
        }
        else if (action is AgentActionDeath)
        {
            var death = action as AgentActionDeath;
            if (Owner.IsServer)
            {
                uLink.NetworkViewID viewId = (death.Attacker != null && death.Attacker.NetworkView != null)
                                                                                                                         ? death.Attacker.NetworkView.viewID
                                                                                                                         : uLink.NetworkViewID.unassigned;

                Owner.NetworkView.RPC("Death", RPCMode.Others, viewId, death.Pos, death.Impulse, (short)death.Damage, (short)death.BodyPart);

                if (null != death.Attacker)
                {
                    PPIManager.Instance.ServerAddScoreForKill(Owner.NetworkView.owner,
                                                              death.Attacker.NetworkView.owner,
                                                              Owner.BlackBoard.AttackersDamageData,
                                                              death.BodyPart,
                                                              Owner.GadgetsComponent.GetBoostGoldReward());
                }

                /*if (Server.Instance.GameInfo.GameType == E_MPGameType.ZoneControl)
                 * {
                 *      // currently not using rebalancing after death
                 *      //PPIManager.Instance.ServerRebalanceTeams();
                 * }*/
            }
        }
        else if (action is AgentActionCoverEnter)
        {
            if (Owner.IsOwner)
            {
                Owner.NetworkView.RPC("CoverEnter",
                                      uLink.RPCMode.Server,
                                      Mission.Instance.GameZone.GetCoverIndex(Owner.BlackBoard.Cover),
                                      Owner.BlackBoard.Desires.CoverPosition);
            }
        }
        else if (action is AgentActionCoverLeave)
        {
            if (Owner.IsOwner)
            {
                Owner.NetworkView.RPC("CoverLeave", uLink.RPCMode.Server, ((AgentActionCoverLeave)action).TypeOfLeave);
            }
        }
        else if (action is AgentActionCoverFire)
        {
            if (Owner.IsOwner)
            {
                AgentActionCoverFire a = action as AgentActionCoverFire;
                Owner.NetworkView.RPC("CoverFireStart", uLink.RPCMode.Server, a.CoverPose, a.CoverDirection);
            }
        }
        else if (action is AgentActionCoverFireCancel)
        {
            if (Owner.IsOwner)
            {
                Owner.NetworkView.RPC("CoverFireStop", uLink.RPCMode.Server);
            }
        }
        else if (action is AgentActionWeaponChange)
        {
            if (Owner.IsOwner)
            {
                Owner.NetworkView.RPC("ChangeWeapon", uLink.RPCMode.Server, (action as AgentActionWeaponChange).NewWeapon);
            }
        }
        else if (action is AgentActionUseItem)
        {
//			Debug.Log ("ComponentNetworkAction.HandleAction(), time=" + Time.timeSinceLevelLoad + ", BlackBoard.KeepMotion=" + Owner.BlackBoard.KeepMotion + ", Owner.IsOwner=" + Owner.IsOwner);

            if (Owner.IsOwner)
            {
                if (Owner.IsInCover)
                {
                    Owner.NetworkView.RPC("UseItemInCover",
                                          uLink.RPCMode.Server,
                                          Owner.BlackBoard.Desires.Gadget,
                                          Owner.BlackBoard.CoverPose,
                                          Owner.BlackBoard.CoverPosition);
                }
                else
                {
                    Owner.NetworkView.RPC("UseItem", uLink.RPCMode.Server, Owner.BlackBoard.Desires.Gadget, Owner.BlackBoard.KeepMotion);
                }
            }
        }
        else if (action is AgentActionMelee)
        {
            if (Owner.IsOwner)
            {
                AgentActionMelee a = action as AgentActionMelee;

                uLink.NetworkViewID viewId = (a.Target != null && a.Target.NetworkView != null)
                                                                                                                         ? a.Target.NetworkView.viewID
                                                                                                                         : uLink.NetworkViewID.unassigned;

                Owner.NetworkView.RPC("Melee", uLink.RPCMode.Server, a.MeleeType, viewId);
            }
        }
        else if (action is AgentActionKnockdown)
        {
            if (Owner.IsServer)
            {
                AgentActionKnockdown a = action as AgentActionKnockdown;

                uLink.NetworkViewID viewId = (a.Attacker != null && a.Attacker.NetworkView != null)
                                                                                                                         ? a.Attacker.NetworkView.viewID
                                                                                                                         : uLink.NetworkViewID.unassigned;

                Owner.NetworkView.RPC("Knockdown", uLink.RPCMode.Others, a.MeleeType, viewId, a.Direction);
            }
        }
    }
示例#7
0
    public static AgentAction Create(E_Type type)
    {
        int index = (int)type;

        AgentAction a;

        if (m_UnusedActions[index].Count > 0)
        {
            a = m_UnusedActions[index].Dequeue();
        }
        else
        {
            switch (type)
            {
            case E_Type.Idle:
                a = new AgentActionIdle();
                break;

            case E_Type.Move:
                a = new AgentActionMove();
                break;

            case E_Type.Sprint:
                a = new AgentActionSprint();
                break;

            case E_Type.Goto:
                a = new AgentActionGoTo();
                break;

            case E_Type.Attack:
                a = new AgentActionAttack();
                break;

            case E_Type.Melee:
                a = new AgentActionMelee();
                break;

            case E_Type.Injury:
                a = new AgentActionInjury();
                break;

            case E_Type.Roll:
                a = new AgentActionRoll();
                break;

            case E_Type.WeaponChange:
                a = new AgentActionWeaponChange();
                break;

            case E_Type.Rotate:
                a = new AgentActionRotate();
                break;

            case E_Type.Use:
                a = new AgentActionUse();
                break;

            case E_Type.PlayAnim:
                a = new AgentActionPlayAnim();
                break;

            case E_Type.PlayIdleAnim:
                a = new AgentActionPlayIdleAnim();
                break;

            case E_Type.Death:
                a = new AgentActionDeath();
                break;

            case E_Type.Knockdown:
                a = new AgentActionKnockdown();
                break;

            case E_Type.Teleport:
                a = new AgentActionTeleport();
                break;

            case E_Type.CoverEnter:
                a = new AgentActionCoverEnter();
                break;

            case E_Type.CoverMove:
                a = new AgentActionCoverMove();
                break;

            case E_Type.CoverFire:
                a = new AgentActionCoverFire();
                break;

            case E_Type.CoverFireCancel:
                a = new AgentActionCoverFireCancel();
                break;

            case E_Type.CoverLeave:
                a = new AgentActionCoverLeave();
                break;

            case E_Type.Reload:
                a = new AgentActionReload();
                break;

            case E_Type.UseItem:
                a = new AgentActionUseItem();
                break;

            case E_Type.ConstructGadget:
                a = new AgentActionConstructGadget();
                break;

            case E_Type.TeamCommand:
                a = new AgentActionTeamCommand();
                break;

            default:
                Debug.LogError("no AgentAction to create");
                return(null);
            }
        }
        a.Reset();
        a.SetActive();

        // DEBUG !!!!!!
        //	m_ActionsInAction.Add(a);
        return(a);
    }