コード例 #1
0
 void Start()
 {
     horde    = gameObject.GetComponent <Horde>();
     minions  = horde.minions;
     axes     = new LinkedList <GameObject>();
     axeCount = minions.Count * axesPerViking;
 }
コード例 #2
0
    public override Vector2 CalculateMove(Zombie zombie, List <Transform> context, Horde horde)
    {
        //Handles data mismatch
        if (weights.Length != behaviours.Length)
        {
            Debug.LogError("Data mismatch in " + name, this);
            return(Vector2.zero);
        }

        //set up move
        Vector2 move = Vector2.zero;

        //iterate through behaviours
        for (int i = 0; i < behaviours.Length; i++)
        {
            Vector2 partialMove = behaviours[i].CalculateMove(zombie, context, horde) * weights[i];

            if (partialMove != Vector2.zero)
            {
                if (partialMove.sqrMagnitude > weights[i] * weights [i])
                {
                    partialMove.Normalize();
                    partialMove *= weights[i];
                }

                move += partialMove;
            }
        }

        return(move);
    }
コード例 #3
0
 void Start()
 {
     horde    = FindObjectOfType <Horde>();
     player   = FindObjectOfType <PlayerMov>();
     barriers = FindObjectsOfType <Barrier>();
     checkDialogue();
 }
コード例 #4
0
    public override Vector2 CalculateMove(Zombie zombie, List <Transform> context, Horde horde)
    {
        //if no neighbours, return no adjustment
        if (context.Count == 0)
        {
            return(Vector2.zero);
        }

        //add all points together and average
        Vector2 avoidanceMove = Vector2.zero;
        int     nAvoid        = 0;

        foreach (Transform item in context)
        {
            if (Vector2.SqrMagnitude(item.position - zombie.transform.position) < horde.SquareAvoidanceRadius)
            {
                nAvoid++;
                avoidanceMove += (Vector2)(zombie.transform.position - item.position);
            }
        }
        if (nAvoid > 0)
        {
            avoidanceMove /= nAvoid;
        }

        return(avoidanceMove);
    }
コード例 #5
0
    public void CreateHorde(SpawnPosition position, float count)
    {
        Horde newHorde = Instantiate(hordePrefab, transform);

        newHorde.name = "Horde " + hordeCounter;
        hordeCounter++;
        hordes.Add(newHorde);
        switch (position)
        {
        case SpawnPosition.LEFT:
            newHorde.Spawn(-10f, -1f, 0f, 62f, count);
            break;

        case SpawnPosition.TOP:
            newHorde.Spawn(0f, 64f, 62f, 71f, count);
            break;

        case SpawnPosition.RIGHT:
            newHorde.Spawn(64f, 73f, 0f, 62f, count);
            break;

        case SpawnPosition.BOTTOM:
            newHorde.Spawn(0f, 64f, -10f, -1f, count);
            break;
        }
    }
コード例 #6
0
    // this Ray happens instead when player wants to attack something
    void AttackRay()
    {
        Vector3      m            = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        RaycastHit2D hit          = Physics2D.Raycast(new Vector2(m.x, m.y), -Vector2.up, maskForUnits.value);
        Vector3      mouseRounded = new Vector3(Mathf.Round(m.x), Mathf.Round(m.y), 0);

        if (hit.collider != null)
        {
            if (hit.collider.CompareTag("Badge"))
            {
                mouseIsBusy = true;
                print("Hit the Horde!!");
                Horde horde = hit.collider.gameObject.GetComponent <Horde>();
                if (horde.nextToEnemy && Input.GetMouseButtonDown(0))
                {
                    // spawn a spark over the horde for the player to see their hit
                    float      randomZ = (float)Random.Range(0, 180);
                    GameObject spark   = Instantiate(hitSparkFab, mouseRounded, Quaternion.Euler(new Vector3(0, 0, randomZ))) as GameObject;
                }
            }
            else if (hit.collider.CompareTag("Horde Spawner"))
            {
                mouseIsBusy = true;
                print("Hit the spawner!!");
                Spawner_HitBox spawner = hit.collider.gameObject.GetComponent <Spawner_HitBox>();
                if (spawner.visible && Input.GetMouseButtonDown(0))
                {
                    // spawn a spark over the horde for the player to see their hit
                    float      randomZ = (float)Random.Range(0, 180);
                    GameObject spark   = Instantiate(hitSparkFab, mouseRounded, Quaternion.Euler(new Vector3(0, 0, randomZ))) as GameObject;
                }
            }
        }
    }
