public int SaveChanges(Account user, string description = null) { var entries = ChangeTracker.Entries().Where(p => p.State == EntityState.Added || p.State == EntityState.Deleted || p.State == EntityState.Modified); var logger = new FrameLogger(user, this); logger.Write(entries, description); return(base.SaveChanges()); }
public static void CreateSingleton(Vector2Int windowSize, PixelColor color) { s_Instance = new Engine(windowSize, color); // create debug area RectInt bound = new RectInt(0, windowSize.Y, 120, 15); FrameLogger.CreateSingleton(bound); }
private void EnterSituation(string sitName) { // setup variable, setup one time var, always var var prevSitName = m_CurrSitName; try { m_CurrSitName = sitName; CurrentSituation = Tree.SituationTables[sitName]; } catch (Exception exp) { FrameLogger.LogError(string.Format(exp.Message + ", SitName {0} not found", sitName)); } //// OnEnterSituation.Invoke(prevSitName, sitName); // the first time if (!VisitedSituation.Contains(sitName)) { VisitedSituation.Add(sitName); // execute one time event try { foreach (var action in CurrentSituation.OneTimeSetValueAction) { action.Operate(); } } catch (Exception ep) { FrameLogger.LogError(ep.Message + ": " + ep.StackTrace); } } try { // execute always event foreach (var action in CurrentSituation.AlwaysSetValueAction) { action.Operate(); } } catch (Exception ep) { FrameLogger.LogError(ep.Message + ": " + ep.StackTrace); } }
public override void PreRender() { foreach (var pos in Node.Bounds.AllPositionsWithin) { var dataPos = pos - Node.Bounds.Position; try { Node.ParentCanvas.SetPixel(Data[dataPos.Y][dataPos.X], pos); } catch { FrameLogger.LogError(Data[0].ToString()); FrameLogger.LogError("Error - " + dataPos.ToString()); } } }
public void Update(float timeStep) { if (!IsActive || IsDead) { Velocity = Vector2Int.Zero; return; } m_MoveTimer += timeStep; if (IsOnGround) { m_GravityTimer = 0; Velocity = new Vector2Int(Velocity.X, 0); } else { m_GravityTimer += timeStep; } int speedY = Velocity.Y; if (speedY > c_MaxSpeedY) { speedY = c_MaxSpeedY; } Velocity = new Vector2Int(0, speedY); if (m_MoveTimer > c_MoveDuration) { Velocity += new Vector2Int(Direction == CharacterDirection.Right ? 1 : -1, 0); m_MoveTimer = 0; } if (m_GravityTimer > c_GravityTimePerPixel) { Velocity += new Vector2Int(0, 1); m_GravityTimer = 0; } FrameLogger.Log(string.Format("{0}- HP: [{1}], OnGnd: [{2}]", Id, Health, IsOnGround)); }
public void Update(float timeStep) { m_TowerMoveTimer += timeStep; // move tower, recycle platforms, generate new platforms if (m_TowerMoveTimer > m_TowerMoveDuration) { TowerTopNode.Translate(new DYTA.Math.Vector2Int(0, -1)); m_TowerMoveTimer = 0; // recycle for (int i = 0; i < m_AllPlatforms.Count; i++) { var platform = m_AllPlatforms[i]; if (TowerTopNode.Bounds.Position.Y - 2 + platform.Collider.Position.Y < 0) { platform.IsActive = false; } } m_SpawnPlatformCounter++; if (m_SpawnPlatformCounter >= c_PlatformOffsetY) { m_SpawnPlatformCounter = 0; if (m_PreviousPlatform == null) { m_PreviousPlatform = CreateNormalPlatform( new Vector2Int(m_TowerSize.X / 2 - c_PlatformWidth / 2 - 1, c_PlatformInitialHeight + c_PlatformOffsetY), new Vector2Int(c_PlatformWidth, 1)); } else { var pos = m_PreviousPlatform.Collider.Position; pos.Y += c_PlatformOffsetY; pos.X = m_RandomGenerator.Next(1, m_TowerSize.X - c_PlatformWidth - 1); int rndToken = m_RandomGenerator.Next(0, 10); if (rndToken < m_SpikeSpawnThreshold) { rndToken = m_RandomGenerator.Next(0, 10); m_SpikeSpawnThreshold -= 2; // spawn normal platform if (rndToken < 6) { m_PreviousPlatform = CreateNormalPlatform(pos, new Vector2Int(c_PlatformWidth, 1)); } // spawn sliding platform else { m_PreviousPlatform = CreateSlidingPlatform(pos, new Vector2Int(c_PlatformWidth, 1)); } } // spawn spike platform else { m_PreviousPlatform = CreateSpikePlatform(pos, new Vector2Int(c_PlatformWidth, 1)); m_SpikeSpawnThreshold += 3; if (m_SpikeSpawnThreshold > c_SpikeSpawnInitialThreshold) { m_SpikeSpawnThreshold = c_SpikeSpawnInitialThreshold; } } } m_LevelCounter++; TotalLevelCounter++; if (m_LevelCounter >= 10) { m_LevelCounter = 0; Difficulty++; if (Difficulty < c_MaxDifficulty) { m_TowerMoveDuration -= c_AddUpPer10Level; } } } } FrameLogger.Log("Difficulty - " + Difficulty); FrameLogger.Log("TotalLevelCounter - " + TotalLevelCounter); FrameLogger.Log("SpikeThreshold - " + m_SpikeSpawnThreshold); // update character for (int i = 0; i < Characters.Count; i++) { var character = Characters[i]; character.Update(timeStep); } // update platform for (int i = 0; i < m_AllPlatforms.Count; i++) { var platform = m_AllPlatforms[i]; platform.Update(timeStep); } // update character movement, collision detection for (int i = 0; i < Characters.Count; i++) { var character = Characters[i]; var velocity = character.Velocity; // check velocity collision for (int j = 0; j < m_AllColliders.Count; j++) { var collider = m_AllColliders[j]; if (!collider.IsActive) { continue; } if (collider != character) { // static object if (collider is StaticWall || collider is DeathZone) { var bounds = new RectInt(collider.Collider.Position + new Vector2Int(0, -(TowerTopNode.Bounds.Position.Y - 1)), collider.Collider.Size); var col = ClampVelocity2D(character.Collider, bounds, velocity, out velocity); if (col.IsTrue) { FrameLogger.Log("TYPE " + collider.GetType()); collider.OnCharacterCollision(character); } } // dynamic object else { var col = ClampVelocity2D(character.Collider, collider.Collider, velocity, out velocity); if (col.IsTrue) { FrameLogger.Log("TYPE " + collider.GetType()); collider.OnCharacterCollision(character); } } } } // move var newPos = character.Collider.Position + velocity; character.SetPosition(newPos); // ground checking after movement character.IsOnGround = false; var bottomBox = new RectInt(character.Collider.Min.X, character.Collider.Max.Y + 1, character.Collider.Width, 1); for (int j = 0; j < m_AllColliders.Count; j++) { var collider = m_AllColliders[j]; if (!collider.IsActive) { continue; } // check bottom bool standOnThis = collider.Collider.Overlap(bottomBox); // invoke Enter / Exit event if (standOnThis) { // not on this platform the previous frame if (!collider.IsCharacterOnThisCollider(character)) { collider.OnCharacterStepOn(character); } } else { // on this platform the previous frame if (collider.IsCharacterOnThisCollider(character)) { collider.OnCharacterLiftOff(character); } } character.IsOnGround |= standOnThis; } // falling out of the zone if (character.Collider.Position.Y + TowerTopNode.Bounds.Position.Y + 1 > m_TowerSize.Y) { character.AddHealth(-999); character.IsActive = false; } if (character.Collider.Position.Y + TowerTopNode.Bounds.Position.Y <= 0) { character.IsActive = false; } //FrameLogger.Log(velocity + newPos.ToString()); } }
protected override void handleOnKeyPressed(ConsoleKeyInfo keyInfo) { if (keyInfo.Key == ConsoleKey.F9) { FrameLogger.Toggle(); } else if (keyInfo.Key == ConsoleKey.F1) { m_OptimizedMode = !m_OptimizedMode; } if (State == GameState.Menu) { if (keyInfo.Key == ConsoleKey.Escape) { IsRunning = false; } else if (keyInfo.Key == ConsoleKey.UpArrow) { m_CurrentMenuSelection = (m_CurrentMenuSelection - 1 < 0) ? c_OptionTexts.Count - 1 : m_CurrentMenuSelection - 1; selectOption(m_CurrentMenuSelection); } else if (keyInfo.Key == ConsoleKey.DownArrow) { m_CurrentMenuSelection = (m_CurrentMenuSelection + 1 > c_OptionTexts.Count - 1) ? 0 : m_CurrentMenuSelection + 1; selectOption(m_CurrentMenuSelection); } else if (keyInfo.Key == ConsoleKey.Enter) { confirmOption(m_CurrentMenuSelection); } } else if (State == GameState.InGame) { for (int i = 0; i < World.Characters.Count; i++) { var character = World.Characters[i]; if (keyInfo.Key == c_InputTable[i, 0]) { character.TurnRight(); } else if (keyInfo.Key == c_InputTable[i, 1]) { character.TurnLeft(); } } if (keyInfo.Key == ConsoleKey.F1) { World.BackgroundImageNode.IsActive = !m_OptimizedMode; } else if (keyInfo.Key == ConsoleKey.Escape) { loadScene(enterMainMenu, delegate { }); } if (IsFinished) { if (keyInfo.Key == ConsoleKey.Enter) { if (m_InputName.Length <= 0) { m_InputName = new StringBuilder("SOMEONE"); } switch (Mode) { case GameMode.SinglePlayer: SaveProgress.AddRecord(GameMode.SinglePlayer, m_InputName.ToString(), World.TotalLevelCounter); break; case GameMode.TwoPlayers: SaveProgress.AddRecord(GameMode.TwoPlayers, m_InputName.ToString(), World.TotalLevelCounter); break; } loadScene(enterMainMenu, delegate { }); } else if (keyInfo.Key == ConsoleKey.Backspace) { if (m_InputName.Length > 0) { m_InputName.Length--; AudioManager.Instance.BeepMusic(80, 20); m_InputText.text = m_InputName.ToString(); } } else if (keyInfo.Key != ConsoleKey.RightArrow && keyInfo.Key != ConsoleKey.LeftArrow) { if (m_InputName.Length < 12) { m_InputName.Append(keyInfo.KeyChar); AudioManager.Instance.BeepMusic(150, 20); m_InputText.text = m_InputName.ToString(); } } } else { if (keyInfo.Key == ConsoleKey.F2) { if (IsPaused) { Resume(); } else { Pause(); } } } } else if (State == GameState.Tutorial) { if (keyInfo.Key == ConsoleKey.Escape) { loadScene(enterMainMenu, delegate { }); } } else if (State == GameState.Leaderboard) { if (keyInfo.Key == ConsoleKey.Escape) { loadScene(enterMainMenu, delegate { }); } } }
private void gameLoop() { long minimumStepPerFrame = 20; var stopwatch = new Stopwatch(); stopwatch.Start(); long timeStep = minimumStepPerFrame; while (true) { // debug //string frameInfo = string.Format("FRAME: {0, -5}- TIMESTEP: {1, -5}- NODE CT: {2, -5}", ++frameCounter, timeStep, UINode.Engine.Instance.NodeIdCounter); //FrameLogger.Log(frameInfo); // input Input.KeyboardListener.Instance.QueryInput(); // logic update update(timeStep); // rendering UINode.Engine.Instance.PreRenderNodes(); UINode.Engine.Instance.RenderNodesToBuffer(); UINode.Engine.Instance.DrawToConsole(); // late logic update, after render postRenderUpdate(timeStep); // logging FrameLogger.DrawFrameLog(); // scene loading if (WillChangeScene) { Console.SetCursorPosition(0, UINode.Engine.Instance.RootNode.Bounds.Min.Y + 0); Console.WriteLine("LOADING......"); WillChangeScene = false; Audio.AudioManager.Instance.End(); UINode.Engine.Instance.Destruction(); m_ExitSceneCall.Invoke(); m_NextSceneInitCall.Invoke(); Audio.AudioManager.Instance.Begin(); } else { // time calculation timeStep = stopwatch.ElapsedMilliseconds; if (timeStep < minimumStepPerFrame) { int sleep = (int)(minimumStepPerFrame - timeStep); System.Threading.Thread.Sleep(sleep); timeStep = minimumStepPerFrame; } stopwatch.Restart(); } if (!IsRunning) { break; } } stopwatch.Stop(); }