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é !"); } } }
public void Teleport(float x, float y) { if (RootTime <= 0f) { SerializableVector3 newPos = new SerializableVector3(); newPos.z = x; newPos.x = y; if (GetCellSystem() != null) { WorldState.Cell cell = GetCellSystem().GetCells()[LinkedEntity.CurrentCellID]; if (cell == null) { Debugger.Log("ERREUR : Pas de cellules trouvées !"); newPos.y = LinkedEntity.Position.y; } else { float height = cell.GetHeightFrom2DCoordinates(newPos.z, newPos.x); if (height > -500) { newPos.y = height; } else { newPos.y = LinkedEntity.Position.y; } } } else { Debugger.Log("ERREUR : Pas de CellSystem !"); newPos.y = LinkedEntity.Position.y; } LinkedEntity.Position = newPos; } }
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); }
static void BuildSpellArray() { Spells = new Spell[] // Rédiger ici la liste de tous les sorts et leur code de comportement. TODO : écrire les caractéristiques d'un sort dans un fichier config et leur code dans un fichier LUA. { new Spell( "Warp", // Nom du sort "Warps the caster to the target area", // Description SpellFlags.TARGETS_POSITION, // Flags du sort 0f, // Durée (Duration) 0.5f, // Temps de lancement (CastTime) 0f, // Cooldown 0f, // Coût Sang (Costs[0]) -OnCast 0f, // Coût Phlegm (Costs[1]) -OnCast 20f, // Coût Yellow Bile (Costs[2]) -OnCast 0f, // Coût Black Bile (Costs[3]) -OnCast 0f, // Coût Sang (Costs[0]) -OnCanalise 0f, // Coût Phlegm (Costs[1]) -OnCanalise 0f, // Coût Yellow Bile (Costs[2]) -OnCanalise 0f, // Coût Black Bile (Costs[3]) -OnCanalise (instance) => // Quand le sort est lancé. Lancé après le CastTime. { // Téléporter le lanceur Debugger.Log("Warp se lance"); if (instance.GetTarget() is UnityEngine.Vector3 || instance.GetTarget() is SerializableVector3) { SerializableVector3 pos = (SerializableVector3)instance.GetTarget(); WorldState.Cell targetCell = ((WorldState.CellSystem)instance.GetCaster().GetWorldState().GetData <WorldState.CellSystem>()).GetCellFromPosition(pos.z, pos.x); if (targetCell != null) { pos.y = targetCell.GetHeightFrom2DCoordinates(pos.z, pos.x); } if (instance.GetCaster().GetComponent <EntityMover>() != null) { instance.GetCaster().GetComponent <EntityMover>().Teleport(pos.z, pos.x); instance.GetCaster().GetComponent <EntityMover>().SetRootTime(1f); } else { instance.GetCaster().Position = pos; } } }, (instance) => // Quand le sort est en cours de canalisation (que le joueur n'a pas relâché la touche de lancement et que la durée de vie du sort n'a pas dépassé la variable Duration. { }, (instance) => // Quand le sort est terminé (durée atteinte) { }, (instance) => // Quand le sort est annulé. { } // NOTE : en pratique, le sort Warp n'est pas canalisable donc seule la fonction "OnCast" sera exécutée. // Les autres fonctions sont toujours définies à titre d'exemple. ), new Spell( "BloodToPhlegm", // Nom du sort "Convert 20 Blood into 15 Phlegm", // Description SpellFlags.TARGETS_SELF, // Flags du sort 0f, // Durée (Duration) 0.5f, // Temps de lancement (CastTime) 5f, // Cooldown 20f, // Coût Sang (Costs[0]) -OnCast 0f, // Coût Phlegm (Costs[1]) -OnCast 0f, // Coût Yellow Bile (Costs[2]) -OnCast 0f, // Coût Black Bile (Costs[3]) -OnCast 0f, // Coût Sang (Costs[0]) -OnCanalise 0f, // Coût Phlegm (Costs[1]) -OnCanalise 0f, // Coût Yellow Bile (Costs[2]) -OnCanalise 0f, // Coût Black Bile (Costs[3]) -OnCanalise (instance) => // Quand le sort est lancé. Lancé après le CastTime. { ((HumorsComponent)instance.GetCaster().GetComponent(typeof(HumorsComponent))).ChangePhlegm(15); }, (instance) => // Quand le sort est en cours de canalisation (que le joueur n'a pas relâché la touche de lancement et que la durée de vie du sort n'a pas dépassé la variable Duration. { }, (instance) => // Quand le sort est terminé (durée atteinte) { }, (instance) => // Quand le sort est annulé. { } ), }; SpellsCount = Spells.Count(); } // Fonction de construction des sorts