예제 #1
0
 private void ZombiePlyier(IZombie zombie, double timer)
 {
     if (delay >= 5 && multiply)
     {
         delay = 0;
         if (!zombie.Multiplier)
         {
             Vector2 newLocation = new Vector2(zombie.Location.X, zombie.Location.Y + ZombieFactory.zombieWalkingRightAtlas.Height);
             IZombie z           = ZombieFactory.Instance.CreateZombie(newLocation);
             z.Multiplier = true;
             SoundEffectFactory.Instance.CreateNightmareZombieSpawnSound().PlaySound();
             nightmareZombie.Add(z);
             zombie.Multiplier = true;
         }
         multiply = false;
     }
     else
     {
         delay += timer;
         if (delay > 5)
         {
             multiply = true;
         }
     }
 }
예제 #2
0
    public void OnCollisionEnter(Collision other)
    {
        IZombie   zombie = other.collider.GetComponentInParent <IZombie> ();
        Rigidbody a      = other.collider.attachedRigidbody;

        if (zombie)
        {
            float x = 1;
            for (int i = 0; i < zombie.damageLevels.Length; i++)
            {
                if (other.collider == zombie.damageLevels[i])
                {
                    x = Mathf.Pow(i + 1, 2);
                }
            }
            zombie.ApplyPain((int)(damage * x + Random.Range(0, damage * x)));
            DropBlood(trans.position, trans.rotation);

            for (int i = 0; i < zombie.partsOfZ.Length; i++)
            {
                if (zombie.partsOfZ[i].coll == other.collider)
                {
                    zombie.partsOfZ [i].CatchOff();
                }
            }
            if (a)
            {
                zombie.lastDamageColl      = a;
                zombie.lastDamageDirection = -other.relativeVelocity * damage / 50;
            }
        }
        if (a)
        {
            a.velocity = -other.relativeVelocity * damage / 200f;
        }

        /*IHuman human = other.collider.GetComponentInParent<IHuman> ();
         *
         * if (human) {
         *      if (human.savable.name != "player") {
         *              float x = 1;
         *              for (int i = 0; i < human.damageLevels.Length; i++) {
         *                      if (other.collider == human.damageLevels[i]) {
         *                              x = Mathf.Pow(i + 1, 2);
         *                      }
         *              }
         *              human.savable.ApplyDamage ((int)(damage * x + Random.Range(0, damage * x)));
         *              DropBlood (trans.position, trans.rotation);
         *      }
         * }*/

        if (!other.collider.GetComponent <IBullet>())
        {
            float r = Random.Range(0f, 100f);
            if (r < 90)
            {
                Destroy(gameObject);
            }
        }
    }
예제 #3
0
    public static IZombie ZombieNearbyPosition(Vector3 position, float far, bool noCast)
    {
        IZombie[] humans = DataCenter.dataCenter.zombies;
        IZombie   finded = null;
        float     dist   = far;

        for (int i = 0; i < humans.Length; i++)
        {
            float cur = (humans [i].trans.position - position).magnitude;
            if (!noCast)
            {
                if (cur < dist)
                {
                    finded = humans [i];
                    dist   = cur;
                }
            }
            else
            {
                if (cur < dist && !Physics.Linecast(position + Vector3.up * 1.8f,
                                                    humans [i].trans.position + Vector3.up * 1.8f))
                {
                    finded = humans [i];
                    dist   = cur;
                }
            }
        }
        return(finded);
    }
 public ZombieNightmareEnemyCollisionResponse(IZombie z, INightmareEnemy n, List <IZombie> zombieList, CollisionSide c)
 {
     timer--;  // = g.TargetElapsedTime.TotalSeconds;
     delayTimer = timer + 2;
     locale     = n.Location;
     if (c != CollisionSide.None)
     {
         if (n is NightmareGoombaEnemy)
         {
             locale.Y = n.Location.Y + n.Texture.Height;
             n.Die();
             if (timer == 0)
             {
                 SoundEffectFactory.Instance.CreateNightmareZombieSpawnSound().PlaySound();
                 zombieList.Add(ZombieFactory.Instance.CreateZombie(locale));
                 timer = 1;
             }
         }
         else
         {
             if (timer == 0)
             {
                 n.Die();
                 SoundEffectFactory.Instance.CreateNightmareZombieSpawnSound().PlaySound();
                 zombieList.Add(ZombieFactory.Instance.CreateZombie(locale));
                 timer = 1;
             }
         }
     }
 }
예제 #5
0
    public void Create()
    {
        IZombie z = ZombieFactory.Make(ZombieFactory.Catagory.Crazy, ZombieFactory.IsRange.Range, ZombieColor.White);


        Generator(z);
    }
