Example #1
0
        private object _spawnUnits(object state)
        {
            var navMeshBounds = _mapGenerator.GetComponentInChildren <MeshRenderer>().bounds;

            // create copies of prefabs to avoid changing the actual prefabs
            var prefabWrapepr = transform.Find("Prefabs");

            _prefabDict = new Dictionary <Faction, Dictionary <Class, GameObject> >();
            for (var faction = 0; faction < Prefabs.Count; faction++)
            {
                var factionPrefabs = Prefabs[faction];
                var factionDict    = new Dictionary <Class, GameObject>();
                for (var unitClass = 0; unitClass < factionPrefabs.Prefabs.Count; unitClass++)
                {
                    var classPrefab = factionPrefabs.Prefabs[unitClass];
                    factionDict.Add((Class)unitClass, Instantiate(classPrefab.Prefab, prefabWrapepr));
                }
                _prefabDict.Add((Faction)faction, factionDict);
            }

            foreach (var faction in _prefabDict.Values)
            {
                foreach (var unitClass in faction)
                {
                    if (!EditorMode)
                    {
                        unitClass.Value.GetComponent <NavMeshAgent>().agentTypeID =
                            _mapGenerator.NavMeshDictionary[unitClass.Key].agentTypeID;
                    }
                    else
                    {
                        // remove all unnecessary
                        unitClass.Value.GetComponent <Unit>().enabled         = false;
                        unitClass.Value.GetComponent <NavMeshAgent>().enabled = false;
                        Destroy(unitClass.Value.GetComponent <Animator>());
                    }
                }
            }

            foreach (var stat in _situation.Stats)
            {
                stat.ApplyTo(_prefabDict[stat.Faction][stat.Class]);
                stat.ApplyTo(_prefabDict[stat.Faction][stat.Class]);
            }

            _unitWrapper = transform.Find("Units");
            foreach (var unit in _situation.Units)
            {
                Instantiate(
                    _prefabDict[unit.Faction][unit.Class],
                    _mapGenerator.RealWorldToUnity(unit.Position),
                    Quaternion.AngleAxis(unit.Rotation, Vector3.up),
                    _unitWrapper);
            }

            return(state);
        }
        private object _enableCamera(object state)
        {
            _mapGenerator = FindObjectOfType <MapGenerator>();
            var navMeshBounds = _mapGenerator.GetComponentInChildren <MeshRenderer>().bounds;

            ViewTarget = navMeshBounds.center;
            _moveCamera();

            return(state);
        }