Esempio n. 1
0
    private ExploreCat Hit(GameObject other)
    {
        hasHit = true;

        if (owner.target != null && other == owner.target.gameObject)
        {
            return(owner.target);
        }
        //else, in case it hit something like another projectile or a different cat other than the target
        else if (other.gameObject.layer == getLayer(!owner.owner.enemy))
        {
            Debug.Log(owner.cat.Name + "'s projectile hit an enemy projectile");
            if (owner.owner.enemy)
            {
                owner.getRigidBody2D().AddForce(Vector2.down * UnityEngine.Random.Range(1, 2), ForceMode2D.Impulse);
                owner.getRigidBody2D().AddForce(Vector2.right * (owner.realizedStats.speed / 2), ForceMode2D.Impulse);
            }
            else
            {
                owner.getRigidBody2D().AddForce(Vector2.up * UnityEngine.Random.Range(1, 2), ForceMode2D.Impulse);
                owner.getRigidBody2D().AddForce(Vector2.left * (owner.realizedStats.speed / 2), ForceMode2D.Impulse);
            }
        }
        else
        {
            ExploreCat otherCat = other.GetComponent <ExploreCat>();
            if (otherCat != null && otherCat.currentHealth > 0)
            {
                return(otherCat);
            }
        }
        return(null);
    }
Esempio n. 2
0
    private void enemyAction(ActionType action, ExploreCat cat)
    {
        if (cat.currentHealth <= 0)
        {
            cat.onHit(AttackType.None, cat);
            return;
        }
        Debug.Log("enemy action!");
        Dialogue[] D = DataUtils.defaultReaction(action,
                                                 //random user Cat
                                                 cat.target.cat);
        for (int i = 0; i < D.Length; i++)
        {
            if (D[i].speaker == CatType.none)
            {
                D[i].speaker = cat.cat.catType;
            }
            else
            {
                D[i].speaker = controller.userPlayer.allCats[0].cat.catType;
            }
        }
        ExploreCat user = controller.userPlayer.allCats[0];

        controller.exploreStory.InitStory(D, user, controller.enemyPlayer.allCats);
        controller.exploreStory.Finished += () =>
        {
            cat.onHit(AttackType.None, cat);
            ExploreChoice.defaultResponse(action, cat);
        };
    }
Esempio n. 3
0
 public void Init(ExploreCat owner)
 {
     this.timeToLive       = 0.75f;
     this.owner            = owner;
     RotateTo              = new Vector3(0, owner.transform.eulerAngles.y, 30);
     transform.eulerAngles = owner.transform.eulerAngles;
 }
Esempio n. 4
0
    public IEnumerator attackEnemy()
    {
        if (!enabled || target == null)
        {
            yield break;
        }
        ExploreCat targ  = target;
        AttackType aType = cat.getCatAsset().attackType;

        Debug.Log(cat.Name + " ATTACK " + target.cat.Name);
        if (aType == AttackType.Melee)
        {
            this.getAnimator().SetTrigger("swipe");
        }
        else if (aType == AttackType.Ranged)
        {
            this.getAnimator().SetTrigger("throw");
        }
        getAttackObj(targ, filterDamage(this.realizedStats.attackDamage, targ, aType));

        //wait for animation
        yield return(new WaitForSeconds(0.75f));

        cAttack.gameObject.SetActive(true);
        if (aType == AttackType.Melee)
        {
            cAttack.transform.position = targ.transform.position;
            ((Melee)cAttack).Target(targ);
        }
        else if (aType == AttackType.Ranged)
        {
            ((Projectile)cAttack).Target(targ);
        }
    }
Esempio n. 5
0
    // IEnumerator changeZ()
    // {
    //     WaitForSeconds s = new WaitForSeconds(0.1f);
    //     Vector3 one = transform.position, two;
    //     yield return new WaitForSeconds(0.2f);
    //     two = transform.position;
    //     do
    //     {
    //         one = two;
    //         setPositionZ(one);
    //         yield return s;
    //         two = transform.position;
    //     } while (one.y != two.y);
    // }
    private IEnumerator initSideEffect()
    {
        yield return(null);

        target = null;
        onEffect(sideEffect, this);
    }
