/// <summary>
        ///   Initializes a new instance of the <see cref="ShelledEnemyComponent"
        ///   /> sprite.
        /// </summary>
        /// <param name="owner">The sprite that owns this component.</param>
        /// <param name="walkingVelocity">
        ///   The horizontal velocity at which the owner will walk.
        /// </param>
        /// <param name="shellSpinningVelocity">
        ///   The horizontal velocity at which the owner will spin.
        /// </param>
        /// <param name="framesFromShellToEmerging">
        ///   The number of frames between entering the Shell state and entering
        ///   the Emerging state.
        /// </param>
        /// <param name="framesFromEmergingToWalking">
        ///   The number of frames between entering the Emerging state and
        ///   entering the Walking state.
        /// </param>
        public ShelledEnemyComponent(Sprite owner, float walkingVelocity, float shellSpinningVelocity, int framesFromShellToEmerging, int framesFromEmergingToWalking)
        {
            WalkerComponent walker = owner.GetComponent<WalkerComponent>();
            DamageComponent damage = owner.GetComponent<DamageComponent>();
            ChasePlayerComponent chasePlayer = owner.GetComponent<ChasePlayerComponent>();

            if (walker == null || damage == null || chasePlayer == null)
            {
                throw new ArgumentException("This component requires its owner to have WalkerComponent, DamageComponent, and ChasePlayerComponent instances before constructing this ShelledEnemyComponent.");
            }

            IsActive = true;
            Owner = owner;
            spriteWalker = walker;
            spriteDamage = damage;
            spriteChasePlayer = chasePlayer;

            behavior = ShelledEnemyBehavior.DontTurnOnCliffs;
            state = ShelledEnemyState.Walking;

            this.walkingVelocity = walkingVelocity;
            this.shellSpinningVelocity = shellSpinningVelocity;
            this.framesFromShellToEmerging = framesFromShellToEmerging;
            this.framesFromEmergingToWalking = framesFromEmergingToWalking;

            spriteWalker.CurrentVelocity = walkingVelocity;
        }
Example #2
0
        /// <summary>
        /// Removes a body part from the container, including its sprite and Net ID
        /// </summary>
        /// <param name="implant">Body Part to remove</param>
        public void RemoveSpritesNID(BodyPart implant)
        {
            foreach (var BodyPart in implant.GetAllBodyPartsAndItself(new List <BodyPart>()))
            {
                if (ImplantBaseSpritesDictionary.ContainsKey(BodyPart) == false)
                {
                    continue;
                }

                var oldone = ImplantBaseSpritesDictionary[BodyPart];
                foreach (var Sprite in oldone)
                {
                    InternalNetIDs.Remove(Sprite.GetComponent <NetworkIdentity>().netId);
                    if (BodyPart.IsSurface)
                    {
                        PlayerSprites.SurfaceSprite.Remove(Sprite);
                    }

                    BodyPart.RelatedPresentSprites.Remove(Sprite);
                    PlayerSprites.Addedbodypart.Remove(Sprite);
                    Destroy(Sprite.gameObject);
                }
                RootBodyPartController.RequestUpdate(this);
                ImplantBaseSpritesDictionary.Remove(BodyPart);
            }
        }
Example #3
0
        /// <summary>
        ///   Performs damage to sprite with a <see cref="HealthComponent" /> instance.
        /// </summary>
        /// <param name="sprite">The sprite to damage.</param>
        /// <param name="damageType">The type of damage to perform.</param>
        /// <param name="hpAmount">How many hit points to damage for.</param>
        public void PerformDamage(Sprite sprite, string damageType, int hpAmount)
        {
            if (sprite == null) { throw new ArgumentNullException(nameof(sprite), "The provided sprite was null."); }
            if (string.IsNullOrEmpty(damageType)) { throw new ArgumentNullException(nameof(damageType), "The provided damage type was null or empty."); }
            if (hpAmount <= 0) { throw new ArgumentOutOfRangeException(nameof(hpAmount), $"The provided HP amount of {hpAmount} is out of range; it must be positive."); }

            HealthComponent spriteHealthComponent = sprite.GetComponent<HealthComponent>();
            if (spriteHealthComponent != null)
            {
                spriteHealthComponent.Damage(hpAmount, damageType);
            }
        }