예제 #6
0
    public virtual IZombie Build(IsRange isRange, ZombieColor color)
    {
        IZombie z = SelectZombie(isRange);

        z.Paint(color);
        return(z);
    }
 public ZDRegular(IZombie _zombie) : base(_zombie)
 {
     _zombie.setZombieType("R");
     _zombie.setZombieHealth(50);
     _zombie.setZombieDefence(1);
     _zombie.setZombieSpeed(1);
     _zombie.setZombieIsMetal(false);
     _zombie.setZombieIsCovered(false);
 }
 public ZDBucket(IZombie _zombie) : base(_zombie)
 {
     _zombie.setZombieType("B");
     _zombie.setZombieHealth(150);
     _zombie.setZombieDefence(1);
     _zombie.setZombieSpeed(1);
     _zombie.setZombieIsMetal(true);
     _zombie.setZombieIsCovered(false);
 }
예제 #9
0
 public ZDCone(IZombie _zombie) : base(_zombie)
 {
     _zombie.setZombieType("C");
     _zombie.setZombieHealth(75);
     _zombie.setZombieDefence(1);
     _zombie.setZombieSpeed(1);
     _zombie.setZombieIsMetal(false);
     _zombie.setZombieIsCovered(false);
 }
예제 #10
0
 public ZDDoor(IZombie _zombie) : base(_zombie)
 {
     _zombie.setZombieType("S");
     _zombie.setZombieHealth(75);
     _zombie.setZombieDefence(3);
     _zombie.setZombieSpeed(1);
     _zombie.setZombieIsMetal(true);
     _zombie.setZombieIsCovered(true);
 }
예제 #11
0
        static void Main(string[] args)
        {
            string     input   = "";
            ZombieList zombies = new ZombieList();

            while (input != "Exit")
            {
                printMenu();
                input = Console.ReadLine();
                if (input == "Exit")
                {
                    return;
                }

                int res;
                if (!int.TryParse(input, out res))
                {
                    Console.WriteLine("That is not a number or \"Exit\", try again");
                }
                switch (res)
                {
                case 1:
                    Console.WriteLine("Which kind?");
                    zombies.addZombie(createEnemy());
                    zombies.printZombieInfo();
                    break;

                case 2:
                    Console.WriteLine("How much, 25 or 40?");
                    Console.WriteLine("1. 25");
                    Console.WriteLine("2. 40");
                    input = Console.ReadLine();
                    int damage;
                    if (!int.TryParse(input, out damage))
                    {
                        Console.WriteLine("That is not a number, try again");
                    }

                    IZombie zombie = zombies;
                    switch (damage)
                    {
                    case 1:
                        zombie.TakeDamage(25);
                        zombies.printZombieInfo();
                        break;

                    case 2:
                        zombie.TakeDamage(40);
                        zombies.printZombieInfo();
                        break;
                    }

                    break;
                }
            }
        }
예제 #12
0
    public void Spawn()
    {
        int   l   = 0;
        float max = maxCount;

        /*if (!ITimecycle.night) {
         *      max = maxCount / 2;
         * }*/
        if (human)
        {
            l = DataCenter.dataCenter.humans.Length;
        }
        else
        {
            l = DataCenter.dataCenter.zombies.Length;
        }
        if ((l < max && limit > 0) || (!IHuman.playerObj && human))
        {
            GameObject sp = (GameObject)Resources.Load("Prefabs/ZombieRag_" + Random.Range(0, 1));
            if (!human)
            {
                sp = Instantiate(sp, transform.position + (Vector3)Vector0.Flat(Random.onUnitSphere), Quaternion.identity, transform);
                IZombie z = sp.GetComponent <IZombie> ();
                z.findMode       = isFinders;
                z.savable.health = 100 + IZombie.dead * 10;
            }
            else
            {
                if (IHuman.playerObj)
                {
                    sp = (GameObject)Resources.Load("Prefabs/HumanRag");
                    sp = Instantiate(sp, transform.position + (Vector3)Vector0.Flat(Random.onUnitSphere), Quaternion.identity, transform);
                    IHuman h = sp.GetComponent <IHuman> ();
                    h.savable.name = "BOT";
                    Destroy(h.camObj);
                }
                else
                {
                    sp = (GameObject)Resources.Load("Prefabs/Human");
                    sp = Instantiate(sp, transform.position + (Vector3)Vector0.Flat(Random.onUnitSphere), Quaternion.identity, transform);
                    IHuman h = sp.GetComponent <IHuman> ();
                    h.savable.name = "player";
                    IHuman.GetPlayer();
                    ITimecycle.UpdateCameras();
                }
            }
        }
        if (limited)
        {
            limit -= 1;
        }
        if (!IsInvoking("Spawn"))
        {
            Invoke("Spawn", interval + Random.Range(0f, interval));
        }
    }
