コード例 #1
0
ファイル: FormacionGridSD.cs プロジェクト: alexmula11/IADVdej
    protected internal override Steering getSteering(PersonajeBase personaje)
    {
        _finishedLinear = _finishedAngular = false;
        Vector3 newOffset = SimulationManager.DirectionToVector(_target.orientacion + SimulationManager.VectorToDirection(offsetPosition)) * offsetPosition.magnitude;
        Vector2 destino   = SimManagerFinal.positionToGrid(_target.posicion + newOffset);

        if (destino != lastDestiny)
        {
            Vector2        origen    = SimManagerFinal.positionToGrid(personaje.posicion);
            List <Vector3> recorrido = SimManagerFinal.aStarPathV3(origen, destino, personaje.tipo, personaje is PersonajePlayer);
            lastDestiny = destino;
            followPath  = new PathFollowEndSD(recorrido);
        }
        if (followPath.finishedLinear)
        {
            personaje.fakeAlign.orientacion = _target.orientacion + offsetOrientation;
            if (personaje.fakeAlign.orientacion < -System.Math.PI)
            {
                personaje.fakeAlign.orientacion += 2 * (float)System.Math.PI;
            }
            else if (personaje.fakeAlign.orientacion > System.Math.PI)
            {
                personaje.fakeAlign.orientacion -= 2 * (float)System.Math.PI;
            }
            personaje.fakeAlign.transform.eulerAngles = new Vector3(0, (_target.orientacion + offsetOrientation) * Bodi.RadianesAGrados, 0);
            faceSD.target = personaje.fakeAlign;
            parada.getSteering(personaje);
            return(faceSD.getSteering(personaje));
        }
        else
        {
            return(followPath.getSteering(personaje));
        }
    }
コード例 #2
0
ファイル: AggresiveTM.cs プロジェクト: alexmula11/IADVdej
 protected internal override void tioMuerto(PersonajeBase tio)
 {
     recoveringGroup.Remove(tio);
     siegeGroup.Remove(tio);
     defensiveGroup.Remove(tio);
     ofensiveGroup.Remove(tio);
 }
コード例 #3
0
ファイル: AggresiveTM.cs プロジェクト: alexmula11/IADVdej
    public AggresiveTM(Vector2 _baseCoords, Vector2 _enemyBaseCoords, List <PersonajeBase> _npcs, List <PersonajeBase> _players, bool _team) : base(_baseCoords, _enemyBaseCoords, _npcs, _players, _team)
    {
        Random rd = new Random();

        BridgeAttacked = (int)System.Math.Ceiling(Random.value * 2);
        patrullero     = allies[1];
    }
コード例 #4
0
ファイル: AggresiveTM.cs プロジェクト: alexmula11/IADVdej
    private Vector2 randomPointInBridge(int bridge, PersonajeBase unit)
    {
        int whereToGoX = 0;
        int whereToGoY = 0;

        switch (bridge)
        {
        case 1:
            if (unit.tipo == StatsInfo.TIPO_PERSONAJE.INFANTERIA || unit.tipo == StatsInfo.TIPO_PERSONAJE.PESADA)
            {
                whereToGoX = Mathf.RoundToInt(Random.Range(74f, 81f));
                whereToGoY = Mathf.RoundToInt(Random.Range(19f, 24f));
            }
            else
            {
                whereToGoX = Mathf.RoundToInt(Random.Range(82f, 89f));
                whereToGoY = Mathf.RoundToInt(Random.Range(19f, 24f));
            }
            break;

        case 2:
            if (unit.tipo == StatsInfo.TIPO_PERSONAJE.INFANTERIA || unit.tipo == StatsInfo.TIPO_PERSONAJE.PESADA)
            {
                whereToGoX = Mathf.RoundToInt(Random.Range(74f, 81f));
                whereToGoY = Mathf.RoundToInt(Random.Range(39f, 44f));
            }
            else
            {
                whereToGoX = Mathf.RoundToInt(Random.Range(82f, 89f));
                whereToGoY = Mathf.RoundToInt(Random.Range(39f, 44f));
            }
            break;
        }
        return(new Vector2(whereToGoX, whereToGoY));
    }
