You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

131 lines
4.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Otter;
namespace OtterApp
{
class SceneHandler : Scene
{
Dictionary<string,GameScene> availableScenes;
int activeSceneID = 0;
public SceneHandler()
{
availableScenes = new Dictionary<string, GameScene>();
GameScene DefaultScene = new GameScene("Default");
AddGraphic(DefaultScene.getGraphics());
availableScenes.Add("Default",DefaultScene);
//TestScenes
//createScene("Scene1");
//createScene("Scene2");
//createScene("Scene3");
}
public void createScene(string titel)
{
if (!availableScenes.ContainsKey(titel))
{
GameScene temp = new GameScene(titel);
availableScenes.Add(temp.SCENENAME, temp);
Console.WriteLine("{0} was created", titel);
}
else
Console.WriteLine("Error - Scene Name is allready used");
}
private void loadScene(String loadSceneKey)
{
// loaded scene to adapt graphics & entities
GameScene loadScene;
availableScenes.TryGetValue(loadSceneKey, out loadScene);
// only proceed if scene is enlisted
if (availableScenes.ContainsValue(loadScene))
{
//reset graphics and entities
this.RemoveAll();
List<Entity> EntitiesToAdd = loadScene.GetEntitiesAll();
//adapt the loaded scenes graphics
this.SetGraphic(loadScene.getGraphics());
//adapt the loaded scenes entites
foreach (Entity copyEntity in EntitiesToAdd)
{
this.Add(copyEntity);
}
Console.WriteLine("{0} was loaded",loadScene.SCENENAME);
}
else
Console.WriteLine("Error - Scene '{0}' could not be loaded", loadSceneKey);
}
public void deleteScene(string titel)
{
if (availableScenes.ContainsKey(titel))
availableScenes.Remove(titel);
else
Console.WriteLine("Error - Scene Name is not enlisted");
}
public Scene getCurrentScene()
{
return availableScenes.ElementAt(activeSceneID).Value;
}
public void addEntity(List<Entity> entityToAdd)
{
//funtzt nich eventuell entityToAdd als public list in gamescene oder hier einbauen damit bei loadscene eingebaut werden kann was in der scene gespeichert war
//soll dafür sorgen dass scene "on the fly" neue entities und graphics hinzugefügt werden kann
String tempKey = availableScenes.ElementAt(activeSceneID).Key;
availableScenes.Remove(availableScenes.ElementAt(activeSceneID).Key);
GameScene sceneToAdd = new GameScene(tempKey, entityToAdd);
availableScenes.Add(tempKey, sceneToAdd);
loadScene(tempKey);
}
public String getNextScene()
{
// increase Id of current Scene
activeSceneID++;
// If end of list reset to begin of list
if (activeSceneID == availableScenes.Count)
activeSceneID = 0;
//return scene
return availableScenes.ElementAt(activeSceneID).Key;
}
public override void Update()
{
base.Update();
if (Input.KeyPressed(Key.Space))
{
// When the space bar is pressed switch to the FirstScene.
//Game.SwitchScene(getNextScene());
loadScene(getNextScene());
}
}
}
}