public SonicManager(SonicEngine engine, CanvasInformation gameCanvas, Action resize) { Instance = this; // SonicToon = new Sonic(); this.engine = engine; this.engine.canvasWidth = jQuery.Window.GetWidth(); this.engine.canvasHeight = jQuery.Window.GetHeight(); gameCanvas.DomCanvas[0].SetAttribute("width", this.engine.canvasWidth.ToString()); gameCanvas.DomCanvas[0].SetAttribute("height", this.engine.canvasHeight.ToString()); jQuery.GetJsonData<JsDictionary<string, SonicImage>>("Content/sprites/sonic.js", data => { sonicSprites = data; }); objectManager = new ObjectManager(this); objectManager.Init(); int scl = 2; Scale = new Point(scl, scl); RealScale = new DoublePoint(1, 1); mainCanvas = gameCanvas; WindowLocation = Constants.DefaultWindowLocation(GameState.Editing, mainCanvas, Scale); BigWindowLocation = Constants.DefaultWindowLocation(GameState.Editing, mainCanvas, Scale); BigWindowLocation.Width = (int)(BigWindowLocation.Width * 1.8); BigWindowLocation.Height = (int)(BigWindowLocation.Height * 1.8); TileAnimations = new List<TileAnimationData>(); AnimationInstances = new List<AnimationInstance>(); //jQuery.GetJson("Content/sprites/explosion.js", data => Animations.Add(new Animation("explosion", data))); ShowHeightMap = false; GoodRing = new Ring(false); ActiveRings = new List<Ring>(); ForceResize = resize; Background = null; CurrentGameState = GameState.Editing; ScreenOffset = new Point(mainCanvas.DomCanvas.GetWidth() / 2 - WindowLocation.Width / 2, mainCanvas.DomCanvas.GetHeight() / 2 - WindowLocation.Height / 2); UIManager = new UIManager.UIManager(this, mainCanvas.Context); ; ClickState = ClickState.PlaceChunk; tickCount = 0; DrawTickCount = 0; InHaltMode = false; waitingForTickContinue = false; waitingForDrawContinue = false; TileChunkDebugDrawOptions = new TileChunkDebugDrawOptions(); }
public void Hit(double x, double y) { if (SonicManager.Instance.DrawTickCount - sonicLastHitTick < 120) return; JustHit = true; Ysp = -4; Xsp = 2 * ( ( X - x ) < 0 ? -1 : 1 ); sonicLastHitTick = SonicManager.Instance.DrawTickCount; var t = 0; var angle = 101.25; var n = false; var speed = 4; while (t < Rings) { var ring = new Ring(true); SonicManager.Instance.ActiveRings.Add(ring); ring.X = (int) X; ring.Y = (int) Y - 10; ring.Ysp = -Math.Sin(angle) * speed; ring.Xsp = Math.Cos(angle) * speed; if (n) { ring.Ysp *= -1; angle += 22.5; } n = !n; t++; if (t == 16) { speed = 2; angle = 101.25; } } Rings = 0; }