public void SetParent(PaddockController paddock)
    {
        Owner = null;
        State = DragonState.InPaddock;

        MoveToRandomPointInPaddock();
    }
Ejemplo n.º 2
0
    private IEnumerator SleepBehaviors()
    {
        dragon.Sleep();
        yield return(new WaitForSeconds(5));

        State = (DragonState)Random.Range(0, 5);
    }
Ejemplo n.º 3
0
    private IEnumerator WalkBehaviors()
    {
        DoRandomNonFlyingAnimation();
        yield return(new WaitForSeconds(3));

        FaceRandomGroundDirection();

        float TimeWalking = 0;

        dragon.Walk();
        while (true)
        {
            yield return(new WaitForEndOfFrame());

            transform.position += transform.forward * WalkSpeed * Time.deltaTime;

            TimeWalking += Time.deltaTime;
            if (TimeWalking > 4f) // time the animation takes
            {
                int WhatToDoNext = Random.Range(0, 20);
                if (WhatToDoNext <= 4)
                {
                    State = (DragonState)Random.Range(0, 5);
                    yield return(null);
                }
                else
                {
                    dragon.Walk();
                    TimeWalking = 0;
                }
            }
        }
    }
Ejemplo n.º 4
0
    // Not going to worry about AI if I have these controls for now.
    void PlayerInput()
    {
        // Ignore input while fire breathing
        if (state == DragonState.FireBreathing)
        {
            return;
        }


        if (Input.GetKey(KeyCode.Space))
        {
            DoBreathAttack(); return;
        }


        state         = DragonState.Idle;
        MoveDirection = Vector3.zero;
        if (Input.GetKey(KeyCode.I))
        {
            OnMoveUp();   return;
        }
        if (Input.GetKey(KeyCode.K))
        {
            OnMoveDown(); return;
        }
        if (Input.GetKey(KeyCode.J))
        {
            OnMoveLeft(); return;
        }
        if (Input.GetKey(KeyCode.L))
        {
            OnMoveRight(); return;
        }
    }
Ejemplo n.º 5
0
 private void OnTriggerEnter(Collider other)
 {
     if (other.gameObject.tag == "Nofly")
     {
         DS_State = DragonState.Climb;
     }
 }
Ejemplo n.º 6
0
 public void Restart()
 {
     state  = DragonState.Idle;
     Health = MaxHealth;
     gameObject.transform.position = StartingPosition;
     gameObject.transform.rotation = StartingRotation;
     HasController = false;
 }
Ejemplo n.º 7
0
 private void OnTriggerExit(Collider other)
 {
     if (other.gameObject.tag == "Player")
     {
         state = DragonState.Normal;
         shout = false;
     }
 }
Ejemplo n.º 8
0
 void setWalking()
 {
     stepsAudioSource.Play();
     breathingAudioSource.Play();
     agent.isStopped = false;
     state           = DragonState.Walking;
     animator.SetTrigger("walk");
     walkingSet = true;
 }
Ejemplo n.º 9
0
    // Update is called once per frame
    void Update()
    {
        switch (currentState)
        {
        case DragonState.dead:
            if (timer <= 0.0f)
            {
                currentState = DragonState.enter;
                timer        = 5.0f;                   // 5 seconds to descend
                stallHealth.GetComponentInParent <Canvas>().enabled = true;
                reticle.GetComponent <SpriteRenderer>().enabled     = true;
                weapon.GetComponent <SpriteRenderer>().enabled      = true;
                tempPos    = this.transform.position;
                tempPos.y -= 3.0f;
                GameObject.Find("Stress Button").GetComponent <StressController>().increaseStressRate();
            }
            break;

        case DragonState.enter:
            this.transform.position = Vector3.MoveTowards(this.transform.position, tempPos, 0.02f);
            if (timer <= 0.0f)
            {
                currentState = DragonState.attack;
            }
            break;

        case DragonState.attack:
            damageStall();
            break;

        case DragonState.exit:
            this.transform.position = Vector3.MoveTowards(this.transform.position, tempPos, 0.1f);
            if (timer <= 0.0f)
            {
                currentState      = DragonState.dead;
                timer             = timeDragonDescend;
                stallHealth.value = stallHealth.maxValue;
                dragonHealth      = maxDragonHealth;
            }
            break;
        }

        if (isTimerRunning)
        {
            timer -= Time.deltaTime;
        }

        if (isReloading)
        {
            reloadTimer -= Time.deltaTime;
            if (reloadTimer <= 0)
            {
                isReloading = false;
                reloadTimer = maxReloadTime;
            }
        }
    }
