Exemple #1
0
    /// <summary>
    /// Recherche l'Actor contrôlant l'entité d'ID args[0] et lui assigne un script EntityController.
    /// </summary>
    void SetControlledEntity(object[] args)
    {
        BloodAndBileEngine.Debugger.Log("Prise de contrôle de l'entité " + args[0], UnityEngine.Color.magenta);
        Actor[] actors = UnityEngine.GameObject.FindObjectsOfType <Actor>();
        Actor   act    = null;
        int     i      = 0;
        uint    entityID;

        if (args[0] is string)
        {
            uint.TryParse((string)args[0], out entityID);
        }
        else
        {
            entityID = (uint)args[0];
        }
        while (i < actors.Length && act == null)
        {
            if (actors[i].GetControlledEntity().ID == entityID)
            {
                act = actors[i];
                ControlledEntity = actors[i].GetControlledEntity();
            }
            i++;
        }

        if (act != null && act.GetComponent <EntityController>() == null)
        {
            act.gameObject.AddComponent <EntityController>();
        }
    }
Exemple #2
0
 /// <summary>
 /// Exécutée dès qu'une entité est instanciée dans ce match.
 /// </summary>
 void OnEntitySpawned(BloodAndBileEngine.Entity entity)
 {
     entity.RegisterOnEntityDestroyedCallback(OnEntityDestroyed);
     LivingEntities.Add(entity);
     // Envoi de la commande aux clients
     ModuleMatch.SendCommandToPlayers("CreateEntity", entity.ID);
 }
Exemple #3
0
 /// <summary>
 /// Provoque la destruction de l'entité contrôlée par le joueur.
 /// </summary>
 public override void OnPlayerDisconnected(int coID)
 {
     BloodAndBileEngine.Entity entity = GetControlledEntity(coID);
     if (entity != null)
     {
         entity.Destroy();
     }
 }
Exemple #4
0
    public void SetControlledEntity(int connectionID, BloodAndBileEngine.Entity entity)
    {
        BloodAndBileEngine.Debugger.Log("Le joueur " + connectionID + " contrôle désormais l'entité " + entity.ID);
        bool linkExists = false;

        foreach (PlayerToEntityLink link in PlayerControlledEntities)
        {
            if (link.ConnectionID == connectionID)
            {
                link.Entity = entity; linkExists = true;
            }
        }
        if (!linkExists)
        {
            BloodAndBileEngine.Debugger.Log("Lien crée...");
            PlayerControlledEntities.Add(new PlayerToEntityLink(connectionID, entity));
        }
    }
Exemple #5
0
    private void Update()
    {
        if (EntityIDInitialized)
        {
            BloodAndBileEngine.Entity entity = GetControlledEntity();
            Vector3 xzPosition = transform.position;
            xzPosition.y = 0;
            Vector3 xzEntityPosition = GetControlledEntity().Position;
            xzEntityPosition.y = 0;
            float xzSquareDist = (xzPosition - xzEntityPosition).sqrMagnitude;
            if (TrackPosition)
            {
                // "Lerper" constamment vers la position de l'entité.
                if ((transform.position - entity.Position).sqrMagnitude < 1)
                {
                    transform.position = Vector3.Lerp(transform.position, entity.Position, Time.deltaTime * 4);
                }
                else
                {
                    transform.position = Vector3.Lerp(transform.position, entity.Position, Time.deltaTime / 2);
                }
            }
            else if (xzSquareDist > 16)
            {
                transform.position = entity.Position;
            }

            if (TrackRotation)
            {
                transform.rotation = Quaternion.Lerp(transform.rotation, entity.Rotation, Time.deltaTime * 6);
            }

            // Toujours appliquer la bonne hauteur à la position de l'entité
            float height = GetControlledEntity().GetWorldState().GetData <BloodAndBileEngine.WorldState.CellSystem>().GetCellFromPosition(transform.position.z, transform.position.x).GetHeightFrom2DCoordinates(transform.position.z, transform.position.x);
            transform.Translate(0f, height - transform.position.y, 0f);
        }

        if (GetControlledEntity().Destroyed)
        {
            ReactToEvent("Death");
            Die();
        }
    }
Exemple #6
0
    void OnEntityDestroyed(BloodAndBileEngine.Entity entity)
    {
        BloodAndBileEngine.Debugger.Log("EntitiesStateModule : Entité " + entity.ID + " détruite !");
        LivingEntities.Remove(entity);
        ModuleMatch.SendCommandToPlayers("KillEntity", entity.ID);
        PlayerToEntityLink destroyedLink = null;

        foreach (PlayerToEntityLink link in PlayerControlledEntities)
        {
            if (link.Entity == entity)
            {
                destroyedLink = link;
            }
        }
        if (destroyedLink != null)
        {
            BloodAndBileEngine.Debugger.Log("Destruction de l'entité joueur " + entity.ID, UnityEngine.Color.yellow);
            PlayerControlledEntities.Remove(destroyedLink);
        }
    }
