public WallMeshComponents(Wall wall, Texture texture) { this.wall = wall; this.texture = texture; this.gameObject = new GameObject($"Wall {wall.Index} ({wall.Section}: Line {wall.Side.Line.Index}, Side {wall.Side.Index})"); this.Mesh = CreateMesh(); this.Filter = CreateFilter(); this.Renderer = CreateRenderer(); this.Collider = CreateBoxCollider(); this.collisionInfo = CollisionInfo.CreateOn(gameObject, wall); Update(0); }
public void Update(float tickFraction) { SpriteRotations rotations = entity.Frame.SpriteRotations; if (rotations.DoNotRender) { EnsureDisabled(); return; } EnsureEnabled(); // TODO: If the index or the texture does not change, don't do some of the following. int index = CameraManager.CalculateRotationIndex(entity, tickFraction); Texture texture = entity.Frame.SpriteRotations[index]; Renderer.sharedMaterial = texture.Material; // Since the 0-7 range has us looking for 5, 6, or 7, we can check // anything >= 5 to see if we should be mirroring. bool shouldFlip = rotations.Mirrored && index >= 5; Mesh.uv = shouldFlip ? flippedUV : nonFlippedUV; float y = texture.Height.MapUnit() / 2; gameObject.transform.localPosition = new Vector3(0, y, 0); gameObject.transform.localScale = new Vector3(texture.Width, texture.Height, 1); gameObject.transform.localEulerAngles = CameraManager.SpriteEulerAngles; // TODO: Only do this if the brightness level changes. float lightLevel = entity.Sector.LightLevelNormalized; Color color = new Color(lightLevel, lightLevel, lightLevel, 1.0f); Color[] colors = meshDataManager.ColorBufferSwap(color); Mesh.colors = colors; }