Esempio n. 6
0
    private float filterDamage(float damage, ExploreCat enemyCat, AttackType t)
    {
        if (t == AttackType.Melee && !flying && enemyCat.flying)
        {
            Debug.Log("miss because " + cat.Name + " isn't flying and " + enemyCat.cat.Name + " is");
            return(0);
        }
        //if speed more than enemy's, higher likelihood of enemy missing
        float multiply;

        if (t == AttackType.Melee)
        {
            multiply = 15;
        }
        else
        {
            multiply = 3;
        }
        if (UnityEngine.Random.value > (realizedStats.speed / enemyCat.realizedStats.speed) - (2f / (realizedStats.speed * multiply)))
        {
            Debug.Log("Miss! With " + cat.Name + " having speed " + realizedStats.speed + " and enemy " + enemyCat.cat.Name + " having speed " + enemyCat.realizedStats.speed);
            return(0);
        }
        return(damage);
    }
Esempio n. 7
0
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();
        ExploreCat cat = (ExploreCat)target;

        // type = (CatType)EditorGUILayout.EnumPopup(type);
        if (GUILayout.Button("LOVE PARTICLE"))
        {
            cat.loveParticles();
        }
        if (GUILayout.Button("MAGIC PARTICLE"))
        {
            cat.Magic();
        }
        if (GUILayout.Button("FADE"))
        {
            cat.FadeAndAvoidHit();
        }
        if (GUILayout.Button("FLY"))
        {
            cat.FlyAndAvoidHit();
        }
        if (GUILayout.Button("SET TEXTURE"))
        {
            cat.sideEffect = new SideEffect(Fx.Scared, SecondaryType.Arrow);
            cat.setEffect();
        }
    }
Esempio n. 8
0
    public void OnHit(AttackType a, ExploreCat attacker)
    {
        playSound(a);
        attacker.Disable();
        if (attacker.owner.enemy)
        {
            ExploreCat user = exploreChoice.getCurrentUser();
            if (user != null && user.enabled)
            {
                user.Disable();
            }
        }
        else
        {
            ExploreCat e = exploreChoice.getCurrentEnemy();
            if (e != null)
            {
                e.Disable();
            }
        }

        Debug.Log("try to set active true");
        if (!Finished() && !exploreChoice.gameObject.activeSelf)
        {
            Debug.Log("set active true");
            StartCoroutine(enableChoice());
        }
    }
Esempio n. 9
0
 public void Target(ExploreCat targ)
 {
     transform.position = new Vector3(owner.transform.position.x + 0.3f, owner.transform.position.y + 0.2f, 0);
     hasHit             = false;
     setMiss();
     setup(targ);
 }
Esempio n. 10
0
    private Vector2 calculateArc(ExploreCat targ)
    {
        float v = speed + 5;

        Debug.Log("Projectile v: " + v);
        float x   = targ.transform.position.x - transform.position.x;
        float y   = targ.transform.position.y - transform.position.y;
        float g   = getRigidBody2D().gravityScale * 10f;
        float dis = Mathf.Pow(v, 4) - 2 * v * v * g * y - g * g * x * x;

        if (dis > 0)
        {
            float plusminus = Mathf.Sqrt(dis);
            float dividend  = v * v - plusminus;
            //For once we actually don't want atan2 - it'd mess with our results.
            float theta = Mathf.Atan(dividend / (g * x));
            //Instead we just flip the vector if the target is on the left
            return(new Vector2((x > 0 ? 1 : -1) * v * Mathf.Cos(theta),
                               (x > 0 ? 1 : -1) * v * Mathf.Sin(theta)));
        }
        else
        {
            Debug.Log("dir is less than 0");
            return(Vector2.one * v);
        }
    }
Esempio n. 11
0
    public void Disable()
    {
        Debug.Log(" trying to disable " + cat.Name);

        if (!enabled)
        {
            Debug.Log("already disabled " + cat.Name);
            return;
        }
        // StartCoroutine(changeZ());
        if (IAttack != null)
        {
            Debug.Log("STOP ATTACK " + cat.Name);
            StopCoroutine(IAttack);
        }
        if (cAttack != null)
        {
            cAttack.setOnHit(false);
        }
        if (!owner.enemy)
        {
            target = null;
        }
        stopWalk();
        blockedTime = 0;
        enabled     = false;
    }
