public void Restart(FieldComponent field, CounterComponent counter) { for (var x = 0; x < field.Map.GetLength(0); x++) for (var y = 0; y < field.Map.GetLength(1); y++) { field.Map[x, y] = Random.NextInt(SharedData.ColorsCount); } counter.GameOver = false; for (int i = 0; i < counter.Players.Count; i++) { counter.Players[i].Size = 1; } }
protected override void DoAction(Entity entity, TimeSpan gameTime) { base.DoAction(entity, gameTime); var shake = entity.GetComponent <CameraShakeComponent>(); if (!shake.Enabled) { return; } if (shake.OriginalPosition == Vector2.Zero) { shake.OriginalPosition = shake.Camera.Position; } if (Math.Abs(shake.ShakeIntensity) > 0f) { shake.ShakeOffset = shake.ShakeDirection; if (shake.ShakeOffset.X != 0f || shake.ShakeOffset.Y != 0f) { shake.ShakeOffset.Normalize(); } else { shake.ShakeOffset.X = shake.ShakeOffset.X + Random.NextFloat() - 0.5f; shake.ShakeOffset.Y = shake.ShakeOffset.Y + Random.NextFloat() - 0.5f; } // ToDo: this needs to be multiplied by camera zoom so that less shake gets applied when zoomed in shake.ShakeOffset *= shake.ShakeIntensity; shake.ShakeIntensity *= -shake.ShakeDegradation; if (Math.Abs(shake.ShakeIntensity) <= 0.01f) { shake.ShakeIntensity = 0f; shake.Enabled = false; shake.ShakeOffset = shake.OriginalPosition - shake.Camera.Position; shake.OriginalPosition = Vector2.Zero; } } shake.Camera.Position += shake.ShakeOffset; }