public MelonEntity(Player owner, Vector3 position, Vector3 velocity, World world)
            : base(position)
        {
            this.owner = owner;
            this.world = world;

            // Setup physics
            physicsBody = new PhysicsBodyComponent(new Vector3(2f), 0.0001f);
            AddComponent(physicsBody);

            physicsBody.Velocity = velocity * 400;

            physicsBody.CanCollideWithSoft  = true;
            physicsBody.CanBePushedBySoft   = false;
            physicsBody.IsAffectedByGravity = true;

            physicsBody.OnCollision += PhysicsBody_OnCollision;

            // Setup renderer
            if (GlobalNetwork.IsClient)
            {
                renderer = new VoxelRenderComponent();
                AddComponent(renderer);

                renderer.VoxelObject = AssetManager.LoadVoxelObject("Models/melon.aosm", BufferUsageHint.StaticDraw);
            }
        }
        public EditorObject(Vector3 position)
            : base(position)
        {
            renderComponent = new VoxelRenderComponent();
            AddComponent(renderComponent);

            EditorName = GetType().Name;
        }
        public Character(Vector3 position, float height, float crouchHeight, float radius)
            : base(position)
        {
            AddComponent(CharacterController = new CharacterController(new Vector3(radius * 2, height, radius * 2), crouchHeight));

            if (GlobalNetwork.IsClient)
            {
                AddComponent(Renderer = new VoxelRenderComponent());
            }
        }
示例#4
0
        public CommandPost(Vector3 position, Team team)
            : base(position)
        {
            startPosition = position;
            Team          = team;

            positionAnim = new Vector3Anim();

            // Setup physics body
            float   cubeSize = 1.5f; // blockSize * dims
            Vector3 size     = new Vector3(cubeSize * 9, cubeSize * 10, cubeSize * 7);

            PhysicsBody = new VoxelPhysicsBody(size, 2f, cubeSize);
            AddComponent(PhysicsBody);

            PhysicsBody.CanCollideWithSoft  = true;
            PhysicsBody.CanBePushedBySoft   = false;
            PhysicsBody.IsAffectedByGravity = true;
            PhysicsBody.CanBeSteppedOn      = false;

            if (!GlobalNetwork.IsServer)
            {
                // Setup renderer
                renderer = new VoxelRenderComponent();
                AddComponent(renderer);

                string modelPath = team == Team.A ? "Models/commandpost-red.aosm" : "Models/commandpost-blue.aosm";
                renderer.VoxelObject = AssetManager.LoadVoxelObject(modelPath, BufferUsageHint.StaticDraw);

                if (commandpostIconTex == null)
                {
                    commandpostIconTex = GLoader.LoadTexture("Textures/Gui/commandpost.png");
                }

                // Setup icon
                IconRenderer icon = new IconRenderer();
                AddComponent(icon);

                icon.Size   = new Vector2(16, 16);
                icon.Image  = new Image(commandpostIconTex, team == Team.A ? new Color(255, 0, 0, 128) : new Color(0, 0, 255, 128));
                icon.Offset = renderer.VoxelObject.UnitSize / 2f;
            }
        }
示例#5
0
        public Item(ItemManager manager, ItemType type)
        {
            Manager = manager;
            Type    = type;

            ThirdpersonScale = 1f;

            if (GlobalNetwork.IsClient)
            {
                Renderer = new VoxelRenderComponent();
                Renderer.OnlyRenderFor = RenderPass.Normal;
                AddComponent(Renderer);
            }

            Config = InitializeConfig();

            IsEnabled  = false;
            IsDrawable = false;
        }
示例#6
0
        public GrenadeEntity(Player owner, Vector3 position, Vector3 velocity, World world, float throwPower)
            : base(position - new Vector3(0.75f))
        {
            this.owner = owner;
            this.world = world;

            // Setup physics
            PhysicsBody = new PhysicsBodyComponent(new Vector3(1.5f), 0.0001f);
            AddComponent(PhysicsBody);

            PhysicsBody.Velocity = velocity * throwPower;

            PhysicsBody.CanCollideWithSoft        = false;
            PhysicsBody.BounceOnWallCollision     = true;
            PhysicsBody.BounceOnVerticalCollision = true;
            PhysicsBody.VerticalBounceFalloff     = 0.8f;
            PhysicsBody.HorizontalBounceFalloff   = 0.7f;
            PhysicsBody.Friction = 0.2f;

            // Setup renderer
            if (GlobalNetwork.IsClient)
            {
                renderer = new VoxelRenderComponent();
                AddComponent(renderer);

                renderer.VoxelObject = AssetManager.LoadVoxelObject("Models/grenade.aosm", BufferUsageHint.StaticDraw);

                AudioBuffer bounceAudioBuffer = AssetManager.LoadSound("Weapons/Grenade/Bounce.wav");

                if (bounceAudioBuffer != null)
                {
                    bounceAudioSource             = new AudioSource(bounceAudioBuffer);
                    bounceAudioSource.MaxDistance = 200;
                    bounceAudioSource.Gain        = 0.25f;
                }

                PhysicsBody.OnCollision += PhysicsBody_OnCollision;
            }
        }
 public void Batch(VoxelRenderComponent component)
 {
     batch.BatchItem(component.VoxelObject, component, component.RenderFront);
 }