private void CreateNew(int a_nLocX) { Sprite sp = new Sprite(); sp.Name = "Obstacle"; sp.LocZ = 5; //TODO: new animation system MemberSpriteBitmap mb = (MemberSpriteBitmap)EndogineHub.Instance.CastLib.GetOrCreate("asteroid01"); //mb.NumFramesPerAxis = new EPoint(7,6); sp.Member = mb; if (a_nLocX <= 0) a_nLocX = GameMain.Instance.CaveWalls.GetMaxX(); float[] walls = GameMain.Instance.CaveWalls.GetWallsYOnX(a_nLocX); Random rnd = new Random(); sp.Loc = new EPointF(a_nLocX, (walls[1]-walls[0])*(float)rnd.NextDouble()+walls[0]); //sp.AutoAnimator.StepSize = 0.1f; sp.Scaling = new EPointF(0.3f,0.3f); BhReportWhenOutside bh = new BhReportWhenOutside(); sp.AddBehavior(bh); bh.Outside+=new CaveHunter.BhReportWhenOutside.OutsideDelegate(bh_Outside); m_obstacles.Add(sp); }
private void btnAdd_Click(object sender, System.EventArgs e) { //TODO: How to dynamically create an object from a string? Use scripting engine? Or a factory? //TODO: How to find all behavior classes? Search in a separate folder? Or register somehow? Behavior bh = null; //TODO: only works in IDE mode. How to do it in normal mode? System.IO.FileInfo finfo = new System.IO.FileInfo(EndogineHub.Instance.CastLib.DirectoryPath); ArrayList aFiles = new ArrayList(); GetAllFiles(finfo.Directory.FullName, "Bh*.cs", ref aFiles); if (false) { } else { System.Runtime.Remoting.ObjectHandle obj = System.Activator.CreateInstance("Tests", "DivStuff.BhSwing"); object o = obj.Unwrap(); bh = (Behavior)o; } //Behavior bh = (Behavior)obj.Unwrap();//typeof("ThisMovie.BhSwing") if (bh != null) { m_sp.AddBehavior(bh); RefreshView(); } }
private void CreateNewTiles(int a_nLocX) { //use perlin noise to generate wall structure ArrayList aNoise = new ArrayList(); for (int x = 0; x < m_nTileWidth; x++) aNoise.Add(0f); m_noise.Offset = new EPointF(a_nLocX, 0); m_noise.FillArray(aNoise); PointF[] aPoints1 = new PointF[m_nTileWidth]; PointF[] aPoints2 = new PointF[m_nTileWidth]; for (int x = 0; x < m_nTileWidth; x++) { m_fCaveHeight*=0.9997f; float fAllowedY = m_rctPlayArea.Height - m_fCaveHeight; m_fMidY=((float)aNoise[x])*fAllowedY; float[] yPair = new float[]{m_fMidY, m_fMidY+m_fCaveHeight}; aPoints1[x] = new PointF(x,yPair[0]); aPoints2[x] = new PointF(x,yPair[1]); m_locYPairs.Add(x+a_nLocX, yPair); } ArrayList aBothTileLines = new ArrayList(); aBothTileLines.Add(new TileLines(aPoints1)); aBothTileLines.Add(new TileLines(aPoints2)); for (int i = 0; i < 2; i++) { TileLines tileLines = (TileLines)aBothTileLines[i]; Bitmap bmp; Graphics g; float fYDiff = tileLines.MaxY-tileLines.MinY+1; bmp = new Bitmap(m_nTileWidth,(int)fYDiff); g = Graphics.FromImage(bmp); g.FillRectangle(new SolidBrush(Color.Black), 0,0,bmp.Width,bmp.Height); //g.DrawLines(new Pen(Color.White, 2), tileLines.Points); //create polygon from lines: PointF[] polygon = tileLines.GetPolygon(i == 1); g.FillPolygon(new SolidBrush(Color.White), polygon); g.Dispose(); MemberSpriteBitmap mb = new MemberSpriteBitmap(bmp); Sprite sp = new Sprite(); sp.Member = mb; sp.LocX = a_nLocX; sp.LocY = tileLines.MinY; if (i == 0) sp.Name = "Ceiling"; else sp.Name = "Floor"; BhReportWhenOutside bh = new BhReportWhenOutside(); sp.AddBehavior(bh); bh.Outside+=new CaveHunter.BhReportWhenOutside.OutsideDelegate(bh_Outside); m_wallSprites.Add(sp); Sprite spFill = new Sprite(); spFill.MemberName = "BG1"; if (i == 0) spFill.Rect = new ERectangleF(sp.LocX, m_rctPlayArea.Top, this.m_nTileWidth, sp.Rect.Top); else spFill.Rect = new ERectangleF(sp.LocX, sp.Rect.Bottom, this.m_nTileWidth, m_rctPlayArea.Bottom-sp.Rect.Bottom); bh = new BhReportWhenOutside(); spFill.AddBehavior(bh); bh.Outside+=new CaveHunter.BhReportWhenOutside.OutsideDelegate(bh_Outside); m_wallSprites.Add(spFill); } }