Esempio n. 1
0
    protected void copy(DestroyNode nodeToCopy)
    {
        base.copy(nodeToCopy);

        toDestroyName = nodeToCopy.toDestroyName;
        isImage       = nodeToCopy.isImage;
    }
Esempio n. 2
0
    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);
    }