コード例 #5
0
 public FormacionCuadrado(PersonajeBase lider) : base(lider, 5)
 {
     for (int i = 0; i < maximoMiembros - 1; i++)
     {
         if (i == 0)
         {
             offsetPositions[i] = new Vector3(-7.5f, 0, 7.5f);
         }
         else if (i == 1)
         {
             offsetPositions[i] = new Vector3(7.5f, 0, 7.5f);
         }
         else if (i == 2)
         {
             offsetPositions[i] = new Vector3(-7.5f, 0, -7.5f);
         }
         else
         {
             offsetPositions[i] = new Vector3(7.5f, 0, -7.5f);
         }
     }
     for (int i = 0; i < maximoMiembros - 1; i++)
     {
         float offsetRotation = SimulationManager.VectorToDirection(offsetPositions[i]);
         if (offsetRotation > Math.PI)
         {
             offsetRotation -= (float)Math.PI * 2;
         }
         else if (offsetRotation < Math.PI)
         {
             offsetRotation += (float)Math.PI * 2;
         }
         offsetRotations[i] = offsetRotation;
     }
 }
コード例 #6
0
    protected internal override Steering getSteering(PersonajeBase personaje)
    {
        _finishedLinear = false;
        Steering st       = new Steering();
        float    distance = (_target.posicion - personaje.posicion).magnitude;

        if (distance > _target.innerDetector)
        {
            //2nda manera, acumulación de velocidad
            //st.linear = ((_target.posicion - personaje.posicion) + _target.velocidad * Time.fixedDeltaTime).normalized * personaje.movAcc;
            //                                                      AAA     Un poco de predicsion   AAA
            //1ra manera, superposición de velocidad (velocidad deseada en el primer frame) velocidad desada = velocidad que tienes + velocidad que pasa el steering
            // --> velocidad que pasa el steering = velocidad deseada - velocidad que tienes
            Vector3 desiredSpeed = (_target.posicion - personaje.posicion).normalized * System.Math.Min(personaje.maxMovSpeed, distance);
            st.linear = (desiredSpeed - personaje.velocidad + _target.velocidad * Time.fixedDeltaTime).normalized * personaje.movAcc;
            //                                                      AAA     Un poco de predicsion   AAA
            _finishedLinear = false;
        }
        else
        {
            st.linear       = -personaje.velocidad.normalized * System.Math.Min(personaje.velocidad.magnitude, personaje.movAcc);
            _finishedLinear = true;
        }
        return(st);
    }
コード例 #7
0
 protected internal override Steering getSteering(PersonajeBase personaje)
 {
     if (!setup)
     {
         float minDist      = Mathf.Infinity;
         int   nearestPoint = -1;
         for (int i = 0; i < path.Count; i++)
         {
             if ((path[i] - personaje.posicion).magnitude < minDist)
             {
                 nearestPoint = i;
                 minDist      = (path[i] - personaje.posicion).magnitude;
             }
         }
         setup        = true;
         currentPoint = nearestPoint;
     }
     if (pursueSD.finishedLinear)
     {
         currentPoint = (currentPoint + 1) % path.Count;
     }
     pursueSD.target = personaje.fakeMovement;
     personaje.fakeMovement.posicion = path[currentPoint];
     personaje.fakeMovement.moveTo(path[currentPoint]);
     return(pursueSD.getSteering(personaje));
 }
コード例 #8
0
 internal void actualizeAgentDebugInfo(PersonajeBase character)
 {
     debugAgentName.text = "Agent Name: " + character.nick;
     if (character.selectedBehaviour != null)
     {
         debugAgentBehaviour.text = "Selected Behaviour: " + character.selectedBehaviour.GetType().Name;
     }
     else
     {
         debugAgentBehaviour.text = "Selected Behaviour: No behaviour";
     }
     debugAgentLookingDirectionAngle.text = "Looking Direction Angle: " + character.orientacion;
     if (character.steeringActual != null)
     {
         debugAgentSteeringLinear.text  = "Linear Steering: " + character.steeringActual.linear;
         debugAgentSteeringAngular.text = "Angular Steering: " + character.steeringActual.angular;
     }
     else
     {
         debugAgentSteeringLinear.text  = "Linear Steering: (0, 0, 0)";
         debugAgentSteeringAngular.text = "Angular Steering: 0";
     }
     if ((character.selectedBehaviour as FlockingSD) != null)
     {
         debugAgentSteeringCombination.gameObject.SetActive(true);
         FlockingSD flocking = (character.selectedBehaviour as FlockingSD);
         debugAgentSteeringCombination.text = "Dyn Priority: Ch[" + System.Math.Round(flocking.chPercentDyn, 2)
                                              + "] Sep[" + System.Math.Round(flocking.sepPercentDyn, 2) + "] Foll[" + System.Math.Round(flocking.followLeaderPercentDyn, 2) + "]";
     }
     else
     {
         debugAgentSteeringCombination.gameObject.SetActive(false);
     }
 }