コード例 #7
0
        private void StartNewRound()
        {
            // At every turn, every character has the possibility to fight.
            // The characters attack in order of speed: the faster obviously attacks first.
            // The game select a target randomly between the other fighters(a character cannot attack himself or a dead character).
            var myRandom = new Random();

            this.NotifyState();

            // Se ho ben capito come funziona l'ordinamento sulle liste, con la proprietà
            // private IOrderedEnumerable<Hero> OrderedHeroes => this.Horde.OrderByDescending(Hero => Hero.Speed);
            // creo una vista sulla lista Horde, quindi se le velocità dovessero cambiare tra un turno e l'altro
            // dovrebbe riorganizzare la lettura automaticamente, giusto?
            // Oppure devo mettere qui l'istruzione di OrderBy, per ricalcolarla ad ogni turno?
            foreach (var hero in HeroesBySpeed)
            {
                if (hero.IsAlive)
                {
                    // creo una nuova lista dei bersagli validi, escludendo sè stesso e tutti gli eroi morti
                    var validTarget = Horde.ToList();
                    validTarget.Remove(hero);
                    validTarget.RemoveAll(x => !x.IsAlive);

                    if (validTarget.Count > 0)
                    {
                        var target = validTarget.ElementAt(myRandom.Next(0, validTarget.Count));
                        hero.Attack(target);
                    }
                }
            }

            this.Notifier.LittleBreak();
            this.Notifier.Wait("Turno finito.");
            this.Notifier.MediumBreak();
        }
コード例 #8
0
 void OnTriggerEnter2D(Collider2D coll)
 {
     if (coll.gameObject.tag == "Badge")
     {
         Horde horde = coll.gameObject.GetComponent <Horde>();
         horde.tileColl = myColl;
     }
 }
コード例 #9
0
ファイル: Bullet.cs プロジェクト: PeakPei/TheWall_Unity2D
 void OnTriggerEnter2D(Collider2D coll)
 {
     if (coll.gameObject.tag == "Badge")
     {
         Horde horde = coll.gameObject.GetComponent <Horde> ();
         CalcDamage(horde);
     }
 }
コード例 #10
0
        public Horde SaveHorde(Horde horde)
        {
            DbHorde dbHorde = mapper.Map <DbHorde>(horde);

            context.Hordes.Add(dbHorde);
            context.SaveChanges();
            return(mapper.Map <Horde>(dbHorde));
        }
コード例 #11
0
 void OnTriggerEnter2D(Collider2D coll)
 {
     if (coll.gameObject.CompareTag("Badge"))
     {
         Horde horde = coll.gameObject.GetComponent <Horde>();
         horde.TakeDamage(damage: 5f);
         Debug.Log("Hit for damage: " + damage);
     }
 }
コード例 #12
0
 void OnTriggerExit2D(Collider2D coll)
 {
     if (coll.CompareTag("Badge"))
     {
         horde                  = coll.GetComponent <Horde>();
         horde.nextToEnemy      = false;
         townTile.beingAttacked = false;
     }
 }
コード例 #13
0
        public HordeDetails UpdateHorde(int id, HordeCreateItem hordeCreateItem)
        {
            Horde horde = mapper.Map <Horde>(hordeCreateItem);

            horde.Id = id;

            Horde updatedHorde = hordeRepository.Update(id, horde);

            return(mapper.Map <HordeDetails>(updatedHorde));
        }
コード例 #14
0
    public override Vector2 CalculateMove(Zombie zombie, List <Transform> context, Horde horde)
    {
        Vector2 centerOffset = center - (Vector2)zombie.transform.position;
        float   t            = centerOffset.magnitude / radius;

        if (t < 0.9f)
        {
            return(Vector2.zero);
        }

        return(centerOffset * t * t);
    }
コード例 #15
0
ファイル: WaveUnitTest.cs プロジェクト: mawagusura/Zarwin
        public void InitHordeWithParameters()
        {
            ZombieParameter[] zombieParameters = { new ZombieParameter(ZombieType.Stalker, ZombieTrait.Normal, 1) };
            Horde             horde            = new Horde(zombieParameters);

            Assert.True(horde.IsAlive);
            Assert.Single(horde.ZombiesAlive);
            Assert.Equal(1, horde.ZombiesAlive[0].Id);
            Assert.Equal(1, horde.ZombiesAlive[0].HealthPoints);
            Assert.Equal(ZombieType.Stalker, horde.ZombiesAlive[0].Type);
            Assert.Equal(ZombieTrait.Normal, horde.ZombiesAlive[0].Trait);
        }