Example #4
0
    private void Start()
    {
        gameOverImage = GameObject.Find("Game Over");
        if (gameOverImage != null)
        {
            gameOverImage.SetActive(false);
        }

        heartArray = GameObject.FindGameObjectsWithTag("UIHeart").Select((heart) => heart.GetComponent <Image>()).ToList <Image>();
        heartArray = heartArray.OrderBy((x) => x.name).ToList();

        // Trigger heart UI to draw
        CurrentHealth = currenthealth;
    }
 // this will probably be something like FatalTile at some point
 // ...imagine core tile methods here...
 public void OnSpriteCollision(Sprite sprite, Vector2 intersectDepth)
 {
     DamageComponent dmg = sprite.GetComponent<DamageComponent>();
     if (dmg != null) { dmg.Kill("lava", "vaporize"); }
 }
Example #6
0
 public void DisplaySpriteInfo(Sprite sprite)
 {
     spriteName.text    = sprite.gameObject.name;
     spriteImage.sprite = sprite.GetComponent <SpriteRenderer>().sprite;
 }
Example #7
0
    // Update is called once per frame
    void Update()
    {
        if (_health.HP <= 0)
        {
            _dieFlag = true;
            Sprite.GetComponent <Animator>().SetTrigger("Dying");
            ChangeState(new EnemyDie());
            return;
        }
        var wsize = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height));

        if (GetComponent <Character>().enabled == false && (transform.position.x > -wsize.x && transform.position.x < wsize.x))
        {
            GetComponent <Character>().enabled = true;
        }

        if (Time.time > _chgTargetTime + unchangeable_time)
        {
            _targetChangeable = true;
        }
        //ステートの更新
        _stateMachine.Update();
        if (_dieFlag)
        {
            return;
        }
        if (_health.ReceiveDmgFlag)
        {
            //攻撃された時、攻撃した相手を狙う
            if (_health.DmgOrigin.transform.parent.tag == "Player")
            {
                if (_tmpPlayer != null)
                {
                    _tmpPlayer.GetComponent <TargetNum>().TargettedNum--;
                }
                _tmpPlayer = _health.DmgOrigin;

                _tmpPlayer.GetComponent <TargetNum>().TargettedNum++;
                _isTargeting      = true;
                _targetChangeable = false;
                _chgTargetTime    = Time.time;
            }
            if (_health.HP > 0)
            {
                if (!IsBoss && !_unstunnable)
                {
                    ChangeState(new EnemyGetHit());
                    return;
                }
            }
        }

        //画像の回転
        if (_isTargeting && !_sprite.GetComponent <Animator>().GetCurrentAnimatorStateInfo(0).IsName("Attack") &&
            !_sprite.GetComponent <Animator>().GetCurrentAnimatorStateInfo(0).IsName("Attack 2"))
        {
            if (!_isBoss || !IsRanged)
            {
                if (!_isRetreat)
                {
                    if (GetMoveDir(CurrentDest).x < 0)
                    {
                        transform.localRotation = Quaternion.Euler(0f, 180f, 0f);
                    }
                    else
                    {
                        transform.localRotation = Quaternion.Euler(0f, 0f, 0f);
                    }
                }
                else
                {
                    if (GetMoveDir(CurrentDest).x < 0)
                    {
                        transform.localRotation = Quaternion.Euler(0f, 0f, 0f);
                    }
                    else
                    {
                        transform.localRotation = Quaternion.Euler(0f, 180f, 0f);
                    }
                }
            }
        }
        //上から生成し、落下させる
        if (_isJumping)
        {
            if (transform.Find("Sprite").transform.position.y - _shadowOffset - 0.2f > transform.Find("Shadow").transform.position.y)
            {
                if (transform.Find("Sprite").GetComponent <SpriteRenderer>().sortingOrder < 0)
                {
                    transform.Find("Sprite").GetComponent <SpriteRenderer>().sortingOrder = 0;
                }
                transform.Find("Sprite").transform.position += transform.TransformDirection(0, -0.2f, 0.0f);
                //何もしない状態
                ChangeState(new EnemySpawnDelay());
            }
            else
            {
                transform.Find("Sprite").transform.position = new Vector3(transform.Find("Sprite").transform.position.x,
                                                                          transform.Find("Shadow").transform.position.y + _shadowOffset, 0f);
                _isJumping = false;
            }
        }
    }
 private void HandleSpriteCollisionWhileShellSpinning(Sprite sprite, Vector2 resolutionDistance)
 {
     if (sprite.IsPlayer)
     {
         if (Sprite.IsStomping(sprite, Owner))
         {
             GoToShell();
         }
         else
         {
             spriteDamage.PerformDamage(sprite, SpriteDamageTypes.ShellSpinning, 1);
         }
     }
     else
     {
         var shelledEnemy = sprite.GetComponent<ShelledEnemyComponent>();
         if (shelledEnemy != null && shelledEnemy.State == ShelledEnemyState.ShellSpinning)
         {
             spriteDamage.PerformDamage(sprite, SpriteDamageTypes.ShellSpinning, 1);
             spriteDamage.PerformDamage(Owner, SpriteDamageTypes.ShellSpinning, 1);
         }
         else
         {
             spriteDamage.PerformDamage(sprite, SpriteDamageTypes.ShellSpinning, 1);
         }
     }
 }