コード例 #9
0
    protected internal Vector2 getUnitPointOnBase(PersonajeBase person, Vector2 basePos)
    {
        int index = 0;

        foreach (PersonajeBase ppl in allies)
        {
            if (person == ppl)
            {
                break;
            }
            index++;
        }
        int angle = index * 360 / allies.Count;

        Vector3 radio = new Vector3((float)System.Math.Cos(angle), 0, (float)System.Math.Sin(angle)) * StatsInfo.baseDistaciaCuracion * 0.75f;

        Vector3 destino = SimManagerFinal.gridToPosition(basePos) + radio;

        return(SimManagerFinal.positionToGrid(destino));



        /*Vector3 distance = SimManagerFinal.gridToPosition(basePos) - person.posicion;
         * if (distance.magnitude < StatsInfo.baseDistaciaCuracion)
         * {
         *  return SimManagerFinal.positionToGrid(person.posicion);
         * }
         * else
         * {
         *  distance = distance.normalized* (distance.magnitude  - StatsInfo.baseDistaciaCuracion + 5);
         *  return SimManagerFinal.positionToGrid(person.posicion + distance);
         * }*/
    }
コード例 #10
0
    /*private Vector2 nextMove(int[] minimalSpace, Vector2 position)
     * {
     *
     *  int minorCostIndex = -1, minorCost = int.MaxValue;
     *  for (int i = 0; i < minimalSpace.Length; i++)
     *  {
     *      if (minimalSpace[i] < minorCost)
     *      {
     *          minorCost = minimalSpace[i];
     *          minorCostIndex = i;
     *      }
     *  }
     *  switch (minorCostIndex)
     *  {
     *      case 0: return new Vector2(0, 1);
     *      case 1: return new Vector2(1, 0);
     *      case 2: return new Vector2(0, -1);
     *      case 3: return new Vector2(-1, 0);
     *      default: return new Vector2(0, 0);
     *  }
     * }*/

    protected internal override Steering getSteering(PersonajeBase personaje)
    {
        Vector2 personajePos = SimManagerLRTA.positionToGrid(personaje.posicion);

        if (pesos[(int)Math.Round(personajePos.x)][(int)Math.Round(personajePos.y)] != 0)
        {
            if (setup || pursueSD.finishedLinear)
            {
                minimalSpace(personajePos);
                NodoGrafo nextNode = nextMove();

                pesos[(int)personajePos.x][(int)personajePos.y] = pesos[(int)nextNode.posicionGrid.x][(int)nextNode.posicionGrid.y] + 1;

                personaje.fakeMovement.posicion           = SimManagerLRTA.gridToPosition(nextNode.posicionGrid);
                personaje.fakeMovement.transform.position = SimManagerLRTA.gridToPosition(nextNode.posicionGrid);
                //personaje.innerDetector = 0.5f;
                personaje.fakeMovement.innerDetector = personaje.innerDetector;

                pursueSD.target = personaje.fakeMovement;
                setup           = false;

                nodoActual = nextNode;
            }
            return(pursueSD.getSteering(personaje));
        }
        else
        {
            _finishedLinear = true;
            return(new Steering());
        }
    }
コード例 #11
0
ファイル: PathFollowEndSD.cs プロジェクト: alexmula11/IADVdej
    protected internal override Steering getSteering(PersonajeBase personaje)
    {
        if (currentPoint >= path.Count)
        {
            _finishedAngular = _finishedLinear = true;
            Vector3 cuadrao = SimManagerFinal.gridToPosition(SimManagerFinal.positionToGrid(personaje.posicion));
            personaje.fakeAvoid.posicion = cuadrao;
            personaje.fakeAvoid.moveTo(cuadrao);
            personaje.fakeMovement.posicion = cuadrao;
            personaje.fakeMovement.moveTo(cuadrao);
            return(new Steering());
        }
        personaje.fakeAvoid.posicion = pathEnd;
        personaje.fakeAvoid.moveTo(pathEnd);
        personaje.fakeMovement.posicion = path[currentPoint];
        personaje.fakeMovement.moveTo(path[currentPoint]);

        pursueSD.target = personaje.fakeMovement;
        Steering movActual = pursueSD.getSteering(personaje);

        if (pursueSD.finishedLinear)
        {
            currentPoint++;
        }
        return(movActual);
    }
コード例 #12
0
    protected internal override Steering getSteering(PersonajeBase personaje)
    {
        Steering st = base.getSteering(personaje);

        st.linear = st.linear * (float)offsetRandomizer.NextDouble(); //random offset
        return(st);
    }