Esempio n. 12
0
 private void SetActionButton(Button button, ExploreCat cat, ActionType act)
 {
     button.onClick.AddListener(() =>
     {
         cat.useAction();
     });
     button.transform.Find("text").GetComponent <TextMeshProUGUI>().text = act.ToString();
     cat.Action = button;
 }
Esempio n. 13
0
 public void Init(ExploreCat owner, float speed, SecondaryType sprite)
 {
     this.owner  = owner;
     this.speed  = speed;
     this.sprite = sprite;
     if (sprite != SecondaryType.Music)
     {
         transform.rotation = owner.transform.rotation;
     }
     gameObject.layer = getLayer(owner.owner.enemy);
 }
Esempio n. 14
0
    private void stage4(ExploreCat user, ExploreCat enemy)
    {
        gameObject.SetActive(true);
        user.onHit  = controller.OnHit;
        enemy.onHit = controller.OnHit;

        flee.onClick.AddListener(destroyThis);
        fight.onClick.AddListener(finish);
        action.onClick.AddListener(finish);
        ContinueTutorial();
    }
Esempio n. 15
0
    public void updateHealthBar(ExploreCat cat)
    {
        // 212 is max width for the bar
        float oldW = healthBar.rectTransform.sizeDelta.x;
        float newW = 212 * (cat.currentHealth / cat.realizedStats.maxHealth);

        LeanTween.value(gameObject, (float val) =>
        {
            healthBar.rectTransform.sizeDelta = new Vector2(val, healthBar.rectTransform.sizeDelta.y);
        }, oldW, newW, Mathf.Clamp(Mathf.Abs(oldW - newW) * 0.05f, 0, 2.5f));
    }
Esempio n. 16
0
 //object pooling
 public void getAttackObj(ExploreCat enemyCat, float damage)
 {
     if (attackObjs.Count == 0)
     {
         CreateAttackObject(enemyCat, damage);
         return;
     }
     cAttack = attackObjs.Dequeue();
     cAttack.setOnHit(true);
     cAttack.setDamage(damage);
 }
Esempio n. 17
0
 private void alwaysResponse(ActionType action, ExploreCat cat)
 {
     switch (action)
     {
     case ActionType.Love:
     case ActionType.Comfort:
     case ActionType.Hug:
         cat.loveParticles();
         break;
     }
 }
Esempio n. 18
0
 private void OnTriggerEnter2D(Collider2D other)
 {
     if (canHitTrig(other.gameObject))
     {
         ExploreCat cat = Hit(other.gameObject);
         if (cat != null)
         {
             cat.hitByObj(damage, this);
         }
         onHit();
     }
 }
Esempio n. 19
0
    private void setup(ExploreCat targ)
    {
        Vector2 targetPos = new Vector2(targ.getRigidBody2D().position.x, targ.getRigidBody2D().position.y + 0.5f);
        Vector2 dir       = targetPos - getRigidBody2D().position;

        dir.Normalize();
        dir *= this.speed;
        switch (sprite)
        {
        case SecondaryType.Star:
        case SecondaryType.Gem:
        case SecondaryType.Nebula:
        case SecondaryType.Snowflake:
        case SecondaryType.Rose:
            //rotate motion
            getRigidBody2D().angularVelocity = speed + 50f;
            getRigidBody2D().velocity        = dir;
            getRigidBody2D().gravityScale    = 0;
            break;

        case SecondaryType.Bubbles:
        case SecondaryType.Butterfly:
        case SecondaryType.Leaf:
        case SecondaryType.Rainbow:

            // direct hit
            getRigidBody2D().gravityScale = 0;
            getRigidBody2D().velocity     = dir;
            transform.localEulerAngles    = Vector3.zero;
            break;

        case SecondaryType.Heart:
        case SecondaryType.Music:
        case SecondaryType.Arrow:
            getRigidBody2D().gravityScale = 0;
            getRigidBody2D().velocity     = dir;
            rigidBody.constraints         = RigidbodyConstraints2D.FreezeRotation;
            break;

        case SecondaryType.Bat:
        case SecondaryType.Skull:
            getRigidBody2D().gravityScale = UnityEngine.Random.Range(0.7f, 0.9f);
            getRigidBody2D().velocity     = calculateArc(targ);
            rigidBody.constraints         = RigidbodyConstraints2D.FreezeRotation;
            break;

        default:
            //arc motion -> simulate gravity?
            getRigidBody2D().gravityScale = UnityEngine.Random.Range(0.7f, 0.9f);
            getRigidBody2D().velocity     = calculateArc(targ);
            break;
        }
    }
