コード例 #1
0
        // removes GameObject from all lists depending on type
        public void Remove(GameObject go){
            GameObjects.Remove(go);

            var item = go as ICollidable;
            if (item != null)
                Collidables.Remove(item);

            var moveable = go as IMoveable;
            if (moveable != null)
                Moveables.Remove(moveable);

            var renderable = go as IRenderable;
            if (renderable != null)
                Renderables.Remove(renderable);
        }
コード例 #2
0
        private void AddToList(GameObject go) {
            var item = go as ICollidable;
            if (item != null) {
                Collidables.Add(item);
            }

            var moveable = go as IMoveable;
            if (moveable != null) {
                Moveables.Add(moveable);
            }

            var renderable = go as IRenderable;
            if (renderable != null) {
                Renderables.Add(renderable);
            }
        }
コード例 #3
0
        internal bool CheckRespawnCollision(GameObject newGo, List<ICollidable> collidables){
            var posList = new List<Vector2D>();

            foreach (var c in collidables){
                foreach (var v in ((GameObject) c).Body){
                    posList.Add(v);                    
                }
            }

            foreach (var v in newGo.Body){
                if (posList.Contains(v)){
                    return false;
                }
            }
            return true;
        }
コード例 #4
0
 public void AddGameObject(GameObject newGo){
     GameObjects.Add(newGo);
     AddToList(newGo);
 }
コード例 #5
0
        private void DeathListener(GameObject go){
            LevelManager.Remove(go);

            if (go is IRespawnable){
                var newGo = Activator.CreateInstance(go.GetType());

                do{
                    SpawnManager.Spawn((GameObject) newGo, LevelManager.Width, LevelManager.Height);
                } while (!(CollisionManager.CheckRespawnCollision((GameObject) newGo, LevelManager.Collidables)));

                LevelManager.AddGameObject((GameObject) newGo);
            }
        }
コード例 #6
0
 internal void Spawn(GameObject newGo, int width, int height){
     var r = new Random();
     for (int i = 0; i < newGo.Body.Count; i++){
         newGo.Body[i] = new Vector2D(r.Next(0, width), r.Next(0, height));
     }            
 }
コード例 #7
0
        private void DeathListener(GameObject go){
            var points = go as IPointsValue;
            if (points != null) {
                ScoreManager.AddScore(points);
            } 

            var respawnable = go as IRespawnable;
            if (respawnable != null){
                var newGo = Activator.CreateInstance(respawnable.GetType());

                do{
                    SpawnManager.Spawn((GameObject) newGo, LevelManager.Width, LevelManager.Height);
                } while (!(CollisionManager.CheckRespawnCollision((GameObject) newGo, LevelManager.Collidables)));

                if (points != null) {
                    ((IPointsValue) newGo).Points = ((IPointsValue) go).Points;
                }

                LevelManager.AddGameObject((GameObject) newGo);
            }
            LevelManager.Remove(go);
        }
コード例 #8
0
 protected void SendDeath(GameObject go){
     OnDeathListener(go);
 }