示例#1
0
 public override void Enter(StateMachine stateMachine, EventMessage eventResponse, ActiveLinking activeLinking)
 {
     activeLinking.linkingProperties.Add("push_position", eventResponse.pos);
 }
示例#2
0
    public override void Enter(StateMachine stateMachine, EventMessage eventResponse, ActiveLinking activeLinking)
    {
        //set time before stunnedState leaves
        activeLinking.linkingProperties.Add("time", duration);

        activeLinking.linkingProperties.Add("lastFireDamageTime", activeLinking.timeStarted);

        var c = stateMachine.GetComponent <Character>();


        c.effectIndicators.fireEffect.Stop(true, ParticleSystemStopBehavior.StopEmittingAndClear);
        var main = c.effectIndicators.fireEffect.main;

        main.duration = duration;
        c.effectIndicators.fireEffect.Play();
    }
    override public void Enter(StateMachine stateMachine, EventMessage eventResponse, ActiveLinking activeLinking)
    {
        NonPlayerCharacter npc = stateMachine.GetComponent <NonPlayerCharacter>();

        MagicTargetCircleController target = eventResponse.target.GetComponent <MagicTargetCircleController>();

        npc.character.currentSpeed = CharacterSpeed.FAST;

        var moveVec = target.transform.position + ((npc.transform.position - target.transform.position).normalized * (target.radius + runDistanceFromOuterRadius));


        Debug.DrawLine(target.transform.position, moveVec, Color.green, 10);

        npc.MoveToOrFollow(moveVec);

        activeLinking.linkingProperties.Add("target_position", moveVec);
    }
示例#4
0
 public override void Enter(StateMachine stateMachine, EventMessage eventResponse, ActiveLinking activeLinking)
 {
 }
示例#5
0
    override public void Enter(StateMachine stateMachine, EventMessage eventResponse, ActiveLinking activeLinking)
    {
        var follower = stateMachine.GetComponent <Follower>();

        follower.enabled = true;
    }
 public override void Init(ActiveLinking activeLinking)
 {
     start = Time.time;
     childImage.fillAmount = 0;
     suspiciousTime        = activeLinking.GetValueOrDefault <float>("time");
 }
示例#7
0
    override public void Enter(StateMachine stateMachine, EventMessage eventResponse, ActiveLinking activeLinking)
    {
        NonPlayerCharacter npc = stateMachine.GetComponent <NonPlayerCharacter>();

        npc.VisionAngleModifier  = 1f;
        npc.VisionRadiusModifier = 1f;
    }
示例#8
0
        override public void Enter(StateMachine stateMachine, EventMessage eventResponse, ActiveLinking activeLinking)
        {
            NonPlayerCharacter npc = stateMachine.GetComponent <NonPlayerCharacter>();

            activeLinking.linkingProperties.Add("target_position", npc.characterTarget.transform);
        }
        override public void Enter(StateMachine stateMachine, EventMessage eventResponse, ActiveLinking activeLinking)
        {
            NonPlayerCharacter npc = stateMachine.GetComponent <NonPlayerCharacter>();

            npc.nav2DAgent.addSeparationIgnored(eventResponse.target);


            //clear any character target;
            npc.characterTarget = null;


            npc.searchingPosition = eventResponse.target != null ?
                                    eventResponse.target.transform.position : (
                npc.characterTarget == null ?
                npc.transform.position :
                npc.characterTarget.transform.position
                );
        }
示例#10
0
    public override void Enter(StateMachine stateMachine, EventMessage eventResponse, ActiveLinking activeLinking)
    {
        stateMachine.GetComponent <Animator>()?.SetBool("dead", true);
        //temporary
        //Destroy(stateMachine.gameObject);

        var sceneManager = GameObject
                           .FindGameObjectWithTag("SceneManager")
                           .GetComponent <FortressSceneManager>();
        var nonPlayerCharacter = stateMachine.GetComponent <NonPlayerCharacter>();

        if (nonPlayerCharacter != null)
        {
            // disable agent2d for pushing around
            var agent = stateMachine.GetComponent <Nav2DAgent>();
            if (agent != null)
            {
                agent.enabled = false;
            }
        }
        else
        {
            var playerCharacter = stateMachine.GetComponent <PlayerCharacter>();
            if (playerCharacter != null)
            {
                sceneManager.GameOver(GameOverType.playerDied);
            }
        }
    }
示例#11
0
 void HandleDone(ActiveLinking linking)
 {
     done.Value = true;
 }
示例#12
0
 public abstract void Init(ActiveLinking activeLinking);
示例#13
0
 public abstract bool Check(GameObject gameObject, ActiveLinking activeLinking, out EventMessage message);
示例#14
0
    // stateMachine and activeLinking always null
    public override void Enter(StateMachine stateMachine, EventMessage eventResponse, ActiveLinking activeLinking)
    {
        var spellTarget = eventResponse.target.GetComponent <MagicTargetBase>();

        switch (spellTarget.spell.spellTarget)
        {
        case SpellTarget.CIRCLE:

            var circleTarget = eventResponse.target.GetComponent <MagicTargetCircleController>();
            var radius       = circleTarget.radius;

            for (var i = 0; i < radius; i++)
            {
                var angle    = Random.Range(0, 2 * Mathf.PI);
                var distance = Random.Range(0, radius);

                Instantiate(
                    summonedPrefab,
                    eventResponse.target.transform.position +
                    new Vector3(Mathf.Cos(angle) * distance, Mathf.Sin(angle) * distance),
                    Quaternion.identity
                    );
            }

            break;

        default:

            var rDir = Random.Range(0, 2 * Mathf.PI);
            var rDis = Random.Range(0.5f, 1);

            Instantiate(
                summonedPrefab,
                eventResponse.target.transform.position +
                new Vector3(Mathf.Cos(rDir) * rDis, Mathf.Sin(rDir) * rDis),
                Quaternion.identity
                );

            break;
        }
        //temporary
        //Destroy(stateMachine.gameObject);
    }
 public override bool Check(GameObject character, ActiveLinking activeLinking, out EventMessage message)
 {
     message = EventMessage.EmptyMessage;
     return(true);
 }
