Пример #1
0
    public override void SecondaryAbility()
    {
        GameObject fball = Instantiate("DaenerysFireball");

        fball.transform.SetPosition(GetSecondaryPosition(curr_position));
        fball.transform.SetRotation(player.transform.GetRotation());

        Fireball fballscript = fball.GetComponent <Fireball>();

        fballscript.vfront              = curr_forward;
        fballscript.fireball_particles  = daenerys_fireball_particles;
        fballscript.fireball_particles2 = daenerys_fireball_particles2;
        fballscript.fireball_particles3 = daenerys_fireball_particles3;
        fballscript.fireball_particles4 = daenerys_fireball_particles4;
        fballscript.SetDamage(sec_ability_dmg);

        GameObject coll_object = PhysX.RayCast(curr_position, curr_forward, 254.0f);

        if (coll_object != null)
        {
            coll_object.GetTag();
            if (coll_object.CompareTag("Enemy"))
            {
                fballscript.vfront = GetSecondaryForwardToEnemy(fball.transform.GetPosition(), coll_object.transform.GetPosition());
            }
        }

        // Decrease stamina -----------
        DecreaseStamina(sec_ability_cost);
    }
Пример #2
0
    public override void ControlCharacter()
    {
        //Debug.Log(state, Department.PLAYER, Color.PINK);
        curr_hp = health.GetCurrentHealth();

        // First check if you are alive
        if (curr_hp > 0)
        {
            //Check play breath audio
            base.CheckHealth(curr_hp, max_hp, "DaenerysBreathing");

            // Check if player is moving to block attacks/abilities
            if (!movement.IsMoving())
            {
                /* Player is alive */

                switch (state)
                {
                case State.IDLE:
                {
                    //Check For Input + It has to check if she's moving to block attack (¿?)
                    CheckAttack();
                    break;
                }

                case State.ATTACKING:
                {
                    AttackLeftTimer += Time.deltaTime;
                    //Check for end of the Attack animation
                    if (anim_controller.IsAnimationStopped("Idle"))
                    {
                        if (anim_controller.IsAnimOverXTime(0.6f) && play_audio_roar)
                        {
                            GameObject flamethr = Instantiate("CorrectDaenerysFireBreath");

                            flamethr.transform.SetPosition(GetFlameBreathPosition(curr_position));
                            flamethr.transform.SetRotation(flamethr.transform.GetRotation());

                            Fireball fballscript = flamethr.GetComponent <Fireball>();
                            fballscript.vfront = curr_forward;
                            fballscript.SetDamage(left_ability_dmg);
                            fballscript.SetDistance(left_ability_distance);

                            GameObject coll_object = PhysX.RayCast(curr_position, curr_forward, 254.0f);
                            if (coll_object != null)
                            {
                                coll_object.GetTag();
                                if (coll_object.CompareTag("Enemy"))
                                {
                                    fballscript.vfront = GetSecondaryForwardToEnemy(flamethr.transform.GetPosition(), coll_object.transform.GetPosition());
                                }
                            }
                            PlayFx("DaenerysDragonRoar");
                            play_audio_roar = false;
                        }

                        if (anim_controller.IsAnimationStopped("AttackLeft"))
                        {
                            state = State.IDLE;
                        }
                    }
                    else if (play_audio_roar == false)
                    {
                        state = State.IDLE;
                    }
                    if (AttackLeftTimer >= 1.35f)
                    {
                        state = State.IDLE;
                    }
                    break;
                }

                case State.FIRE_WALL:
                {
                    //Check for end of the Attack animation
                    if (anim_controller.IsAnimationStopped("Idle"))
                    {
                        if (set_fire_wall == false && anim_controller.IsAnimOverXTime(0.3f))
                        {
                            int tile_x, tile_y;
                            movement.GetPlayerPos(out tile_x, out tile_y);
                            Vector3 player_pos = player.GetComponent <Transform>().GetPosition();
                            player_pos.y -= 9.1f;
                            MovementController.Direction direction = movement.curr_dir;
                            switch (direction)
                            {
                            case MovementController.Direction.NORTH:
                            {
                                tile_y       -= 1;
                                player_pos.z -= 25.4f;
                                break;
                            }

                            case MovementController.Direction.SOUTH:
                            {
                                tile_y       += 1;
                                player_pos.z += 25.4f;
                                break;
                            }

                            case MovementController.Direction.EAST:
                            {
                                tile_x       += 1;
                                player_pos.x += 25.4f;
                                break;
                            }

                            case MovementController.Direction.WEST:
                            {
                                tile_x       -= 1;
                                player_pos.x -= 25.4f;
                                break;
                            }

                            default:
                            {
                                break;
                            }
                            }
                            //GET TILE POS!
                            GameObject fire_wall = Instantiate("FireWall");
                            fire_wall.transform.SetPosition(player_pos);
                            FireWall fire_wall_controller = fire_wall.GetComponent <FireWall>();
                            fire_wall_controller.SetTiles(tile_x, tile_y);
                            fire_wall_controller.SetDamage(right_ability_dmg);
                            set_fire_wall = true;
                        }

                        if (anim_controller.IsAnimOverXTime(0.8f))
                        {
                            state = State.IDLE;
                        }
                    }
                    else if (set_fire_wall == true && IsAnimationStopped("AttackRight"))
                    {
                        state = State.IDLE;
                    }
                    break;
                }

                case State.HIT:
                {
                    //Check for end of the Attack animation
                    if (anim_controller.IsAnimationStopped("Hit"))
                    {
                        state = State.IDLE;
                    }
                    break;
                }

                case State.DEAD:
                {
                    break;
                }

                default:
                {
                    break;
                }
                }
            }
        }
    }