示例#1
0
        public void AddMessageLog(FlagEvent e, FlagNode flag, [JoinByTank] TankNode tank2Team, [JoinByTeam] TeamNode tankTeam, FlagNode flag2User, [JoinByTank] TankNode tank2User, [JoinByUser] UserNode user, FlagNode flag2Team, [JoinByTeam] TeamNode flagTeam, [JoinAll] SingleNode <SelfBattleUserComponent> selfUser, [JoinByTeam] Optional <TeamNode> selfTeam, [JoinAll] CombatLogNode combatLog)
        {
            CombatLogCTFMessagesComponent combatLogCTFMessages = combatLog.combatLogCTFMessages;
            string newValue    = GetOwnFlag(selfTeam, flagTeam, combatLogCTFMessages);
            Color  teamColor   = CombatEventLogUtil.GetTeamColor(tankTeam.colorInBattle.TeamColor, combatLog.combatEventLog);
            string messageText = CombatEventLogUtil.ApplyPlaceholder(GetMessage(e, flag.Entity, combatLogCTFMessages).Replace(CombatLogCTFMessagesComponent.OWN, newValue), "{user}", user.userRank.Rank, user.userUid.Uid, teamColor);

            combatLog.uiLog.UILog.AddMessage(messageText);
        }
示例#2
0
 private void SetFlagNotHomeIcon(FlagNode flag, SelfBattleUser user, SingleNode <AlliesBasePointerComponent> alliesPointer, EnemyBasePointer enemyPointer)
 {
     if (flag.teamGroup.Key == user.teamGroup.Key)
     {
         alliesPointer.component.SetFlagStolenState();
     }
     else
     {
         enemyPointer.enemyBasePointer.SetFlagStolenState();
     }
 }
示例#3
0
 public void DropFlag(NodeAddedEvent e, FlagNode flag, [JoinByBattle] SingleNode <CTFConfigComponent> ctfConfig)
 {
     if (flag.flagInstance.FlagInstance.transform.parent != null)
     {
         Transform transform        = flag.flagInstance.FlagInstance.transform;
         Vector3   localEulerAngles = transform.GetChild(0).transform.localEulerAngles;
         Vector3   vector2          = transform.parent.transform.localEulerAngles;
         transform.GetComponent <Sprite3D>().scale = 0f;
         Transform transform2 = transform.GetChild(0).transform;
         transform2.localEulerAngles = new Vector3(0f, localEulerAngles.y, 0f);
         transform2.localScale       = new Vector3(ctfConfig.component.flagScaleOnGround, ctfConfig.component.flagScaleOnGround, ctfConfig.component.flagScaleOnGround);
         transform2.localPosition    = new Vector3(0f, 0f, 0f);
         transform.parent            = null;
         transform.position          = flag.flagPosition.Position;
         transform.eulerAngles       = new Vector3(0f, transform.eulerAngles.y, 0f);
     }
 }
 public void GetFlagTargetBonus(GetFlagTargetBonusEvent e, EvaluatorNode evaluator, TankNode tank, [Combine, JoinByTank] FlagNode flag)
 {
     e.Value = evaluator.ctfTargetEvaluator.FlagCarrierPriorityBonus;
 }
 public void SendCollisionEvent(TankFlagCollisionEvent e, TankNode tank, [JoinByBattle] SingleNode <RoundActiveStateComponent> round, [Context, JoinByBattle] FlagNode flag)
 {
     base.ScheduleEvent <SendTankMovementEvent>(tank);
     base.NewEvent <FlagCollisionRequestEvent>().Attach(tank).Attach(flag).Schedule();
 }