Ejemplo n.º 10
0
 // Use this for initialization
 void Start()
 {
     currentState   = DragonState.dead;
     isTimerRunning = true;
     timer          = timeDragonDescend;
     dragonHealth   = maxDragonHealth;
     reloadTimer    = maxReloadTime;
     isReloading    = false;
 }
Ejemplo n.º 11
0
 void setAttacking()
 {
     walkingSet = false;
     breathingAudioSource.Stop();
     stepsAudioSource.Stop();
     agent.isStopped = true;
     state           = DragonState.Attacking;
     animator.SetTrigger("breathFire");
 }
Ejemplo n.º 12
0
 void Hunt()
 {
     transform.Translate(Vector3.forward * FL_MoveSpeed / 4 * Time.deltaTime);
     transform.Rotate(Vector3.up, FL_Turnspeed * Time.deltaTime);
     if (Vector3.Distance(transform.position, Target.transform.position) < fl_chaseRange)
     {
         DS_State = DragonState.Chase;
     }
 }
Ejemplo n.º 13
0
 private void OnTriggerEnter(Collider other)
 {
     if (other.gameObject.tag == "Player")
     {
         //playerPos = other.transform.position;
         state = DragonState.Chase;
         shout = true;
     }
 }
Ejemplo n.º 14
0
    private IEnumerator IdleBehaviors()
    {
        // find a fun way to start being idle
        DoRandomNonFlyingAnimation();

        yield return(new WaitForSeconds(Random.Range(3f, 7f)));

        State = (DragonState)Random.Range(0, 5);
    }
Ejemplo n.º 15
0
        public bool OnMessageRecieved <T>(T msg)
            where T : class, IActorMessage
        {
            if (this.DragonState == RolePlayingGame.DragonState.Dead)
            {
                return(true);
            }

            int damage = 0;

            if (msg is Attack)
            {
                damage = (msg as Attack).Damage;
            }
            else
            {
                throw new NotImplementedException();
            }

            bool isHit = (rand.Next() % 2 == 0);

            if (isHit)
            {
                Telegraph.Instance.Tell(new PrintHit((msg as Attack), "Dragon"));
                hitPoints -= damage;

                if (hitPoints <= 0)
                {
                    Telegraph.Instance.Tell(new PrintDeath("Dragon"));
                    this.DragonState = RolePlayingGame.DragonState.Dead;
                    return(true);
                }
            }
            else
            {
                Telegraph.Instance.Tell(new PrintMiss());
            }

            bool   useBreath = (rand.Next() % 2 == 0);
            Attack attack    = null;

            if (useBreath)
            {
                attack = new Breath();
            }
            else
            {
                attack = new Claw();
            }

            Telegraph.Instance.Tell(attack);
            Telegraph.Instance.Tell(new PrintAttack(attack, "Dragon"));

            return(true);
        }
Ejemplo n.º 16
0
    public void SetParent(KnightController knight)
    {
        Owner = knight;
        Owner.Dragons.Add(this);
        State = DragonState.Attached;

        GetComponent<CircleCollider2D>().enabled = false;

        var diff = Owner.transform.localPosition - gameObject.transform.localPosition;
        Walk(Owner.TargetPosition - diff);
    }
Ejemplo n.º 17
0
 void exitDragonState()
 {
     timer        = 5.0f;
     currentState = DragonState.exit;
     stallHealth.GetComponentInParent <Canvas>().enabled = false;
     reticle.GetComponent <SpriteRenderer>().enabled     = false;
     weapon.GetComponent <SpriteRenderer>().enabled      = false;
     tempPos    = this.transform.position;
     tempPos.y += 3.0f;
     GameObject.Find("Stress Button").GetComponent <StressController>().decreaseStressRate();
 }
Ejemplo n.º 18
0
 protected void FixedUpdate()
 {
     if (TimeDamageCount <= 0)
     {
         State = DragonState.run;
     }
     else
     {
         State = DragonState.damage;
     }
     Move();
 }
Ejemplo n.º 19
0
 void Climb()
 {
     RB.velocity = Vector3.zero;
     if (transform.position.y < FL_ClimbHeight)
     {
         transform.Translate(Vector3.up * FL_MoveSpeed / 2 * Time.deltaTime);
     }
     else
     {
         DS_State = DragonState.Hunt;
     }
 }