コード例 #16
0
ファイル: Alien.cs プロジェクト: Rodron/SpaceInvaders
    void Start()
    {
        //Se buscan los objetos y componentes necesarios
        anim = GetComponentsInChildren <Animator>()[0];

        horde = FindObjectOfType <Horde>();

        gameObject.GetComponent <CubeEditor>().enabled = false; //Se desactiva el script de snap para que el alien pueda moverse

        gun.startSpeed = shotSpeed;

        StartCoroutine(fire()); //Comienza la subrutina de disparo que se ejecutará en el intervalo aleatorio entre los valores escogidos
    }
コード例 #17
0
 // DETECT HORDES
 void OnTriggerEnter2D(Collider2D coll)
 {
     if (coll.gameObject.CompareTag("Badge"))
     {
         attacking = true;
         // Not idling anymore!
         idling = false;
         if (hordeAttacker == null)
         {
             hordeAttacker = coll.gameObject.GetComponent <Horde>();
         }
     }
 }
コード例 #18
0
ファイル: TurnResult.cs プロジェクト: mawagusura/Zarwin
        public override string ToString()
        {
            StringBuilder builder = new StringBuilder();

            foreach (var soldier in Soldiers.OrderBy(s => s.Id))
            {
                builder.AppendLine(soldier.ToString());
            }
            builder.AppendLine(Horde.ToString());
            builder.AppendLine($"Wall HP = {WallHealthPoints}");

            return(builder.ToString());
        }
コード例 #19
0
ファイル: Drone.cs プロジェクト: PeakPei/TheWall_Unity2D
 void OnTriggerEnter2D(Collider2D coll)
 {
     if (coll.gameObject.CompareTag("Badge"))
     {
         Horde horde = coll.gameObject.GetComponent <Horde>();
         if (!horde.nextToEnemy)
         {
             horde.myDrone     = GetComponent <Drone>();
             horde.nextToEnemy = true;
         }
         horde.TakeDamage(damage: 5f);
         Debug.Log("Hit for damage: " + damage);
     }
 }
コード例 #20
0
ファイル: Zombie.cs プロジェクト: 0911jgodwin/Zombie-Apoc
    public bool Damage(int incomingDamage)
    {
        health = health - incomingDamage;

        if (health <= 0)
        {
            GameObject parentHorde = transform.parent.gameObject;
            Horde      hordeScript = parentHorde.GetComponent <Horde>();
            hordeScript.removeZombie(this);
            Destroy(this.gameObject);
            this.dead = true;
        }
        return(dead);
    }
コード例 #21
0
        public Horde Update(int id, Horde horde)
        {
            DbHorde dbHorde = context.Hordes
                              .Include(h => h.Orcs)
                              .FirstOrDefault(h => h.Id == id);

            if (dbHorde != null)
            {
                context.Entry(dbHorde).CurrentValues
                .SetValues(mapper.Map <DbHorde>(horde));
                context.SaveChanges();
            }
            return(mapper.Map <Horde>(dbHorde));
        }
コード例 #22
0
    public override Vector2 CalculateMove(Zombie zombie, List <Transform> context, Horde horde)
    {
        //if no enemies, maintain current alignment
        Transform enemy = GetNearbyEnemies(zombie);

        if (enemy == null)
        {
            return(zombie.transform.up);
        }

        //move towards enemy
        Vector2 attackMove = (Vector2)(enemy.position - zombie.transform.position);

        return(attackMove);
    }
コード例 #23
0
    void Start()
    {
        Initialise();
        rb2d = gameObject.GetComponent <Rigidbody2D>();
        //isInfected = true;
        skillSoundSource = GetComponent <AudioSource>();

        foreach (GameObject horde in GameObject.FindGameObjectsWithTag("Horde"))
        {
            if (horde.gameObject.GetComponent <Horde>().GetPlayerName().Equals(playerName))
            {
                myHorde = horde.GetComponent <Horde>();
            }
        }
    }
コード例 #24
0
    //Se detiene la horda, deja de disparar y se muestre la puntuación por pantalla con un botón para volver al menú
    public void scoreAnimation()
    {
        horde       = FindObjectOfType <Horde>();
        horde.speed = 0.0f;
        horde.stopFiring();

        inp.gameObject.SetActive(true);
        setNameText.gameObject.SetActive(true);
        scoreText.gameObject.SetActive(true);
        scoreText.text = "Puntos:  " + playerScore.ToString();
        setName        = true;

        if (horde.speed <= 0.0f)
        {
            horde.speed = 0.0f;
        }
    }