示例#6
0
 public void OnDeliver(FlagDeliveryEvent e, FlagNode flag, [JoinByTeam] SingleNode <ColorInBattleComponent> color, [JoinByBattle] HUDNodes.SelfBattleUserNode self, [JoinAll] HUDNode hud, Optional <SingleNode <CTFHUDMessagesComponent> > messages)
 {
示例#7
0
        public void BuildFlag(NodeAddedEvent e, BattleNode ctf, SingleNode <MapInstanceComponent> map, [Combine] FlagNode flag, [JoinByTeam] TeamNode teamNode)
        {
            CTFAssetProxyBehaviour assetProxyBehaviour = GetAssetProxyBehaviour(ctf);
            TeamColor             teamColor            = teamNode.colorInBattle.TeamColor;
            GameObject            original             = (teamColor != TeamColor.RED) ? assetProxyBehaviour.blueFlag : assetProxyBehaviour.redFlag;
            GameObject            obj3      = (teamColor != TeamColor.RED) ? assetProxyBehaviour.blueFlagBeam : assetProxyBehaviour.redFlagBeam;
            FlagInstanceComponent component = new FlagInstanceComponent();
            GameObject            obj4      = Object.Instantiate <GameObject>(original, flag.flagPosition.Position, Quaternion.identity);

            component.FlagInstance = obj4;
            component.FlagBeam     = Object.Instantiate <GameObject>(obj3, obj4.transform, false);
            flag.Entity.AddComponent(component);
            obj4.AddComponent <FlagPhysicsBehaviour>().TriggerEntity = flag.Entity;
            flag.Entity.AddComponent(new FlagColliderComponent(obj4.GetComponent <BoxCollider>()));
        }
    void GenerateBehaviors()
    {
        Animator a = GetAnimator();

        ////////////////////////////////// Movement //////////////////////////////////

        EvadeNode     evade     = new EvadeNode(this.rB, speed, 0.4f, 25);
        IsBlockedNode isBlocked = new IsBlockedNode(transform, evade, 1, 1);
        MoveNode      move      = new MoveNode(rB, target, speed, atkRange);

        SequenceNode evading = new SequenceNode(new List <Node>()
        {
            isBlocked, evade
        });
        SelectorNode movement = new SelectorNode(new List <Node>()
        {
            evading, move
        });

        ////////////////////////////////// Death //////////////////////////////////

        HealthCheckNode         isDead              = new HealthCheckNode(this, 0, true);
        ClampSuccessNode        isDeadClamped       = new ClampSuccessNode(isDead);
        AnimationNode           deathAnim           = new AnimationNode(a, "Die");
        OnAnimationCompleteNode onDeathAnimComplete = new OnAnimationCompleteNode(a, "Die");
        DestroyNode             destroy             = new DestroyNode(this.gameObject);

        SequenceNode death = new SequenceNode(new List <Node> {
            isDeadClamped, deathAnim, onDeathAnimComplete, destroy
        });

        ////////////////////////////////// Cover //////////////////////////////////

        HealthCheckNode   isLow         = new HealthCheckNode(this, consideredLowHP, true);
        SoundNode         hurtSFX       = new SoundNode(Sound.SeaMonsterHurt);
        RandomNode        chanceHurtSFX = new RandomNode(hurtSFX, 0.4f);
        ColorFlashNode    hurtFlash     = new ColorFlashNode(GetMaterial(), Color.red, 3, 1);
        RecoverHealthNode hpRecover     = new RecoverHealthNode(this, hpRecoveryMultiplier);
        FindCover         findCover     = new FindCover(this, target, 10);

        SequenceNode hurting = new SequenceNode(new List <Node>()
        {
            chanceHurtSFX, hurtFlash
        });
        SequenceNode recovering = new SequenceNode(new List <Node>()
        {
            hpRecover, hurting
        });
        SequenceNode covering = new SequenceNode(new List <Node>()
        {
            findCover, movement
        });
        ParallelNode recoveringAndCovering = new ParallelNode(new List <Node>()
        {
            recovering, covering
        }, 2);

        SequenceNode cover = new SequenceNode(new List <Node>()
        {
            isLow, recoveringAndCovering
        });

        ////////////////////////////////// Attack //////////////////////////////////

        // Condition To Start Attack Sequence
        IsInRangeNode isInATKRange = new IsInRangeNode(atkRange, transform, target);

        // Attack Sequence
        AnimationNode readyUpAnim = new AnimationNode(a, "Aim");
        LookNode      aim         = new LookNode(rB, target, 1, 12, 7);
        AnimationNode strikeAnim  = new AnimationNode(a, "Fire");
        TimerNode     atkTimer    = new TimerNode(1);

        // Wrapping Nodes
        SequenceNode attackPattern = new SequenceNode(new List <Node>()
        {
            readyUpAnim, aim, strikeAnim, atkTimer
        });
        ResetOnStateNode resetATK  = new ResetOnStateNode(attackPattern, NodeState.SUCCESS);
        SequenceNode     attacking = new SequenceNode(new List <Node>()
        {
            isInATKRange, resetATK
        });
        SelectorNode attack = new SelectorNode(new List <Node>()
        {
            attacking, movement
        });


        ////////////////////////////////// Patrol //////////////////////////////////

        PatrolNode   patrolMove     = new PatrolNode(rB, Mathf.RoundToInt(speed * 0.7f), 0.5f, 6, 20, 1.5f, 4);
        SelectorNode evadeAndPatrol = new SelectorNode(new List <Node>()
        {
            evading, patrolMove
        });

        SpotTargetNode spotTarget = new SpotTargetNode(transform, 40, 80, LayerMask.NameToLayer("Target"), LayerMask.NameToLayer("Enemy"));

        FlagNode      flag          = new FlagNode(NodeState.SUCCESS, NodeState.FAILURE);
        FlagActivator flagActivator = new FlagActivator(flag);

        SequenceNode spotAndStop = new SequenceNode(new List <Node>()
        {
            spotTarget, flagActivator
        });

        SelectorNode patroling = new SelectorNode(new List <Node>()
        {
            spotAndStop, evadeAndPatrol
        });
        SequenceNode patrol = new SequenceNode(new List <Node>()
        {
            flag, patroling
        });

        ////////////////////////////////// Top Node //////////////////////////////////

        topNode = new Tree(new SelectorNode(new List <Node>()
        {
            death, cover, patrol, attack
        }));

        BehaviorTreeManager.AddTree(topNode);
    }
 public FlagActivator(FlagNode flag)
 {
     this.flag = flag;
 }
        public void StartHidingAnyNewFlag(NodeAddedEvent evt, FlagNode flag, [JoinByBattle] ShaftAimingMapWorkingNode weapon)
        {
            float timeSinceLevelLoad = Time.timeSinceLevelLoad;

            this.EnableHidingItem(flag.flagInstance.FlagInstance.GetComponent <Sprite3D>().material, timeSinceLevelLoad, weapon);
        }