Esempio n. 20
0
    public ExploreCat addCat(Cat cat, int i, GameObject catPrefab, Vector2 offset, Vector2 pos, Vector3 rot, float scale, HealthBar hb)
    {
        GameObject catGameObject = Instantiate(catPrefab);
        ExploreCat exploreCat    = catGameObject.AddComponent <ExploreCat>();

        exploreCat.transform.position    = pos;
        exploreCat.transform.position   += new Vector3(offset.x, offset.y, 0);
        exploreCat.transform.eulerAngles = rot;
        exploreCat.transform.localScale  = new Vector3(scale, scale, scale);

        exploreCat.init(cat, this, i, hb);
        return(exploreCat);
    }
Esempio n. 21
0
    private void setCatMaterial(ExploreCat cat, Shader catSprite)
    {
        Material newMaterial = new Material(catSprite);

        SpriteRenderer[] spriteRenderers = cat.transform.GetChild(0).GetComponentsInChildren <SpriteRenderer>();

        foreach (SpriteRenderer spriteRenderer in spriteRenderers)
        {
            spriteRenderer.material = newMaterial;
        }
        cat.spriteMaterial = newMaterial;
        cat.onEffect       = sideEffectReact;
    }
Esempio n. 22
0
    private ExploreCat getExploreCat(CatType cat)
    {
        if (cat == CatType.none)
        {
            return(userCatRef);
        }
        ExploreCat cat2 = enemyCatRefs.FirstOrDefault(x => x.cat.catType == cat);

        if (cat2 == null)
        {
            return(userCatRef);
        }
        return(cat2);
    }
Esempio n. 23
0
    private void OnCollisionEnter2D(Collision2D other)
    {
        if (canHitCol(other.collider))
        {
            ExploreCat cat = Hit(other.gameObject);
            if (cat != null)
            {
                particleEffect();
                cat.hitByObj(damage, this);
            }
            GetComponent <CircleCollider2D>().isTrigger = true;

            onHit();
        }
    }
Esempio n. 24
0
    public void setFight(ExploreCat enemy)
    {
        if (getCurrentUser().target != null)
        {
            Debug.Log("nope!");
            GameControl.control.getSoundManager().playError();
            return;
        }
        Debug.Log("loading..");
        selector.transform.SetParent(enemy.transform, false);

        startFight(enemy);
        Camera.main.GetComponent <Physics2DRaycaster>().enabled = false;
        GameControl.control.getSoundManager().playButton();
    }
Esempio n. 25
0
    private void die()
    {
        owner.GameOver(owner);
        onHit(AttackType.None, this);
        target = null;
        getRigidBody2D().velocity = Vector2.zero;
        Destroy(GetComponent <Collider2D>());
        healthBar.setDead();
        RandomCatNoises n = transform.GetChild(0).GetComponent <RandomCatNoises>();

        n.playMeow();
        n.enableNoises = false;

        if (owner.enemy)
        {
            EventTrigger ET = GetComponent <EventTrigger>();
            if (ET != null)
            {
                Destroy(ET);
            }
            gameObject.layer = owner.getLayer(false);
        }
        else
        {
            Action.interactable = false;
        }

        if (getAnimator().GetBool("fly"))
        {
            Vector3 startPos = transform.position;
            Vector3 endPos   = owner.getLosePos(this);
            Vector3 bending  = Vector3.left;
            LeanTween.value(gameObject, 0, 1, 2.1f).setDelay(0.5f).setOnUpdate((float val) =>
            {
                Vector3 currentPos = Vector3.Lerp(startPos, endPos, val);
                currentPos.x      += bending.x * Mathf.Sin(val * Mathf.PI);
                currentPos.y      += bending.y * Mathf.Sin(val * Mathf.PI);
                transform.position = currentPos;
                setPositionZ(currentPos);
            }).setOnComplete(() =>
                             getAnimator().SetBool("fly", false));
            flying = false;
        }
        else
        {
            StartCoroutine(moveToOrig());
        }
    }