コード例 #25
0
ファイル: TurnResult.cs プロジェクト: mawagusura/Zarwin
        public override bool Equals(object obj)
        {
            if (!(obj is TurnResult other))
            {
                return(false);
            }

            var soldiersFound = from thisSoldier in Soldiers
                                join otherSoldier in other.Soldiers on thisSoldier.Id equals otherSoldier.Id
                                select Tuple.Create(thisSoldier, otherSoldier);

            return(Soldiers.Length == other.Soldiers.Length &&
                   soldiersFound.Count() == Soldiers.Length &&
                   soldiersFound.All(tuple => tuple.Item1.Equals(tuple.Item2)) &&
                   Horde.Equals(other.Horde) &&
                   Money == other.Money &&
                   WallHealthPoints == other.WallHealthPoints);
        }
コード例 #26
0
ファイル: Bullet.cs プロジェクト: PeakPei/TheWall_Unity2D
    void CalcDamage(Horde target)
    {
        int defense = target.hordeUnit.defenseRating;
        int dmgRoll = (Random.Range(0, attackR) + 1) - defense;

        Debug.Log(gameObject.name + " rolls: " + dmgRoll);
        if (dmgRoll > 0)
        {
            float damage = (float)dmgRoll;
            target.TakeDamage(damage);
            Destroy(gameObject);
        }
        else
        {
            print("Miss!");
            Destroy(gameObject);
        }
    }
コード例 #27
0
ファイル: WaveUnitTest.cs プロジェクト: mawagusura/Zarwin
        public void HorderPriority()
        {
            ZombieParameter[] zombieParameters =
            {
                new ZombieParameter(ZombieType.Stalker, ZombieTrait.Normal, 1),
                new ZombieParameter(ZombieType.Fatty,   ZombieTrait.Normal, 1),
                new ZombieParameter(ZombieType.Fatty,   ZombieTrait.Tough,  1),
                new ZombieParameter(ZombieType.Stalker, ZombieTrait.Tough, 1)
            };
            Horde horde = new Horde(zombieParameters);

            Assert.True(horde.IsAlive);
            Assert.Equal(4, horde.ZombiesAlive.Count);
            Assert.Equal(3, horde.ZombiesAlive[0].Id);
            Assert.Equal(2, horde.ZombiesAlive[1].Id);
            Assert.Equal(4, horde.ZombiesAlive[2].Id);
            Assert.Equal(1, horde.ZombiesAlive[3].Id);
        }
コード例 #28
0
        private IOrderedEnumerable <Hero> HeroesBySpeed => this.Horde.OrderByDescending(Hero => Hero.Speed); // Mi è sembrato comodo avere una proprità per l'ordinamento
        #endregion


        public void StartToFight()
        {
            this.Notifier.LargeBreak();
            this.Notifier.HighNotify("   ***   Inizia un nuovo combattimento nell'arena!   ***   ");
            this.Notifier.LargeBreak();

            while (Horde.Count(x => x.IsAlive) > 1)
            {
                this.StartNewRound();
            }

            var winner = Horde.Find(x => x.IsAlive);  // quando esco dal ciclo, l'unico rimasto in vita è il vincitore

            NotifyState();
            Notifier.Wait("Fine del combattimento.");
            Notifier.LargeBreak();
            Notifier.HighNotify($"   ***   {winner.EpicName} è il campione dell'arena!   ***   ");
            Notifier.LargeBreak();
        }
コード例 #29
0
ファイル: GetSet.cs プロジェクト: oernymn/childrens-card-game
    static public Transform GetContainer(Card card, bool isAlly, int ContainerIndex)
    {
        Transform container;

        if (isAlly)
        {
            container = card.Allegiance.GetChild(ContainerIndex);
        }
        else if (card.Allegiance == Alliance)
        {
            container = Horde.GetChild(ContainerIndex);
        }
        else
        {
            container = Alliance.GetChild(ContainerIndex);
        }

        return(container);
    }
コード例 #30
0
    public override Vector2 CalculateMove(Zombie zombie, List <Transform> context, Horde horde)
    {
        //if no neighbours, maintain alignment
        if (context.Count == 0)
        {
            return(zombie.transform.up);
        }

        //add all points together and average
        Vector2 alignmentMove = Vector2.zero;

        foreach (Transform item in context)
        {
            alignmentMove += (Vector2)item.transform.up;
        }
        alignmentMove /= context.Count;

        return(alignmentMove);
    }