Пример #1
0
    protected override void OnStart()
    {
        base.OnStart();

        EntityRender tickingRender = GetTickingRenderer();

        if (tickingRender != null)
        {
            tickingRender.SetFrameInfo("Main", 0, 0, 32, 32);
            tickingRender.SetCurrentGroup("Main");
        }

        EntityRender explosionRender = GetExplodeRenderer();

        if (explosionRender != null)
        {
            for (int i = 0; i < 12; i++)
            {
                explosionRender.SetFrameInfo("Explode", i * 96, 0, 96, 96);
            }

            for (int i = 0; i < 11; i++)
            {
                explosionRender.LinkNextFrame("Explode", i, i + 1);
            }

            explosionRender.SetGlobalFrameDelay(0.15f);
        }

        StartCoroutine(WaitAndExplode());
    }
Пример #2
0
    protected override void OnAwake()
    {
        base.OnAwake();

        m_er         = GetComponent <EntityRender>();
        CurrentState = State.E_Idle;
        m_time       = 0;
    }
Пример #3
0
    protected override void OnAwake()
    {
        base.OnAwake();
        Inventory  = new Inventory(this);
        Experience = new Experience();

        m_entityRender  = GetComponent <EntityRender>();
        HealthComponent = GetComponent <HealthComponent>();
    }
Пример #4
0
    public IEnumerator Explode()
    {
        gameObject.transform.localScale *= m_explosionRadius;

        // Find all entities near the bomb within a certain radius
        foreach (var entity in this.EntitiesWithinRadius(m_explosionRadius))
        {
            // TODO: Shameless copied from SwordAttack - Need to be merged into generic code
            Enemy enemy = entity as Enemy;
            if (enemy && (!m_singleHitPerEnemy || !m_hitEntities.ContainsKey(enemy)))
            {
                HealthComponent healthComponent = enemy.HealthComponent;
                if (healthComponent.CanReceiveDamage())
                {
                    // simple damage formula for now
                    int damage = GameManager.Instance.MainPlayer.Experience.Level;

                    // check if critical hit !
                    if (RandomManager.Probability(0.10f))
                    {
                        damage *= 3;
                    }

                    healthComponent.ReceiveDamage(damage);
                    m_hitEntities.Add(enemy, true);

                    Vector2 relativeDir = enemy.transform.position - this.transform.position;
                    enemy.KnockBack(relativeDir.normalized, 3f, 0.05f);
                }
            }
        }

        EntityRender tickingRenderer = GetTickingRenderer();

        tickingRenderer.enabled = false;

        EntityRender explodeRenderer = GetExplodeRenderer();

        explodeRenderer.SetCurrentGroup("Explode");

        AudioManager.PlaySfx(m_explodeSfx);
        yield return(new WaitForSeconds(m_explodeSfx.length));
    }
Пример #5
0
    private GameObject SpawnGameObjectAt(Vector2 origin, GameObject prefab)
    {
        if (prefab == null)
        {
            UnityEngine.Debug.Log("Can't SpawnAttack since m_attackPrefab is null");
            return(null);
        }

        GameObject obj = Instantiate(prefab);

        if (obj == null)
        {
            return(null);
        }

        obj.transform.position = origin;

        EntityRender entityRender = obj.GetComponent <EntityRender>();

        entityRender.SetCurrentGroup("Main");

        return(obj);
    }