예제 #13
0
    private void Sinhro()
    {
        if (Input.GetButtonDown("Cancel"))
        {
            IMainMenu.ToMenu();
        }
        weapon.texture = (Texture)Resources.Load("Sprites/Weapon_" + player.savable.currentWeapon);
        if (fire)
        {
            Fire();
        }
        //SinhroCross ();
        Transform cm    = IHuman.cameraMainParent;
        Transform fp    = player.firePlace;
        float     speed = Time.deltaTime * 8;

        if (cross)
        {
            rangeView = 30;
            Vector3 v = fp.position - fp.forward + fp.up * 0.02f;
            Debug.DrawRay(v, fp.forward);
            cm.position = Vector3.Slerp(cm.position, v, speed);
        }
        else
        {
            rangeView        = 60;
            cm.localPosition = Vector3.Slerp(cm.localPosition, new Vector3(0, 0.0014f, 0.0013f), speed);
        }
        IHuman.cameraMain.fieldOfView = Mathf.Lerp(IHuman.cameraMain.fieldOfView, rangeView, 0.25f);
        health.text = "" + ((int)player.savable.health) + '\n' + "Зомби сейчас : " + DataCenter.dataCenter.zombies.Length;
        float  t   = ITimecycle.time;
        int    sec = (int)((t - (int)t) * 60);
        string s   = "" + sec;

        if (sec < 10)
        {
            s = "0" + sec;
        }
        killed.text = "Время : " + (int)t + ":" + s;
        IZombie z = IZombie.ZombieNearbyPosition(player.trans.position, 5, false);

        if (z)
        {
            Vector3 v = Vector0.Flat(z.trans.position - player.trans.position);
            v = player.trans.InverseTransformDirection(v);
            Quaternion q = Quaternion.LookRotation(v);
            zAngle = -135 - q.eulerAngles.y;
        }
        else
        {
            zAngle -= Time.deltaTime * 180;
        }
        radar.localEulerAngles = Vector3.forward * (zAngle);
        patronesType.texture   = (Texture)Resources.Load("Sprites/Patrones_" + player.savable.currentWeapon);
        patrones.text          = "" + player.savable.patrones_in [player.savable.currentWeapon] + "/" + player.savable.patrones_ [player.savable.currentWeapon];
    }
예제 #14
0
 public void Fall()
 {
     if (savable.name == "player")
     {
         anims.Play("Death");
         falled = true;
         IZombie z = zombieNearby;
         if (z)
         {
             trans.rotation = Quaternion.LookRotation(Vector0.Flat(z.trans.position - trans.position));
         }
         falledEulerY = trans.eulerAngles.y;
     }
 }
예제 #15
0
    public void Generator(IZombie z)
    {
        GameObject capsule = GameObject.CreatePrimitive(PrimitiveType.Capsule);

        //cube.AddComponent<IZombie>();
        capsule.AddComponent <Zombie>();
        Zombie zombie = capsule.GetComponent <Zombie>();

        zombie.characterProperty = z.characterProperty;
        zombie.zombieColor       = z.zombieColor;
        zombie.name = z.characterProperty.Name;

        Debug.Log("zombie color is" + zombie.zombieColor + "_HP" + zombie.characterProperty.HP + "_MP" + z.characterProperty.MP + "_SPEED" + zombie.characterProperty.Speed + "_ISRANGE" + zombie.characterProperty.IsRange);
    }
예제 #16
0
    private void HumanUpdate()
    {
        savable.health += Time.deltaTime / 2;
        savable.health  = Mathf.Clamp(savable.health, 0, 100);
        float speed = Time.deltaTime * 4;

        currentFrame.addLook = Vector3.Slerp(currentFrame.addLook, Vector3.zero, speed);
        if (heart)
        {
            if (savable.name == "player")
            {
                float   dist = 10000;
                IZombie z    = IZombie.ZombieNearbyPosition(trans.position, 10000, false);
                if (z)
                {
                    dist = (trans.position - z.trans.position).magnitude;
                }
                float vol = 1 / dist;
                heart.volume = vol;
            }
            else
            {
                heart.volume = 0;
            }
        }
        if (agentTrans.localPosition.magnitude > 4f)
        {
            agentTrans.localPosition = agentTrans.localPosition.normalized * 4f;
        }
        walk_speed_k = walkSpeed / 2 + walkSpeed / 2 * (1 - crouch);
        if (savable.name == "player")
        {
            Control();
        }
        else
        {
            AI();
        }
        LookAt();
        if (savable.health < 1)
        {
            Die();
        }
        if (savable.health < 25 && !falled)
        {
            Fall();
        }
    }
