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); }
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(); } }
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(); }
public void OnDeliver(FlagDeliveryEvent e, FlagNode flag, [JoinByTeam] SingleNode <ColorInBattleComponent> color, [JoinByBattle] HUDNodes.SelfBattleUserNode self, [JoinAll] HUDNode hud, Optional <SingleNode <CTFHUDMessagesComponent> > messages) {
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); }