protected void copy(DestroyNode nodeToCopy) { base.copy(nodeToCopy); toDestroyName = nodeToCopy.toDestroyName; isImage = nodeToCopy.isImage; }
void ContextCallBack(object o) { string clb = o.ToString(); if (clb.Equals("textNode")) { TextNode textNode = new TextNode(); textNode.windowRect = new Rect(mousePos.x, mousePos.y, 200, 150); AddNode(textNode); } else if (clb.Equals("imgNode")) { ImageNode imgNode = new ImageNode(); imgNode.windowRect = new Rect(mousePos.x, mousePos.y, 200, 325); AddNode(imgNode); } else if (clb.Equals("clicNode")) { WaitForInputNode clicNode = new WaitForInputNode(); clicNode.windowRect = new Rect(mousePos.x, mousePos.y, 150, 50); AddNode(clicNode); } else if (clb.Equals("lucNode")) { LucidityAddNode lucNode = new LucidityAddNode(); lucNode.windowRect = new Rect(mousePos.x, mousePos.y, 200, 150); AddNode(lucNode); } else if (clb.Equals("calcNode")) { SetVariableNode calcNode = new SetVariableNode(); calcNode.windowRect = new Rect(mousePos.x, mousePos.y, 200, 150); AddNode(calcNode); } else if (clb.Equals("waitNode")) { WaitNode waitNode = new WaitNode(); waitNode.windowRect = new Rect(mousePos.x, mousePos.y, 200, 150); AddNode(waitNode); } else if (clb.Equals("fadeNode")) { FadeNode fadeNode = new FadeNode(); fadeNode.windowRect = new Rect(mousePos.x, mousePos.y, 200, 150); AddNode(fadeNode); } else if (clb.Equals("choiceNode")) { ChoiceNode choiceNode = new ChoiceNode(); choiceNode.windowRect = new Rect(mousePos.x, mousePos.y, 200, 150); AddNode(choiceNode); } else if (clb.Equals("seqNode")) { GoToSequenceNode seqChoice = new GoToSequenceNode(); seqChoice.windowRect = new Rect(mousePos.x, mousePos.y, 200, 150); AddNode(seqChoice); } else if (clb.Equals("destroyNode")) { DestroyNode destroyNode = new DestroyNode(); destroyNode.windowRect = new Rect(mousePos.x, mousePos.y, 200, 150); AddNode(destroyNode); } else if (clb.Equals("conditionNode")) { ConditionNode conditionNode = new ConditionNode(); conditionNode.windowRect = new Rect(mousePos.x, mousePos.y, 200, 175); AddNode(conditionNode); } else if (clb.Equals("placeNode")) { GoToPlaceNode placeNode = new GoToPlaceNode(); placeNode.windowRect = new Rect(mousePos.x, mousePos.y, 200, 150); AddNode(placeNode); } else if (clb.Equals("animNode")) { AnimationNode animNode = new AnimationNode(); animNode.windowRect = new Rect(mousePos.x, mousePos.y, 200, 300); AddNode(animNode); } else if (clb.Equals("exploNode")) { GoToExplorationNode exploNode = new GoToExplorationNode(); exploNode.windowRect = new Rect(mousePos.x, mousePos.y, 200, 150); AddNode(exploNode); } else if (clb.Equals("soundNode")) { PlaySoundNode soundNode = new PlaySoundNode(); soundNode.windowRect = new Rect(mousePos.x, mousePos.y, 200, 150); AddNode(soundNode); } else if (clb.Equals("stopNode")) { StopSoundNode stopNode = new StopSoundNode(); stopNode.windowRect = new Rect(mousePos.x, mousePos.y, 200, 150); AddNode(stopNode); } else if (clb.Equals("goNode")) { GameObjectNode goNode = new GameObjectNode(); goNode.windowRect = new Rect(mousePos.x, mousePos.y, 200, 200); AddNode(goNode); } else if (clb.Equals("setFirst")) { int selectedIndex = -1; bool clickedOnWindow = CheckClicked(out selectedIndex); if (clickedOnWindow) { sequence.firstNodeId = sequence.nodes[selectedIndex].id; } } else if (clb.Equals("makeTransition")) { int selectedIndex = -1; bool clickedOnWindow = CheckClicked(out selectedIndex); if (clickedOnWindow) { selectedNode = sequence.nodes[selectedIndex]; if (selectedNode.nextNodeId != -1) { selectedNode.nextNodeId = -1; selectedNode.nextNode.NodeDeleted(selectedNode); selectedNode.nextNode = null; } makeTransitionMode = true; } } else if (clb.Equals("makeTransition1")) { MakeTransitionChoice(0); } else if (clb.Equals("makeTransition2")) { MakeTransitionChoice(1); } else if (clb.Equals("makeTransition3")) { MakeTransitionChoice(2); } else if (clb.Equals("makeTransition4")) { MakeTransitionChoice(3); } else if (clb.Equals("makeTransitionTrue")) { MakeTransitionCondition(0); } else if (clb.Equals("makeTransitionFalse")) { MakeTransitionCondition(1); } else if (clb.Equals("deleteNode")) { int selectedIndex = -1; bool clickedOnWindow = CheckClicked(out selectedIndex); if (clickedOnWindow) { EventNode selNode = sequence.nodes[selectedIndex]; sequence.nodes.RemoveAt(selectedIndex); if (selNode.id == sequence.firstNodeId) { if (sequence.nodes.Count > 0) { sequence.firstNodeId = sequence.nodes[0].id; } else { sequence.firstNodeId = -1; } } foreach (EventNode n in sequence.nodes) { n.NodeDeleted(selNode); } } } }
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); }