using System; using System.Collections.Generic; using OpenTK; using org.budnhead.graphics; namespace org.budnhead.core { public abstract class WorldObject { private List children; public WorldObject() { children = new List(); } public virtual Model3D getModel3D(){ return null; } public readonly BufferedValueInstance Position = new BufferedValueInstance(new Vector3()); public readonly BufferedValueInstance Rotation = new BufferedValueInstance(Matrix4.Identity); public readonly BufferedValueInstance Scale = new BufferedValueInstance(Matrix4.Identity); public Matrix4 Transformation { get { return (Scale.Value * Rotation.Value) * Matrix4.CreateTranslation( Position.Value ) ; } } public Matrix4 BufferedTransformation { get { return (Scale.BufferedValue * Rotation.BufferedValue) * Matrix4.CreateTranslation( Position.BufferedValue ) ; } } public void addChild(WorldObject wo){ if (!children.Contains(wo)){ children.Add(wo); } } public void removeChild(WorldObject wo){ if (children.Contains(wo)){ children.Remove(wo); } } public WorldObject[] Children{ get { return this.children.ToArray(); } } } public class ObjectGroup : WorldObject { } public class DumpObject : WorldObject { Model3D model3d; public Model3D Model3D { get { return this.model3d; } set { this.model3d = value; } } public override Model3D getModel3D() { return model3d; } } }