public void Update() { HashSet <GameObject> visibleNow = FogOfWarUtility.GetVisibleObjects(players); visibleObjetcs.RemoveWhere((GameObject go) => { return(go == null); }); foreach (GameObject gameObject in visibleObjetcs) { if (!visibleNow.Contains(gameObject)) { if (gameObject.GetComponent <INonExplorable>() == null) { MapObject mapObject = gameObject.GetComponent <MapObject>(); switch (mapObject.mapObjectType) { case MapObjectType.Station: StationScout removeStation = null; foreach (StationScout stationScout in knowScoutedStations) { if (stationScout.mapObjectId == mapObject.id) { removeStation = stationScout; break; } } if (removeStation != null) { knowScoutedStations.Remove(removeStation); } break; case MapObjectType.Asteroid: AsteroidScout removeAsteroid = null; foreach (AsteroidScout asteroidScout in knowScoutedAsteroids) { if (asteroidScout.mapObjectId == mapObject.id) { removeAsteroid = asteroidScout; break; } } if (removeAsteroid != null) { knowScoutedAsteroids.Remove(removeAsteroid); } break; } } } } visibleObjetcs = visibleNow; }
private void SetStationConstructionButtonClickCallback(StationConstructor stationConstructor, GameObject button, StationConstruction stationConstruction) { button.GetComponent <Button>().onClick.AddListener(() => { Vector3 spawnPosition = stationConstructor.gameObject.transform.position; GameObject stationPrefab = Spawner.Instance.dummyStationDictionary[stationConstruction.stationType]; GameObject station = Instantiate(stationPrefab, spawnPosition, Quaternion.identity); if (possibleStation != null) { Destroy(possibleStation.gameObject); } station.SetActive(true); FogOfWarUtility.SetRendering(true, station); possibleStation = new PossibleStationConstruction(station, stationConstruction, stationConstructor); ObjectSelector.Instance.lockSelection = true; }); }
private IEnumerator RenderEnumerator() { while (true) { ICollection <GameObject> visibleNow = FogOfWarUtility.GetVisibleObjects(players); foreach (GameObject gameObject in visibleObjects) { if (gameObject != null && !visibleNow.Contains(gameObject)) { if (gameObject.GetComponent <INonExplorable>() == null) { MapObject mapObject = gameObject.GetComponent <MapObject>(); switch (mapObject.mapObjectType) { case MapObjectType.Station: StationController stationController = gameObject.GetComponent <StationController>(); GameObject station = Spawner.Instance.SpawnDummyStation(stationController.stationType, stationController.Station, gameObject.transform.position, gameObject.transform.rotation, stationController.constructionProgress, true); dummyRealGameObjectAssociations.Add(new DummyRealGameObjectAssociation(gameObject, station)); break; case MapObjectType.Asteroid: AsteroidController asteroidController = gameObject.GetComponent <AsteroidController>(); GameObject asteroid = Spawner.Instance.SpawnDummyAsteroid(asteroidController.prefabIndex, asteroidController.resourceType, asteroidController.ResourceQuantity, gameObject.transform.position, gameObject.transform.rotation, true); dummyRealGameObjectAssociations.Add(new DummyRealGameObjectAssociation(gameObject, asteroid)); break; } } FogOfWarUtility.SetRendering(false, gameObject); } } foreach (GameObject gameObject in visibleNow) { if (!visibleObjects.Contains(gameObject)) { FogOfWarUtility.SetRendering(true, gameObject); //if(dummyRealGameObjectAssociations.Conta) dummyRealGameObjectAssociations.RemoveWhere((DummyRealGameObjectAssociation drgoa) => { bool remove = drgoa.real.Equals(gameObject); if (remove) { Destroy(drgoa.dummy); } return(remove); }); } } dummyRealGameObjectAssociations.RemoveWhere((DummyRealGameObjectAssociation drgoa) => { bool remove = drgoa.real == null; if (remove) { Destroy(drgoa.dummy); } return(remove); }); visibleObjects = visibleNow; dummyRealGameObjectAssociations.RemoveWhere((DummyRealGameObjectAssociation drgoa) => { bool remove = drgoa.real.Equals(gameObject); if (remove) { Destroy(drgoa.dummy); } return(remove); }); yield return(null); yield return(null); yield return(null); } }
private void LoadGameSceneData() { List <GameObjectSerializedObjectAssociation <AsteroidControllerPersistance> > asteroids = new List <GameObjectSerializedObjectAssociation <AsteroidControllerPersistance> >(); List <GameObjectSerializedObjectAssociation <AsteroidFieldControllerPersistance> > asteroidFields = new List <GameObjectSerializedObjectAssociation <AsteroidFieldControllerPersistance> >(); List <GameObjectSerializedObjectAssociation <ShipControllerPersistance> > ships = new List <GameObjectSerializedObjectAssociation <ShipControllerPersistance> >(); List <GameObjectSerializedObjectAssociation <BulletControllerPersistance> > bullets = new List <GameObjectSerializedObjectAssociation <BulletControllerPersistance> >(); List <GameObjectSerializedObjectAssociation <StationControllerPersistance> > stations = new List <GameObjectSerializedObjectAssociation <StationControllerPersistance> >(); List <MapObjectSerializedObjectAssociation> mapObjects = new List <MapObjectSerializedObjectAssociation>(); foreach (AsteroidFieldControllerPersistance asteroidFieldControllerPersistance in gameSceneData.asteroidFields) { GameObject field = Spawner.Instance.SpawnAsteroidField(asteroidFieldControllerPersistance.mapObjectPersitance.id, new AsteroidFieldAsteroidSettings(), asteroidFieldControllerPersistance.mapObjectPersitance.localPosition, asteroidFieldControllerPersistance.size, false); asteroidFields.Add(new GameObjectSerializedObjectAssociation <AsteroidFieldControllerPersistance>(field, asteroidFieldControllerPersistance)); mapObjects.Add(new MapObjectSerializedObjectAssociation(field.GetComponent <MapObject>(), asteroidFieldControllerPersistance.mapObjectPersitance)); foreach (AsteroidControllerPersistance acp in asteroidFieldControllerPersistance.asteroids) { Vector3 position = acp.mapObjectPersitance.localPosition + acp.mapObjectPersitance.localPosition; GameObject asteroid; if (acp.prefabIndex == -1) { asteroid = Spawner.Instance.SpawnAsteroid(acp.mapObjectPersitance.id, field.GetComponent <AsteroidFieldController>(), acp.resourceType, acp.resourceQuantity, position, false); } else { asteroid = Spawner.Instance.SpawnAsteroid(acp.prefabIndex, acp.mapObjectPersitance.id, field.GetComponent <AsteroidFieldController>(), acp.resourceType, acp.resourceQuantity, position, false); } asteroids.Add(new GameObjectSerializedObjectAssociation <AsteroidControllerPersistance>(asteroid, acp)); mapObjects.Add(new MapObjectSerializedObjectAssociation(asteroid.GetComponent <MapObject>(), acp.mapObjectPersitance)); } } foreach (BulletControllerPersistance bcp in gameSceneData.bulletControllerPersistances) { GameObject bullet = Spawner.Instance.SpawnBullet(bcp.mapObjectPersitance.id, BulletFactory.getInstance().CreateBullet(bcp.bullet.bulletType).prefab, bcp.mapObjectPersitance.localPosition, bcp.mapObjectPersitance.localRotation); bullets.Add(new GameObjectSerializedObjectAssociation <BulletControllerPersistance>(bullet, bcp)); mapObjects.Add(new MapObjectSerializedObjectAssociation(bullet.GetComponent <MapObject>(), bcp.mapObjectPersitance)); } foreach (PlayerPersistance playerPersistance in gameSceneData.players) { foreach (ShipControllerPersistance sp in playerPersistance.ships) { GameObject ship = Spawner.Instance.SpawnShip(sp.mapObjectPersitance.id, sp.shipType, playerPersistance.player, sp.mapObjectPersitance.localPosition, Quaternion.identity, false); ship.GetComponent <ShipController>().initialized = sp.initialized; ships.Add(new GameObjectSerializedObjectAssociation <ShipControllerPersistance>(ship, sp)); mapObjects.Add(new MapObjectSerializedObjectAssociation(ship.GetComponent <MapObject>(), sp.mapObjectPersitance)); } foreach (StationControllerPersistance scp in playerPersistance.stations) { GameObject station = Spawner.Instance.SpawnStation(scp.mapObjectPersitance.id, scp.stationType, playerPersistance.player, scp.mapObjectPersitance.localPosition, scp.mapObjectPersitance.localRotation, scp.constructionProgress, false); stations.Add(new GameObjectSerializedObjectAssociation <StationControllerPersistance>(station, scp)); mapObjects.Add(new MapObjectSerializedObjectAssociation(station.GetComponent <MapObject>(), scp.mapObjectPersitance)); } } foreach (GameObjectSerializedObjectAssociation <AsteroidFieldControllerPersistance> association in asteroidFields) { association.gameObject.GetComponent <AsteroidFieldController>().SetObject(association.serializedObject); } foreach (GameObjectSerializedObjectAssociation <AsteroidControllerPersistance> association in asteroids) { association.gameObject.GetComponent <AsteroidController>().SetObject(association.serializedObject); } foreach (GameObjectSerializedObjectAssociation <ShipControllerPersistance> association in ships) { ShipController shipController = association.gameObject.GetComponent <ShipController>(); if (shipController.initialized) { shipController.SetObject(association.serializedObject); } } foreach (GameObjectSerializedObjectAssociation <StationControllerPersistance> association in stations) { association.gameObject.GetComponent <StationController>().SetObject(association.serializedObject); } foreach (GameObjectSerializedObjectAssociation <BulletControllerPersistance> association in bullets) { association.gameObject.GetComponent <BulletController>().SetObject(association.serializedObject); } PlayerDatabase.Instance.SetObject(gameSceneData.players); foreach (MapObjectSerializedObjectAssociation association in mapObjects) { association.mapObject.SetObject(association.serializedObject); association.mapObject.gameObject.SetActive(true); } Spawner.Instance.nextId = gameSceneData.nextMapObjectId; if (gameSceneData.shipConstructionManagerPersistance != null) { ShipConstructionManager.Instance.SetObject(gameSceneData.shipConstructionManagerPersistance); } MapObject[] trueMapObjects = GameObject.FindObjectsOfType <MapObject>(); for (int i = 0; i < trueMapObjects.Length; i++) { FogOfWarUtility.SetRendering(false, trueMapObjects[i].gameObject); } }