예제 #17
0
        private void MarioZombieCollision()
        {
            for (int i = 0; i < nightmareZombie.Count; i++)
            {
                IZombie   z      = nightmareZombie[i];
                Rectangle zombie = z.Position;
                Rectangle m      = g.Character.Position;

                CollisionSide cs = CollisionDetector.Detect(m, zombie);

                if (cs != CollisionSide.None)
                {
                    new ZombieMarioCollisionResponse(z, g.Character, cs, g);
                }
            }
        }
예제 #18
0
파일: IDoorBeh.cs 프로젝트: Taqmuraz/AOE
    private void Update()
    {
        IHuman  h = IHuman.HumanNearbyPosition(trans.position, false, 3);
        IZombie z = IZombie.ZombieNearbyPosition(trans.position, 3, false);

        opened = h || z;

        int r = 0;

        if (opened)
        {
            r = 1;
        }
        float speed = Time.deltaTime * 4f;

        addEuler = Mathf.Lerp(addEuler, r * 120, speed);
        trans.localEulerAngles = new Vector3(startEuler.x, startEuler.y, startEuler.z + addEuler);
    }
예제 #19
0
        internal void printZombieInfo()
        {
            if (this.zombies.Count == 0)
            {
                Console.WriteLine("[]");
                return;
            }
            StringBuilder info = new StringBuilder("[");

            for (int x = 0; x < this.zombies.Count - 1; x++)
            {
                IZombie zombie = this.zombies[x];
                info.Append(zombie.getInfo() + ", ");
            }

            info.Append(this.zombies[this.zombies.Count - 1].getInfo() + "]");

            Console.WriteLine(info);
        }
예제 #20
0
        private void ZombieEnemyCollisionDetect()
        {
            for (int i = 0; i < zombies.Count; i++)
            {
                IZombie   zombie = zombies[i];
                Rectangle z      = zombie.Position;

                for (int j = 0; j < nightmareEnemyList.Count; j++)
                {
                    INightmareEnemy ne = nightmareEnemyList[j];
                    Rectangle       n  = ne.Position;

                    CollisionSide cs = CollisionDetector.Detect(z, n);

                    if (cs != CollisionSide.None)
                    {
                        new ZombieNightmareEnemyCollisionResponse(zombie, ne, zombies, cs);
                    }
                }
            }
        }
예제 #21
0
        void IZombie.TakeDamage(int damage)
        {
            if (this.zombies.Count == 0)
            {
                return;
            }

            IZombie zombie = this.zombies[0];

            zombie.TakeDamage(damage);

            if (zombie.getHealth() <= 0)
            {
                IZombie newZombie = zombie.die();
                if (newZombie != null)
                {
                    this.addZombie(newZombie);
                }
                this.zombies.Remove(zombie);
            }
        }
예제 #22
0
    private void DrawRadar()
    {
        IHuman[] humansIn = IHuman.GetNearByAll(player.trans.position, 50);
        Rect     r        = new Rect(0, 0, 100, 100);

        GUI.color = Color.gray;
        GUI.Box(r, "");
        for (int i = 0; i < humansIn.Length; i++)
        {
            Vector3 p = player.trans.InverseTransformPoint(humansIn [i].trans.position - player.trans.position) + new Vector3(50, 0, 50);
            r         = new Rect(p.x - 5, p.z - 5, 10, 10);
            GUI.color = Color.blue;
            GUI.Box(r, "");
        }
        IZombie[] zIn = IZombie.GetNearByAll(player.trans.position, 50);
        for (int i = 0; i < zIn.Length; i++)
        {
            Vector3 p = player.trans.InverseTransformPoint(zIn [i].trans.position - player.trans.position) + new Vector3(50, 0, 50);
            r         = new Rect(p.x - 10, p.z - 10, 20, 20);
            GUI.color = Color.red;
            GUI.Box(r, "");
        }
    }
예제 #23
0
 internal void removeZombie(IZombie zombie)
 {
     this.zombies.Remove(zombie);
 }
예제 #24
0
 internal void addZombie(IZombie zombie)
 {
     this.zombies.Add(zombie);
 }
예제 #25
0
 public ZombieMarioCollisionResponse(IZombie z, IMario m, CollisionSide c, Game1 g)
 {
     g.Character.Die();
 }
예제 #26
0
 private void OnZombieDied(IZombie zombie)
 {
     ChangeMoneyAmount(zombie.Reward);
 }
 public ZombieDecorator(IZombie NIZombie)
 {
     this._zombie = NIZombie;
 }
예제 #28
0
 public ZombieMoveBehaviour(IZombie zombie)
 {
     _zombie    = zombie;
     _transform = zombie.GameObject.transform;
 }
 public ZombieMeleeBehaviour(IZombie zombie)
 {
     _zombie = zombie;
 }