Example #9
0
    /**
     * EventTrigger: when reset button is pressed
     **/
    public void OnPressReset()
    {
        /** 1. play the reset sound **/
        GameObject  audioSourceObject = GameObject.FindGameObjectWithTag("audio-bell");
        AudioSource audioSource       = audioSourceObject.GetComponent <AudioSource> ();

        audioSource.clip = reset_button_sound;
        audioSource.Play();

        /** 2. get all red, green and blue numbers and turn off all their lights **/
        Transform Sa      = GameObject.Find("Sa").transform;
        Transform Puluh   = GameObject.Find("Puluh").transform;
        int       numbers = Sa.childCount - 2;

        for (int i = 0; i < numbers; i++)
        {
            Transform sa_number    = Sa.GetChild(i);
            Transform puluh_number = Puluh.GetChild(i);

            MeshRenderer green_lightbulb = sa_number.GetChild(1).gameObject.GetComponent <MeshRenderer>();
            MeshRenderer red_lightbulb   = sa_number.GetChild(2).gameObject.GetComponent <MeshRenderer>();
            MeshRenderer blue_lightbulb  = puluh_number.GetChild(1).gameObject.GetComponent <MeshRenderer>();

            green_lightbulb.material.CopyPropertiesFromMaterial(white_bulb);
            red_lightbulb.material.CopyPropertiesFromMaterial(white_bulb);
            blue_lightbulb.material.CopyPropertiesFromMaterial(white_bulb);
        }

        /** 3. special for 10 cannot be included by above because different layouts **/
        MeshRenderer sa_ten = Sa.GetChild(9).GetChild(1).gameObject.GetComponent <MeshRenderer>();

        sa_ten.material.CopyPropertiesFromMaterial(white_bulb);

        MeshRenderer puluh_ten = Puluh.GetChild(9).GetChild(1).gameObject.GetComponent <MeshRenderer>();

        puluh_ten.material.CopyPropertiesFromMaterial(white_bulb);

        /** 4. reset all the numbers **/
        total_number = 0;
        puluh_value  = 0;
        sa_value     = 0;
        green_value  = 0;
        red_value    = 0;

        // bentuk lazim
        Text bentuk_lazim_blue  = GameObject.FindGameObjectWithTag("bentuk-lazim").transform.Find("Blue").GetComponent <Text>();
        Text bentuk_lazim_green = GameObject.FindGameObjectWithTag("bentuk-lazim").transform.Find("Green").GetComponent <Text>();
        Text bentuk_lazim_red   = GameObject.FindGameObjectWithTag("bentuk-lazim").transform.Find("Red").GetComponent <Text>();
        Text bentuk_lazim_total = GameObject.FindGameObjectWithTag("bentuk-lazim").transform.Find("Total").GetComponent <Text>();

        bentuk_lazim_blue.text  = puluh_value.ToString();
        bentuk_lazim_green.text = green_value.ToString();
        bentuk_lazim_red.text   = red_value.ToString();
        bentuk_lazim_total.text = total_number.ToString();

        // bentuk biasa
        Text bentuk_biasa_blue  = GameObject.FindGameObjectWithTag("bentuk-biasa").transform.Find("Blue").GetComponent <Text>();
        Text bentuk_biasa_green = GameObject.FindGameObjectWithTag("bentuk-biasa").transform.Find("Green").GetComponent <Text>();
        Text bentuk_biasa_red   = GameObject.FindGameObjectWithTag("bentuk-biasa").transform.Find("Red").GetComponent <Text>();
        Text bentuk_biasa_total = GameObject.FindGameObjectWithTag("bentuk-biasa").transform.Find("Total").GetComponent <Text>();

        bentuk_biasa_blue.text  = puluh_value.ToString();
        bentuk_biasa_green.text = green_value.ToString();
        bentuk_biasa_red.text   = red_value.ToString();
        bentuk_biasa_total.text = total_number.ToString();

        /** 5. re-enable the buttons (when the number reach 100, they turn white) **/
        GameObject[] action_buttons = GameObject.FindGameObjectsWithTag("action-up");
        foreach (GameObject action_button in action_buttons)
        {
            action_button.GetComponent <Button> ().enabled = true;
        }
    }