Ejemplo n.º 20
0
 public void resetDragon()
 {
     this.transform.position = initPosition;
     currentState            = DragonState.dead;
     isTimerRunning          = true;
     timer             = timeDragonDescend;
     dragonHealth      = maxDragonHealth;
     reloadTimer       = maxReloadTime;
     isReloading       = false;
     stallHealth.value = stallHealth.maxValue;
     stallHealth.GetComponentInParent <Canvas>().enabled = false;
     reticle.GetComponent <SpriteRenderer>().enabled     = false;
     weapon.GetComponent <SpriteRenderer>().enabled      = false;
 }
Ejemplo n.º 21
0
    public void SetState(DragonState dragonState)
    {
        if (currentState != null)
        {
            currentState.OnStateExit();
        }

        currentState = dragonState;

        if (currentState != null)
        {
            currentState.OnStateEnter();
        }
    }
Ejemplo n.º 22
0
    public void TakeDamage(int damage, Vector3 location, Controller player)
    {
        // No More Damage after hitting Zero
        // Ignore arrows that don't have damage.
        if ((damage < 1) || (Health < 1))
        {
            return;
        }

        Health            -= damage;
        player.DamageDelt += damage;

        // Death Check
        if (Health <= 0)
        {
            Debug.Log("Dead");
            state                         = DragonState.Dying;
            BreathTimeCounter             = 0;
            BurnLogic.instance.GotLastHit = player;
            Destroy(BurnLogic.instance.CurrentMusic);
            FlameSource.PlayOneShot(DeadSound);
        }

        // Spawn effect based on Damage
        if (damage == 1)
        {
            Instantiate(Star1, location, Quaternion.identity); return;
        }
        if (damage == 2)
        {
            Instantiate(Star2, location, Quaternion.identity); return;
        }
        if (damage >= 3)
        {
            Instantiate(Star3, location, Quaternion.identity); return;
        }
    }
Ejemplo n.º 23
0
    void DoBreathAttack()
    {
        if (Health <= (((float)MaxHealth) * NoAttackUnderPercent))
        {
            // Don't do a breath attack under 1%
            return;
        }
        state             = DragonState.FireBreathing;
        MoveDirection     = Vector3.zero;
        BreathTimeCounter = 0;
        BreathStep        = 0;

        BreathStepList.Clear();
        BreathStepList.Add(true); // Pre Breath
        BreathStepList.Add(true); // Frame 1
        BreathStepList.Add(true); // Frame 2
        BreathStepList.Add(true); // Frame 3
        BreathStepList.Add(true); // Frame 4
        BreathStepList.Add(true); // Frame 5
        BreathStepList.Add(true); // Frame 6
        BreathStepList.Add(true); // Frame 7

        FlameSource.PlayOneShot(FlameAttack, .7f);
    }
Ejemplo n.º 24
0
    void AnimateDying()
    {
        currentSprite      = Dead;
        BreathTimeCounter += Time.fixedDeltaTime;

        if (BreathTimeCounter < 1)
        {
            return;
        }

        float value = BreathTimeCounter - 1;
        float angle = value * (DyingAngle / DyingTime);

        angle = Mathf.Clamp(angle, 0f, DyingAngle);
        Quaternion rot = Quaternion.Euler(angle, 180f, 0);

        gameObject.transform.rotation = rot;

        if (value > DyingTime)
        {
            state = DragonState.Dead;
            BurnLogic.instance.OnGameEnd();
        }
    }