コード例 #13
0
ファイル: FormacionSD.cs プロジェクト: alexmula11/IADVdej
    protected internal override Steering getSteering(PersonajeBase personaje)
    {
        _finishedLinear = _finishedAngular = false;
        Vector3 newOffset = SimulationManager.DirectionToVector(_target.orientacion + SimulationManager.VectorToDirection(offsetPosition)) * offsetPosition.magnitude;

        opSD.target = _target;
        opSD.offset = newOffset;
        Steering st = opSD.getSteering(personaje);

        if (opSD.finishedLinear)
        {
            personaje.fakeAlign.orientacion = _target.orientacion + offsetOrientation;
            if (personaje.fakeAlign.orientacion < -System.Math.PI)
            {
                personaje.fakeAlign.orientacion += 2 * (float)System.Math.PI;
            }
            else if (personaje.fakeAlign.orientacion > System.Math.PI)
            {
                personaje.fakeAlign.orientacion -= 2 * (float)System.Math.PI;
            }
            personaje.fakeAlign.transform.eulerAngles = new Vector3(0, (_target.orientacion + offsetOrientation) * Bodi.RadianesAGrados, 0);
            faceSD.target = personaje.fakeAlign;
            st.angular    = faceSD.getSteering(personaje).angular;
        }
        //_finishedLinear = opSD.finishedLinear;
        //_finishedAngular = faceSD.finishedAngular;
        return(st);
    }
コード例 #14
0
    protected internal override Steering getSteering(PersonajeBase personaje)
    {
        Steering st = new Steering();

        st.angular       = SimulationManager.TurnAmountInDirection(personaje.orientacion, SimulationManager.VectorToDirection(personaje.velocidad));
        _finishedAngular = st.angular == 0;
        return(st);
    }
コード例 #15
0
ファイル: WaitSteering.cs プロジェクト: alexmula11/IADVdej
    protected internal override Steering getSteering(PersonajeBase personaje)
    {
        _finishedLinear = _finishedAngular = stopwatch.ElapsedMilliseconds > milis;
        Steering st = new Steering();

        st.linear = -personaje.velocidad;
        return(st);
    }
コード例 #16
0
ファイル: GroupDelegate.cs プロジェクト: alexmula11/IADVdej
    public void OnTriggerStay(Collider other)
    {
        PersonajeBase person = other.gameObject.GetComponent <PersonajeBase>();

        if (!owner.group.Contains(person))
        {
            owner.group.Add(person);
        }
    }
コード例 #17
0
ファイル: WanderSteering.cs プロジェクト: alexmula11/IADVdej
    protected internal override Steering getSteering(PersonajeBase personaje)
    {
        Steering st = new Steering();
        float    angularVariation = (float)randomizer.NextDouble() * rotationLimit - rotationLimit / 2; //rotacion random entre orientacion - limite/2 y orientacion+limite/2
        float    nuevoAngulo      = personaje.orientacion + angularVariation;

        st.angular = SimulationManager.TurnAmountInDirection(personaje.orientacion, SimulationManager.VectorToDirection(personaje.velocidad)); //rotacion random entre orientacion - limite/2 y orientacion+limite/2
        st.linear  = SimulationManager.DirectionToVector(nuevoAngulo) * offset;
        return(st);
    }
コード例 #18
0
 internal void removeMiembro(PersonajeBase person)
 {
     for (int i = 0; i < miembros.Length; i++)
     {
         if (miembros[i] != person)
         {
             miembros[i] = null;
         }
     }
 }
コード例 #19
0
 public Formacion(PersonajeBase lider, int maximoMiembros)
 {
     n_miembros          = 1;
     this.maximoMiembros = maximoMiembros;
     miembros            = new PersonajeBase[maximoMiembros];
     miembros[0]         = lider;
     offsetPositions     = new Vector3[maximoMiembros - 1];
     offsetRotations     = new float[maximoMiembros - 1];
     stopwatch.Start();
 }
コード例 #20
0
    protected internal bool alreadyComingToBase(PersonajeBase unit)
    {
        Vector3 destino = Vector3.zero;

        if (unit.currentAction != null && unit.currentAction is ActionGo)
        {
            destino = SimManagerFinal.gridToPosition(((ActionGo)unit.currentAction).getDestiny());
        }
        return((destino - SimManagerFinal.gridToPosition(baseCoords)).magnitude <= StatsInfo.baseDistaciaCuracion);
    }
