using Assets.Scripts; using Assets.Scripts.Player; using Assets.Scripts.Slimes; using Newtonsoft.Json.Linq; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Diagnostics; namespace Assets.Scripts.InteractableObjects { public class Enemy : InteractableObject { System.Random rand = new System.Random(); BasicSlime slime; SlimeFactory factory = new SlimeFactory(); public SlimeType slimeType; bool isJumping; Stopwatch jumpTimer; // Start is called before the first frame update void Start() { isJumping = false; jumpTimer = new Stopwatch(); //Nothing } // Update is called once per frame void Update() { if (gameObject.activeSelf) { if (!isJumping) { jumpTimer.Start(); isJumping = true; gameObject.GetComponent().AddForce(new Vector3(rand.Next(-5, 5), 10, rand.Next(-5, 5)), ForceMode.Impulse); //gameObject.GetComponent().AddForce(new Vector3(5, 10, 5), ForceMode.Impulse); } if (jumpTimer.ElapsedMilliseconds >= 5000) { jumpTimer.Reset(); isJumping = false; } if (gameObject.transform.position.x > 1000 || gameObject.transform.position.x > 5000 || gameObject.transform.position.x > 5000) { UnityEngine.Debug.Log("BUG!"); } } } void OnTriggerExit(Collider col) { if (col.name.Contains("_") && col.gameObject == gameObject.transform.parent.gameObject) { gameObject.GetComponent().AddForce(gameObject.GetComponent().linearVelocity * -2, ForceMode.Impulse); } } void OnDisable() { } public override void handleInteraction(GameObject player) { keepAlive = true; } public void scaleEnemy(PlayerGameObject player) { if (slime == null) { switch (slimeType) { case SlimeType.MAGE: slime = factory.generateMageSlime(player); break; case SlimeType.NORMAL: slime = factory.generateNormalSlime(player); break; case SlimeType.METAL: slime = factory.generateMetalSlime(player); break; case SlimeType.WARRIOR: slime = factory.generateWarriorSlime(player); break; case SlimeType.FOREST: slime = factory.generateForestSlime(player); break; case SlimeType.BOSS: slime = factory.generateBossSlime(player); break; } } } public int[] getStats() { return slime.getStats(); } public string getEnemyName() { return slimeType.ToString().ToLower() + " slime"; } public int calculateDamage() { return slime.calculateDamage(rand); } public int calculateHeavy() { return slime.calculateHeavy(rand); } public bool takeDamage(int amount) { return slime.takeDamage(amount, rand); } public int getExperience() { return slime.getExperience(); } public Item getItem() { return slime.getItem(); } public string saveEnemy() { string result = ""; result = result + FileHandler.generateJSON("enemytype", "\"" + slimeType.ToString().ToLower() + "\""); if (slime != null) { result = result + ",\r\n" + slime.saveSlime(); } return result; } public void loadEnemy(JToken json) { slime = new BasicSlime(json); slimeType = (SlimeType)Enum.Parse(typeof(SlimeType), json["enemytype"].ToString()); } } }