void SpawnPortal(SignalData portalSpawnData) { Vector3 position = portalSpawnData.get <Vector3>("SpawnPosition"); Vector3 direction = portalSpawnData.get <Vector3>("SpawnDirection"); PortalColorData portalColor = portalSpawnData.get <PortalColorData>("PortalColors"); int arenaId = portalSpawnData.get <int>("ArenaId"); Debug.Log(arenaId); var spawnPosition = new Vector3(position.x, 1.4f, position.z) + direction * 0.01f; Quaternion portalRotation = Quaternion.LookRotation(direction); GameObject portalObject = Instantiate(portalPrefab, spawnPosition, portalRotation); GameObject correspondingPortal = null; if (PortalMap.ContainsKey(portalColor)) { if (PortalMap[portalColor].ContainsKey(arenaId)) { Destroy(PortalMap[portalColor][arenaId]); PortalMap[portalColor].Remove(arenaId); } correspondingPortal = getCorrespondingPortal(arenaId, portalColor); } else { PortalMap.Add(portalColor, new Dictionary <int, GameObject>()); } if (correspondingPortal != null) { correspondingPortal.GetComponent <Portal>().changeCorrespondingPortal(portalObject); } portalObject.GetComponent <Portal>().initialize(portalColor, correspondingPortal, arenaId); PortalMap[portalColor].Add(arenaId, portalObject); }
IEnumerator RespawnConsumedFluid(int arenaId, Vector3 location, PortalColorData currentFluidColors) { yield return(new WaitForSeconds(RespawnInterval)); var currentMap = ArenaPointColorMap[arenaId]; var otherMap = ArenaPointColorMap[1 - arenaId]; var currentMapColors = currentMap.Values.ToList(); var otherMapColors = otherMap.Values.ToList(); float probability = Random.value; PortalColorData newColor; if (probability > 0.6) { newColor = GetCurrentSubtractedColors(currentMapColors, currentFluidColors); } else { Debug.Log("Other subtraction"); var subtractedColors = otherMapColors.Except(currentMapColors).ToList(); if (subtractedColors.Count > 0) { newColor = subtractedColors[Random.Range(0, subtractedColors.Count - 1)]; } else { newColor = GetCurrentSubtractedColors(currentMapColors, currentFluidColors); } } SpawnAtPosition(location, newColor, arenaId); }
GameObject getCorrespondingPortal(int arenaId, PortalColorData portalColor) { int otherPortalId = 1 - arenaId; if (PortalMap.ContainsKey(portalColor) && PortalMap[portalColor].ContainsKey(otherPortalId)) { return(PortalMap[portalColor][otherPortalId]); } return(null); }
public void initialize(PortalColorData portalColors, GameObject correspondingPortal, int ArenaId) { IngestionVFX.SetGradient("TrailColor", portalColors.TrailGradient); PortalVFX.SetGradient("PortalColor", portalColors.PrimaryGradient); changeCorrespondingPortal(correspondingPortal); PortaLight.color = portalColors.PrimaryColor; PortalColors = portalColors; this.ArenaId = ArenaId; InitialzeTimoutUI(); }
void SpawnAtPosition(Vector3 position, PortalColorData portalColors, int arenaId) { GameObject portalFluidObject = Instantiate(FluidPrefab, position, Quaternion.identity); portalFluidObject.GetComponent <PortalFluid>().ResetProperties(portalColors, position, arenaId); if (!ArenaPointColorMap.ContainsKey(arenaId)) { ArenaPointColorMap.Add(arenaId, new Dictionary <Vector3, PortalColorData>()); } ArenaPointColorMap[arenaId].Add(position, portalColors); }
public void ResetProperties(PortalColorData portalColors, Vector3 location, int Arenaid) { // set rendererr and particle colors SphereRenderer.material.EnableKeyword("_EMISSION"); SphereRenderer.material.SetColor("_EmissionColor", portalColors.PrimaryColor); SphereRenderer.material.SetColor("_BaseColor", portalColors.PrimaryColor); animator = GetComponent <Animator>(); PortalColors = portalColors; fadeOutAnimationTime = 0.1f; this.Location = location; this.Arenaid = Arenaid; }
void onPortalTimeOut(SignalData data) { int arenaId = data.get <int>("ArenaId"); PortalColorData portalColor = data.get <PortalColorData>("PortalColors"); GameObject otherPortal = getCorrespondingPortal(arenaId, portalColor); if (otherPortal != null) { otherPortal.GetComponent <Portal>().changeCorrespondingPortal(null); } PortalMap[portalColor].Remove(arenaId); Debug.Log("Portal map"); }
// Pick new color except the ones already present in the arena PortalColorData GetCurrentSubtractedColors(List <PortalColorData> currentMapColors, PortalColorData currentFluidColors) { var subtractedColors = Constants.portalColors.Except(currentMapColors).ToList(); subtractedColors.Remove(currentFluidColors); if (subtractedColors.Count > 0) { return(subtractedColors[Random.Range(0, subtractedColors.Count - 1)]); } else { return(Constants.portalColors[Random.Range(0, Constants.portalColors.Count - 1)]); } }
public void ChangeCurrentPortalColor(PortalColorData portalColors) { CurrentPortalColors = portalColors; AimLine.startColor = AimLine.endColor = portalColors.PrimaryColor; //UpdatePortalUIAction(portalColors.PrimaryColor); }