コード例 #21
0
 internal virtual bool addMiembro(PersonajeBase nuevo)
 {
     if (n_miembros < maximoMiembros)
     {
         miembros[n_miembros] = nuevo;
         n_miembros++;
         return(true);
     }
     return(false);
 }
コード例 #22
0
ファイル: GameManager.cs プロジェクト: alexmula11/IADVdej
 protected internal void AddMatraca(PersonajeBase matraca)
 {
     if (matraca is PersonajePlayer)
     {
         personajesPlayer.Add(matraca as PersonajePlayer);
     }
     else
     {
         personajesNPC.Add(matraca as PersonajeNPC);
     }
 }
コード例 #23
0
    protected static internal AccionCompuesta createAttackingAction(PersonajeBase sujeto, PersonajeBase receptor)
    {
        ActionGo      goToEnemy   = new ActionGo(sujeto, SimManagerFinal.positionToGrid(receptor.posicion), receptor);
        AccionAttack  attackEnemy = new AccionAttack(sujeto, receptor);
        List <Accion> orders      = new List <Accion> {
            goToEnemy, attackEnemy
        };
        AccionCompuesta ac = new AccionCompuesta(sujeto, orders, true);

        return(ac);
    }
コード例 #24
0
ファイル: PursueSD.cs プロジェクト: alexmula11/IADVdej
    protected internal override Steering getSteering(PersonajeBase personaje)
    {
        Steering st = new Steering();

        st.linear  = skAccSt.getSteering(personaje).linear;
        st.angular = face.getSteering(personaje).angular;

        _finishedLinear  = skAccSt.finishedLinear;
        _finishedAngular = face.finishedAngular;
        return(st);
    }
コード例 #25
0
ファイル: AggresiveTM.cs プロジェクト: alexmula11/IADVdej
 private bool alreadyGoingToBridge(PersonajeBase npc, int whichBridge)
 {
     if (npc.currentAction is ActionGo)
     {
         if (pointInBridge(((ActionGo)npc.currentAction).getDestiny(), whichBridge))
         {
             return(true);
         }
     }
     return(false);
 }
コード例 #26
0
 public FormacionTriangulo(PersonajeBase lider) : base(lider, 4)
 {
     for (int i = 0; i < maximoMiembros - 1; i++)
     {
         offsetPositions[i] = new Vector3((-10f + (i * 10f)), 0, -10f);//Valores de z para el segundo vector -> -5 0 5
     }
     for (int i = 0; i < maximoMiembros - 1; i++)
     {
         offsetRotations[i] = 0;
     }
 }
コード例 #27
0
    protected internal override Steering getSteering(PersonajeBase personaje)
    {
        Steering st = new Steering();

        /*if ((_target.posicion - personaje.posicion).magnitude > _target.innerDetector)
         * {
         *  st.linear = (personaje.posicion - _target.posicion).normalized * personaje.movAcc;
         * }*/
        //NECESITAMOS UNA CONDICION DE CIERRE AQUI TAMBIEN
        st.linear = (personaje.posicion - _target.posicion).normalized /*- personaje.velocidad.normalized*Time.fixedDeltaTime).normalized*/ * personaje.movAcc;
        return(st);
    }
コード例 #28
0
    protected internal override Steering getSteering(PersonajeBase personaje)
    {
        personaje.fakeMovement.posicion      = _target.posicion + offset;
        personaje.fakeMovement.innerDetector = personaje.innerDetector;
        personaje.fakeMovement.moveTo(_target.posicion + offset);
        pursueSD.target = personaje.fakeMovement;
        Steering st = pursueSD.getSteering(personaje);

        _finishedLinear  = pursueSD.finishedLinear;
        _finishedAngular = pursueSD.finishedAngular;
        return(st);
    }
コード例 #29
0
ファイル: GameManager.cs プロジェクト: alexmula11/IADVdej
 protected static internal void addMuerto(PersonajeBase muerto)
 {
     if (muerto is PersonajePlayer)
     {
         muertosAllys.AddLast(muerto as PersonajePlayer);
         playerIA.tioMuerto(muerto);
     }
     else
     {
         muertosEnemys.AddLast(muerto as PersonajeNPC);
         enemyIA.tioMuerto(muerto);
     }
 }
コード例 #30
0
 public ActionGo(PersonajeBase _sujeto, Vector2 destiny, PersonajeBase receptor) : base(_sujeto)
 {
     if (receptor)
     {
         nombreAccion  = "PERSEGUIR";
         this.receptor = receptor;
     }
     else
     {
         nombreAccion = "MOVER";
     }
     this.destiny = destiny;
 }