Esempio n. 26
0
    private void CreateAttackObject(ExploreCat enemyCat, float damage)
    {
        cAttack = Instantiate(Resources.Load <GameObject>("miscPrefabs/" + cat.getCatAsset().attackType.ToString())).GetComponent <AttackObj>();
        Sprite secondarySprite = Resources.Load <Sprite>("fightUI/" + this.cat.getCatAsset().secondaryType.ToString());

        if (cat.getCatAsset().attackType == AttackType.Melee)
        {
            ((Melee)cAttack).Init(this);
            ((Melee)cAttack).getSprite().sprite = secondarySprite;
        }
        else if (cat.getCatAsset().attackType == AttackType.Ranged)
        {
            cAttack.GetComponent <SpriteRenderer>().sprite = secondarySprite;
            ((Projectile)cAttack).Init(this, this.realizedStats.projectileSpeed, cat.getCatAsset().secondaryType);
        }
        cAttack.setDamage(damage);
    }
Esempio n. 27
0
    public void InitStory(Dialogue[] dialogues, ExploreCat user, ExploreCat[] enemies)
    {
        userCatRef   = user;
        enemyCatRefs = enemies;
        Debug.Log("init story with " + userCatRef.cat.Name + " as NONE.");

        Dialogues = DataUtils.AdjustCosmetics(dialogues, userCatRef.cat.catType);
        if (dialogues == null || dialogues.Length == 0)
        {
            End();
            return;
        }
        currSpeakerIndex  = 0;
        currDialogueIndex = 0;
        gameObject.SetActive(true);
        setNewCharUI();
    }
Esempio n. 28
0
    public void Target(ExploreCat EC)
    {
        EC.hitByObj(damage, this);

        if (damage > 0)
        {
            timeAlive = 0;
            particleEffect();
        }
        else
        {
            timeAlive         = timeToLive;
            getSprite().color = Color.clear;
        }

        onHit();
        StartCoroutine(Fade());
    }
Esempio n. 29
0
    public void startFight(ExploreCat enemy)
    {
        fadeSelector();
        ExploreCat cEnemy = getCurrentEnemy();
        ExploreCat user   = getCurrentUser();

        if (user == null || cEnemy == null)
        {
            return;
        }
        user.target = enemy;
        user.Enable();
        if (cEnemy.sideEffect != null)
        {
            cEnemy.checkRemoveEffect();
            if (cEnemy.sideEffect != null)
            {
                user.onHit = (AttackType a, ExploreCat c) =>
                {
                    controller.playSound(a);
                    cEnemy.Enable();
                    c.onHit = controller.OnHit;
                };
                return;
            }
        }
        if (!cEnemy.usedAction && EnemyAction(cEnemy))
        //&& UnityEngine.Random.value > 0.15f)
        {
            if (cEnemy.target == null)
            {
                cEnemy.findTarget();
            }
            user.onHit = (AttackType a, ExploreCat c) =>
            {
                controller.playSound(a);
                cEnemy.useAction();
                c.Disable();
                c.onHit = controller.OnHit;
            };
            return;
        }
        cEnemy.Enable();
    }
Esempio n. 30
0
    public void findTarget()
    {
        if (owner.enemyPlayer.aliveCats.Count == 0)
        {
            return;
        }
        ExploreCat closestCat = null;
        float      distance   = float.PositiveInfinity;

        foreach (ExploreCat c in owner.enemyPlayer.aliveCats)
        {
            float d2 = Vector2.Distance(transform.position, c.transform.position);
            if (d2 < distance)
            {
                distance   = d2;
                closestCat = c;
            }
        }
        target = closestCat;
    }