// method adding observer to a game object public void AddObserver(Subject.Name name, GameObject go) { Observer raw = (Observer)this.PullFromReserved(); // adding derived observer based on name if (name == Subject.Name.LeftKey || name == Subject.Name.RightKey) { // for left key and right key event // create a move observer to listen MoveObserver mo = (MoveObserver)raw; mo.set(name, (MoveProxy)go.pProxy); // downcasting dangerous // Add new observer to the list this.Add(mo); } }
// Subscribe game object to subject public void Subscribe(GameObject go) { // TODO: add null observer Observer obs = null; // adding derived observer based on name if (name == Subject.Name.LeftKey || name == Subject.Name.RightKey) { // for left key and right key event // create a move observer to listen obs = new MoveObserver(); ((MoveObserver)obs).set(name, (MoveProxy)go.pProxy); } else if (name == Name.SpaceKey) { // for space key, create a shoot observer obs = new ShootObserver(); } // Add new observer to the list this.AddObserver(obs); }