Exemple #7
0
    void SpawnPlayers()
    {
        //Création des joueurs, placement sur la map, et assignation d'un connexionID pour chaque

        List <int> usedCells = new List <int>();

        foreach (int coId in ModuleMatch.GetPlayerConnectionIDs())
        {
            BloodAndBileEngine.WorldState.Cell cell = ModuleMatch.GetModule <MapStateModule>().GetWorldState().GetData <BloodAndBileEngine.WorldState.CellSystem>().FindSpawnPoint(usedCells.ToArray());
            if (cell != null)
            {
                usedCells.Add(cell.ID);
                BloodAndBileEngine.Entity player = SpawnPlayer(coId, cell);
                SetControlledEntity(coId, player);
                BloodAndBileEngine.Debugger.Log("Entité joueur d'ID " + player.ID + " associée à la connexion d'ID " + coId);
            }
            else
            {
                BloodAndBileEngine.Debugger.Log("Aucun point de spawn trouvé !");
            }
        }
    }
Exemple #8
0
    /// <summary>
    /// Création des entités créées, destruction des entités détruites,
    /// et synchronisation des autres.
    /// </summary>
    /// <param name="stateUpdate"></param>
    public void OnStateUpdate(BloodAndBileEngine.Networking.Messaging.NetworkMessages.StateUpdateMessage stateUpdate)
    {
        // Synchronisation
        // Chaque EntitySynchronizationDataObject a un identifiant d'entité à synchroniser, il suffit donc
        // d'appliquer la synchronisation à l'entité en question.
        BloodAndBileEngine.EntitySynchronizationDataObject[] synchObject = (BloodAndBileEngine.EntitySynchronizationDataObject[])(stateUpdate.GetStateUpdateInfo("EntitySynchronization")[0].Information);
        if (synchObject == null || synchObject.Length == 0)
        {
            BloodAndBileEngine.Debugger.Log("ERREUR : pas de EntitySynchronizationDataObject !", UnityEngine.Color.red);
        }
        foreach (BloodAndBileEngine.EntitySynchronizationDataObject SynchData in synchObject)
        {
            BloodAndBileEngine.Entity entity = BloodAndBileEngine.EntitiesManager.GetEntityFromID(SynchData.GetEntityID());
            BloodAndBileEngine.EntitySynchroniserComponent synchComponent = (BloodAndBileEngine.EntitySynchroniserComponent)entity.GetComponent(typeof(BloodAndBileEngine.EntitySynchroniserComponent));
            if (synchComponent != null)
            {
                synchComponent.GetSynchronizationData().SetSynchInfoFromSynchObject(SynchData);

                synchComponent.OnSynch();
            }
        }
    }
Exemple #9
0
    /// <summary>
    /// Appelée lorsqu'une commande "CreateEntity" a été reçue du serveur.
    /// </summary>
    public void OnCreateEntityCommand(params object[] args)
    {
        if (args.Length > 0)
        {
            uint id;
            if (!(args[0] is uint))
            {
                if (args[0] is string)
                {
                    if (!uint.TryParse((string)args[0], out id))
                    {
                        BloodAndBileEngine.Debugger.Log("ERREUR : l'ID de l'entité à créer n'est pas un nombre !", UnityEngine.Color.red);
                        return;
                    }
                }
                else
                {
                    BloodAndBileEngine.Debugger.Log("ERREUR : l'ID de l'entité à créer doit être de type uint ou string !", UnityEngine.Color.red);
                    return;
                }
            }
            else
            {
                id = (uint)args[0];
            }

            // Si on arrive ici, alors id contient une valeur valide.
            BloodAndBileEngine.Entity entity = EntityFactory.BuildEntity(id, UnityEngine.Vector3.zero, UnityEngine.Quaternion.identity, 1.0f, 1.0f);
            if (entity != null)
            {
                EntityRenderer.OnEntityCreation(id);
            }
        }
        else
        {
            BloodAndBileEngine.Debugger.Log("ERREUR : La commande 'CreateEntity' prend un paramètre !", UnityEngine.Color.red);
        }
    }
Exemple #10
0
    public void OnDestroyEntityCommand(params object[] args)
    {
        if (args.Length > 0)
        {
            uint id;
            if (!(args[0] is uint))
            {
                if (args[0] is string)
                {
                    if (!uint.TryParse((string)args[0], out id))
                    {
                        BloodAndBileEngine.Debugger.Log("ERREUR : l'ID de l'entité à détruire n'est pas un nombre !", UnityEngine.Color.red);
                        return;
                    }
                }
                else
                {
                    BloodAndBileEngine.Debugger.Log("ERREUR : l'ID de l'entité à détruire doit être de type uint ou string !", UnityEngine.Color.red);
                    return;
                }
            }
            else
            {
                id = (uint)args[0];
            }

            // Si on arrive ici, alors id contient une valeur valide.

            BloodAndBileEngine.Entity entity = BloodAndBileEngine.EntitiesManager.GetEntityFromID(id);
            entity.Destroy();
        }
        else
        {
            BloodAndBileEngine.Debugger.Log("ERREUR : La commande 'DestroyEntity' prend un paramètre !", UnityEngine.Color.red);
        }
    }
Exemple #11
0
 public BloodAndBileEngine.Entity SpawnPlayer(int playerConnectionID, BloodAndBileEngine.WorldState.Cell cell)
 {
     BloodAndBileEngine.Debugger.Log("SpawnPlayer aux coordonnées " + cell.GetPosition());
     BloodAndBileEngine.Entity player = EntityFactory.BuildPlayer(cell.GetPosition(), UnityEngine.Quaternion.identity, 0.5f, 2.0f);
     return(player);
 }
Exemple #12
0
 public PlayerToEntityLink(int coID, BloodAndBileEngine.Entity e)
 {
     ConnectionID = coID;
     Entity       = e;
 }