public bool TryCollision(Actor act, Vector2 offsetActor,Vector2 globalOffset) { if (!CollisionRect.isNear(cr, act.cr)) return false; foreach (Tile t in act.tiles) if (TryCollision(t, act.position + offsetActor + globalOffset, position + globalOffset, act.angle)) return true; return false; }
public bool TryCollision(Actor act, Vector2 newPos,Vector2 globalOffset = new Vector2(),float angle = float.NaN) { foreach (Tile t in data) { if (act.TryCollision(t, globalOffset, newPos+globalOffset, (float.IsNaN(angle)) ? act.angle : angle)) return true; } return false; }
public bool Collision(Actor p) { foreach (Tile t in p.tiles) if (Collision(t, p.position)) { if (onCollision != null) onCollision(this, p); Raise("oncollision", this, p); return true; } return false; }
void onSomebodyMapout(Actor act) { act.Stop(); if (act.position.X < 0) act.position.X = 0; if (act.position.Y < 0) act.position.Y = 0; if (act.position.X + act.Width > scn.Background.WidthPix) act.position.X = scn.Background.WidthPix - act.Width; if (act.position.Y + act.Height > scn.Background.HeightPix) act.position.Y = scn.Background.HeightPix - act.Height; }
public bool Collision(Actor act,Vector2 offset) { foreach (Tile t in data) if (CollisionRect.isNear(act.cr,t.cr) && act.Collision(t, offset, true)) { if (onCollision != null) onCollision(this, act); return true; } return false; }
void makeMoveTest(Actor a) { List<Vector2> points = new List<Vector2>(); for (int i=0;i<500;i+=10) for (int j = 0; j < 500; j+=10) { if (scn.TryCollision(a,new Vector2(i,j))) points.Add(new Vector2(i,j)); } }
void onActorMoved(Actor act) { int newX = 0, newY = 0; if (ActorPositionInScreen(act).X > 500) newX += 5; if (ActorPositionInScreen(act).X < 100) newX -= 5; if (ActorPositionInScreen(act).Y < 100) newY -= 5; if (ActorPositionInScreen(act).Y > 300) newY += 5; if (scn.window.X + newX >= 0) scn.window.X += newX; if (scn.window.Y + newY >=0) scn.window.Y +=newY; }
/// <summary> /// LoadContent will be called once per game and is the place to load /// all of your content. /// </summary> protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); uc = new UserControl(); LuaInterfacer li = new LuaInterfacer(); li.SetGlobal("UserControl", uc); li.DoFile("./Content/init.lua"); scn = li.CreateStage(spriteBatch, "main"); mainTheatre.AddStage(scn); scn.CalibrateCollisions(); scn.Reindex(); //ResourceLoader rsldr = new ResourceLoader("./Content/init.lua"); mainHero = li.actorList["Hero"]; //scn = rsldr.CreateStage(spriteBatch,"main"); uc.onKeydown += keyDowned; uc.onMouseLeftDown += mouseMoved; IsMouseVisible = true; mainHero.onCollision += onCollision; mainHero.onMove += onActorMoved; mainHero.speed = 0.5f; mainHero.RotateSpeed = 100; scn.onMapOut += onSomebodyMapout; mainHero.Rotate((float)(Math.PI*2/3)); //makeMoveTest(mainHero); systemFont = Content.Load<SpriteFont>("Courier New"); Text t1 = new Text("main hero"); t1.position.Y = -50; t1.position.X = -50; mainHero.AddText(t1); int middleDisplay = GraphicsDevice.Viewport.Width/2; menu = new Stage(this.spriteBatch, 1024, 768, new Rectangle(0,0,400, 400)); Button newGameButton = new Button("New game", GraphicsDevice, spriteBatch); newGameButton.BackgroundImage = "Plit.png"; newGameButton.onClick += NewGameFunc; Button exitButton = new Button("Exit", GraphicsDevice, spriteBatch); exitButton.BackgroundImage = "Plit.png"; exitButton.onClick += ExitFunc; Panel p = new Panel(GraphicsDevice.Viewport.Width,GraphicsDevice.Viewport.Height); p.position.Y = 10; p.AddControl(newGameButton); p.AddControl(exitButton); menu.AddControl(p); mainTheatre.AddStage(menu); mainTheatre.Disable(scn); //mainTheatre.Disable(menu); }
Vector2 ActorPositionInScreen(Actor act) { return (act.position - scn.window.Location.ToVector2()); }
private void ActorReindex(Actor act) { act.Reindex(new Vector2(0, 0), collisionIndexRect); }
public bool TryCollision(Actor act,Vector2 testPosition) { /*for (int i = 0; i < actors.Count; i++) if (act != actors[i] && actors[i].TryCollision(act,testPosition,new Vector2(window.X,window.Y))) return true;*/ return background.TryCollision(act, testPosition , new Vector2(-window.X, -window.Y)); }
public void MapOutCheck(Actor act) { if (act.position.X + act.Width > background.WidthPix || act.position.Y + act.Height > background.HeightPix || act.position.X < 0 || act.position.Y < 0) { if (act.onMapOut != null) act.onMapOut(act); if (onMapOut != null) onMapOut(act); Raise("onmapout",act); } }
public void addActor(Actor act) { actors.Add(act); act.spriteBatch = this.spriteBatch; act.onMove += ActorReindex; act.onMove += MapOutCheck; }
public Actor CreateActor(string name, Tile fromTile,int startX, int startY) { Actor act = new Actor(name, fromTile,startX,startY); actorList[name] = act; return act; }