示例#16
0
    public override void Enter(StateMachine stateMachine, EventMessage eventResponse, ActiveLinking activeLinking)
    {
        //set time before stunnedState leaves
        activeLinking.linkingProperties.Add("time", duration);

        var c = stateMachine.GetComponent <Character>();


        c.effectIndicators.stunnedEffect.Stop(true, ParticleSystemStopBehavior.StopEmittingAndClear);
        var main = c.effectIndicators.stunnedEffect.main;

        main.duration = duration;
        c.effectIndicators.stunnedEffect.Play();


        // disable agent2d for pushing around

        var agent = stateMachine.GetComponent <Nav2DAgent>();

        agent.enabled = false;

        //Debug.Log("disabled agent");
    }
    override public void Enter(StateMachine stateMachine, EventMessage eventResponse, ActiveLinking activeLinking)
    {
        NonPlayerCharacter npc = stateMachine.GetComponent <NonPlayerCharacter>();

        npc.VisionAngleModifier  = 1f;
        npc.VisionRadiusModifier = 1f;

        activeLinking.linkingProperties.Add("corners", new Queue <Vector2>());
        activeLinking.linkingProperties.Add("buildings", new Queue <Queue <Vector2> >());
    }
 override public void Enter(StateMachine stateMachine, EventMessage eventMessage, ActiveLinking activeLinking)
 {
     activeLinking.linkingProperties.Add("start_rotation", stateMachine.GetComponent <Character>().lookDirection);
 }
    override public void StateUpdate(StateMachine stateMachine, ActiveLinking activeLinking)
    {
        NonPlayerCharacter npc       = stateMachine.GetComponent <NonPlayerCharacter>();
        Character          character = stateMachine.GetComponent <Character>();


        Nav2DAgent navAgent = stateMachine.GetComponent <Nav2DAgent>();

        character.currentSpeed = CharacterSpeed.SLOW;


        if (!npc.nav2DAgent.isMoving && !npc.nav2DAgent.isWaitingForPath)
        {
            //Debug.Log("moving is false");

            var colliders = Physics2D.OverlapCircleAll(stateMachine.transform.position,
                                                       findClosestBuildingRadius, LayerMask.GetMask(buildingFindLayers));


            if (colliders.Count() <= 0)
            {
                return;
            }

            var buildingQueue = activeLinking.GetValueOrDefault <Queue <Queue <Vector2> > >("buildings");
            var cornerQueue   = activeLinking.GetValueOrDefault <Queue <Vector2> >("corners");

            if (cornerQueue.Count < 1)
            {
                if (buildingQueue.Count < 1)
                {
                    var closestColliders = colliders.OrderBy(
                        x => (x.transform.position - stateMachine.transform.position).magnitude
                        );

                    foreach (var collider in closestColliders)
                    {
                        var c = collider.GetComponentInParent <BuildingController>();

                        // if has building component and parent building is on building layer (walls are building that cannot be patrolled)
                        if (c == null || c.gameObject.layer != LayerMask.NameToLayer("Building"))
                        {
                            var l = LayerMask.GetMask("Building");
                            continue;
                        }

                        buildingQueue.Enqueue(new Queue <Vector2>(c.WorldSpaceCorners));
                    }
                }


                if (buildingQueue.Count < 1)
                {
                    return;
                }


                var corners = new List <Vector2>(buildingQueue.Dequeue())
                              .Where(x =>
                {
                    // only take corners that are not inside a active spell
                    var c = Physics2D.OverlapPointAll(x, LayerMask.GetMask(spellTargetLayers));
                    foreach (var collider in c)
                    {
                        var target = collider.GetComponent <MagicTargetBase>();
                        if (!target.spellDone)
                        {
                            return(false);
                        }
                    }

                    // and the corner is accessable;
                    return(navAgent.navGrid.CanBeReached(x));
                }).ToList();


                // patrolling around building can be clockwise or anticlockwise
                if (Random.value > 0.5)
                {
                    corners.Reverse();
                }


                var closesCornerIndex = corners.FindIndex(x =>
                                                          x == corners.MinBy(c => (c - (Vector2)stateMachine.transform.position).magnitude).First()
                                                          );


                // shift the values so that the closest corner is first
                for (var i = 0; i < corners.Count; i++)
                {
                    cornerQueue.Enqueue(corners[(closesCornerIndex + i) % corners.Count]);
                }
            }
            else
            {
                npc.MoveToOrFollow(
                    cornerQueue.Dequeue()
                    );
            }
        }
    }
示例#20
0
 override public void StateUpdate(StateMachine stateMachine, ActiveLinking activeLinking)
 {
 }
示例#21
0
 public override void Enter(StateMachine stateMachine, EventMessage eventResponse, ActiveLinking activeLinking)
 {
     //temporary
     //Destroy(stateMachine.gameObject);
 }
示例#22
0
 public override void Init(ActiveLinking activeLinking)
 {
 }
    public override void Enter(StateMachine stateMachine, EventMessage eventResponse, ActiveLinking activeLinking)
    {
        var c = stateMachine.GetComponent <Character>();

        c.AddDamage(dmg);
    }