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); }
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); }; }
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; }
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); } }
// 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); }
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); }
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(); } }
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()); } }
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); }
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); } }
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; }
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; }
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); }
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(); }
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)); }
//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); }
private void alwaysResponse(ActionType action, ExploreCat cat) { switch (action) { case ActionType.Love: case ActionType.Comfort: case ActionType.Hug: cat.loveParticles(); break; } }
private void OnTriggerEnter2D(Collider2D other) { if (canHitTrig(other.gameObject)) { ExploreCat cat = Hit(other.gameObject); if (cat != null) { cat.hitByObj(damage, this); } onHit(); } }
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; } }
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); }
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; }
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); }
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(); } }
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(); }
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()); } }
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); }
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(); }
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()); }
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(); }
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; }