Ejemplo n.º 25
0
    void AnimateFire()
    {
        BreathTimeCounter += Time.fixedDeltaTime;

        if (BreathTimeCounter < 1)
        {
            return;
        }

        // Set Frame 1
        if ((BreathStepList[0]) && (BreathTimeCounter >= 1f))
        {
            BreathStepList[0]  = false;
            currentFlameSprite = Flame1;
            FlameLight1.SetActive(true);
            FlameTrigger1.SetActive(true);
            FlameSpritePlane.SetActive(true);
        }

        // Set Frame 2
        if ((BreathStepList[1]) && (BreathTimeCounter >= 1.2f))
        {
            BreathStepList[1]  = false;
            currentFlameSprite = Flame2;
        }

        // Set Frame 3
        if ((BreathStepList[2]) && (BreathTimeCounter >= 1.4f))
        {
            BreathStepList[2]  = false;
            currentFlameSprite = Flame3;
            FlameLight2.SetActive(true);
            FlameTrigger2.SetActive(true);
        }

        // Set Frame 4
        if ((BreathStepList[3]) && (BreathTimeCounter >= 1.6f))
        {
            BreathStepList[3]  = false;
            currentFlameSprite = Flame4;
            FlameLight1.SetActive(false);
        }

        // Set Frame 5
        if ((BreathStepList[4]) && (BreathTimeCounter >= 1.8f))
        {
            BreathStepList[4]  = false;
            currentFlameSprite = Flame5;
            FlameLight3.SetActive(true);
            FlameTrigger3.SetActive(true);
        }

        // Set Frame 6
        if ((BreathStepList[5]) && (BreathTimeCounter >= 2.0f))
        {
            BreathStepList[5]  = false;
            currentFlameSprite = Flame6;
            FlameLight2.SetActive(false);
        }

        // Set Frame 7
        if ((BreathStepList[6]) && (BreathTimeCounter >= 2.2f))
        {
            BreathStepList[6]  = false;
            currentFlameSprite = Flame7;
        }

        // Done
        if ((BreathStepList[7]) && (BreathTimeCounter >= 2.4f))
        {
            BreathStepList[7]  = false;
            currentFlameSprite = Flame1;
            FlameLight1.SetActive(false);
            FlameLight2.SetActive(false);
            FlameLight3.SetActive(false);
            FlameTrigger1.SetActive(false);
            FlameTrigger2.SetActive(false);
            FlameTrigger3.SetActive(false);
            FlameSpritePlane.SetActive(false);
            state = DragonState.Idle;
        }



        Material[] mats = FameSpriteR.materials;
        mats[0] = currentFlameSprite;
        FameSpriteR.materials = mats;
    }
Ejemplo n.º 26
0
 public override void OnMoveDown()
 {
     MoveDirection = Vector3.back;
     state         = DragonState.Walking;
 }
Ejemplo n.º 27
0
 public override void OnMoveLeft()
 {
     MoveDirection = Vector3.left;
     state         = DragonState.Walking;
 }
Ejemplo n.º 28
0
 // Use this for initialization
 void Start()
 {
     RB       = GetComponent <Rigidbody>();
     DS_State = DragonState.Wake;
 }
Ejemplo n.º 29
0
 public override void OnMoveRight()
 {
     MoveDirection = Vector3.right;
     state         = DragonState.Walking;
 }
Ejemplo n.º 30
0
 public override void OnStopMove()
 {
     MoveDirection = Vector3.zero;
     state         = DragonState.Idle;
 }
Ejemplo n.º 31
0
    private IEnumerator FlyBehaviors()
    {
        if (transform.position.y < 1) // if we're on the ground, take off
        {
            dragon.TakeOff();
            yield return(new WaitForSeconds(5)); // time the animation takes
        }

        if (Random.Range(0, 4) == 2)
        {
            dragon.FlyFlameAttack();
            yield return(new WaitForSeconds(3));
        }

        bool FlyingUp = FaceRandomSkyDirectionAndReturnTrueIfFlyingUp();

        if (FlyingUp)
        {
            dragon.FlyForward();
            float FlyTime      = Random.Range(10, 30);
            float FlyTimeSoFar = 0;

            while (true)
            {
                yield return(new WaitForEndOfFrame());

                transform.position += (transform.forward * FlyForwardSpeed * Time.deltaTime);

                FlyTimeSoFar += Time.deltaTime;
                if (FlyTimeSoFar >= FlyTime)
                {
                    State = DragonState.flying;
                    yield return(null);

                    yield break;
                }
            }
        }
        else
        {
            float TimeGliding = 0;
            dragon.FlyGlide();
            while (true)
            {
                yield return(new WaitForEndOfFrame());

                transform.position += (transform.forward * FlyDownSpeed * Time.deltaTime);

                TimeGliding += Time.deltaTime;
                if (TimeGliding > 3f) // time the animation takes
                {
                    dragon.FlyGlide();
                    TimeGliding = 0;
                }

                if (transform.position.y <= HeightToStartLandingAt)
                {
                    transform.position         = new Vector3(transform.position.x, 0, transform.position.z);
                    transform.localEulerAngles = new Vector3(0, transform.localEulerAngles.y, transform.localEulerAngles.z);
                    dragon.Land();
                    yield return(new WaitForSeconds(4)); // time the animation takes

                    State = (DragonState)Random.Range(0, 5);
                    yield return(null);

                    yield break; // is this needed to stop the routine??
                }
            }
        }
    }
Ejemplo n.º 32
0
 public override void OnMoveUp()
 {
     MoveDirection = Vector3.forward;
     state         = DragonState.Walking;
 }
Ejemplo n.º 33
0
 public void Release()
 {
     State = DragonState.InPaddock;
 }