コード例 #1
0
        protected override void PostInitializeComponent()
        {
            ModelComponent model_component = ParentObject.GetComponent(ModelComponent.ID) as ModelComponent;

            if (model_component == null)
            {
                return;
            }
            GameObject go = model_component.GetUnityGameObject();

            if (go == null)
            {
                return;
            }
            Transform child = go.transform.FindChild(m_animation_path);

            if (child == null)
            {
                return;
            }
            m_unity_animation_cmp = child.GetComponent <Animation>();
            PlayerAnimation(AnimationName.IDLE, true);

            LocomotorComponent locomotor_componnet = GetLogicEntity().GetComponent(LocomotorComponent.ID) as LocomotorComponent;

            if (locomotor_componnet != null)
            {
                m_locomotor_animation_speed = (float)locomotor_componnet.LocomotorSpeedRate;
            }
        }
コード例 #2
0
        public void Update(GameTime gameTime)
        {
            if (inputManager.IsKeyDown(Keys.Left))
            {
                ParentObject.Transform.Velocity -= Vector3.Left * speed;
            }
            if (inputManager.IsKeyDown(Keys.Right))
            {
                ParentObject.Transform.Velocity += Vector3.Left * speed;
            }
            if (inputManager.IsKeyDown(Keys.Up))
            {
                ParentObject.Transform.Velocity -= Vector3.Forward * speed;
            }
            if (inputManager.IsKeyDown(Keys.Down))
            {
                ParentObject.Transform.Velocity += Vector3.Forward * speed;
            }
            ParentObject.Transform.Velocity *= 0.95f;

            RayCastResult result;

            if (inputManager.GetMouseImpact(out result))
            {
                Vector3 point = result.HitData.Location.ToXNAVector();
                point.Y = ParentObject.Transform.AbsoluteTransform.Translation.Y; //keeps the rotation clean
                Vector3 lookAt = ParentObject.Transform.AbsoluteTransform.Translation - point;
                lookAt.Normalize();
                ParentObject.Transform.SetLookAndUp(lookAt, Vector3.Up);
            }

            ParentObject.GetComponent <PhysicsComponent>().DoCollisionResponse(speed);
        }
コード例 #3
0
 public void Initialise()
 {
     Enabled       = true;
     physicsEntity = ParentObject.GetComponent <PhysicsComponent>();
     input         = SystemCore.Input;
     AddInputBindings();
 }
コード例 #4
0
        public virtual void AssignMatrixParameters()
        {
            var    transform     = ParentObject.GetComponent <TransformComponent>();
            Matrix world         = Matrix.CreateWorld(SystemCore.ActiveCamera.Position, Vector3.Forward, Vector3.Up);
            Matrix worldViewProj = Matrix.CreateScale(ParentObject.Transform.Scale) * world;

            worldViewProj *= SystemCore.ActiveCamera.View;
            worldViewProj *= SystemCore.ActiveCamera.Projection;

            if (ParameterExists("World"))
            {
                effect.Parameters["World"].SetValue(Matrix.CreateScale(ParentObject.Transform.Scale) * world);
            }

            if (ParameterExists("View"))
            {
                effect.Parameters["View"].SetValue(SystemCore.ActiveCamera.View);
            }

            if (ParameterExists("Projection"))
            {
                effect.Parameters["Projection"].SetValue(SystemCore.ActiveCamera.Projection);
            }

            if (ParameterExists("WorldViewProjection"))
            {
                effect.Parameters["WorldViewProjection"].SetValue(worldViewProj);
            }
        }
コード例 #5
0
        public virtual void Draw(GameTime gameTime)
        {
            if (!Visible)
            {
                return;
            }

            PreDraw(gameTime);

            if (ParameterExists("time"))
            {
                effect.Parameters["time"].SetValue((float)gameTime.TotalGameTime.TotalMilliseconds);
            }

            var renderGeometry = ParentObject.GetComponent <RenderGeometryComponent>();

            if (renderGeometry != null)
            {
                SystemCore.GraphicsDevice.SetVertexBuffer(renderGeometry.VertexBuffer);
                SystemCore.GraphicsDevice.Indices = renderGeometry.IndexBuffer;

                GameObjectManager.verts      += renderGeometry.VertexBuffer.VertexCount;
                GameObjectManager.primitives += renderGeometry.PrimitiveCount;


                for (int i = 0; i < effect.CurrentTechnique.Passes.Count; i++)
                {
                    effect.CurrentTechnique.Passes[i].Apply();
                    SystemCore.GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, renderGeometry.VertexBuffer.VertexCount, 0, renderGeometry.PrimitiveCount);
                }
            }

            var modelComponent = ParentObject.GetComponent <ModelComponent>();

            if (modelComponent != null)
            {
                Model m = modelComponent.Model;
                foreach (var mesh in m.Meshes)
                {
                    foreach (ModelMeshPart p in mesh.MeshParts)
                    {
                        SystemCore.GraphicsDevice.SetVertexBuffer(p.VertexBuffer);
                        SystemCore.GraphicsDevice.Indices = p.IndexBuffer;

                        GameObjectManager.verts      += p.VertexBuffer.VertexCount;
                        GameObjectManager.primitives += p.IndexBuffer.IndexCount;

                        for (int i = 0; i < effect.CurrentTechnique.Passes.Count; i++)
                        {
                            effect.CurrentTechnique.Passes[i].Apply();
                            SystemCore.GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, p.PrimitiveCount);
                        }
                    }
                }
            }

            PostDraw(gameTime);
        }
コード例 #6
0
        public void SetHighPrecisionPosition(Vector3 position)
        {
            if (highPrecisionPosition == null)
            {
                highPrecisionPosition = ParentObject.GetComponent <HighPrecisionPosition>();
            }

            highPrecisionPosition.Position = new Vector3d(position);
        }
コード例 #7
0
        void Resurrect()
        {
            StateComponent state_component = ParentObject.GetComponent(StateComponent.ID) as StateComponent;

            if (state_component != null)
            {
                state_component.RemoveState(StateSystem.DEAD_STATE, 0);
            }
        }
コード例 #8
0
        /// <summary>
        /// unity Awake method
        /// is called when the script instance is being loaded
        /// </summary>
        void Awake()
        {
            if (!ParentObject)
            {
                Debug.LogError("BodyColliderScript has not assigned 'ParentObject'"); return;
            }

            // get game character interface
            m_GCharacterOwner = ParentObject.GetComponent <IGameCharacter>();
        }
コード例 #9
0
        public override void OnResurrect()
        {
            StateComponent state_component = ParentObject.GetComponent(StateComponent.ID) as StateComponent;

            if (state_component != null)
            {
                state_component.RemoveState(StateSystem.DEAD_STATE, 0);
            }
            GetLogicWorld().AddSimpleRenderMessage(RenderMessageType.Show, GetOwnerEntityID());
        }
コード例 #10
0
        private void GenerateSphereCollider()
        {
            RenderGeometryComponent geometry = ParentObject.GetComponent <RenderGeometryComponent>();
            List <Vector3>          verts    = geometry.GetVertices();
            BoundingSphere          sphere   = BoundingSphere.CreateFromPoints(verts);

            PhysicsEntity = new Sphere(MonoMathHelper.Translate(ParentObject.Transform.AbsoluteTransform.Translation),
                                       sphere.Radius, 1);
            PhysicsEntity.Tag = ParentObject;
        }
コード例 #11
0
        private void FeelForward()
        {
            DoomComponent playerDoomComponent = ParentObject.GetComponent <DoomComponent>();

            Vector3 pos        = ParentObject.Transform.AbsoluteTransform.Translation;
            Vector3 forwardVec = ParentObject.Transform.AbsoluteTransform.Translation + ParentObject.Transform.AbsoluteTransform.Forward * playerDoomComponent.HitVectorSize;
            Vector3 rightVec   = MonoMathHelper.RotateAroundPoint(forwardVec, ParentObject.Transform.AbsoluteTransform.Translation, Vector3.Up, MathHelper.PiOver4 / 2);
            Vector3 leftVec    = MonoMathHelper.RotateAroundPoint(forwardVec, ParentObject.Transform.AbsoluteTransform.Translation, Vector3.Up, -MathHelper.PiOver4 / 2);

            pos.Y        = 0;
            forwardVec.Y = 0;
            rightVec.Y   = 0;
            leftVec.Y    = 0;



            Color forwardColor = Color.Red;
            Color leftColor    = Color.Red;
            Color rightColor   = Color.Red;


            if (mapHandler.IntersectsLevel(pos, forwardVec))
            {
                forwardColor = Color.Blue;
            }
            if (mapHandler.IntersectsLevel(pos, rightVec))
            {
                rightColor = Color.Blue;

                var strafe = new RestRequest("player/actions", Method.POST);
                strafe.RequestFormat = DataFormat.Json;
                strafe.AddBody(new PlayerAction()
                {
                    type = "strafe-left", amount = 2
                });
                apiHandler.EnqueueCoolDownRequest("strafe-left", strafe, 400, x => { });
            }
            if (mapHandler.IntersectsLevel(pos, leftVec))
            {
                leftColor = Color.Blue;

                var strafe = new RestRequest("player/actions", Method.POST);
                strafe.RequestFormat = DataFormat.Json;
                strafe.AddBody(new PlayerAction()
                {
                    type = "strafe-right", amount = 2
                });
                apiHandler.EnqueueCoolDownRequest("strafe-right", strafe, 400, x => { });
            }

            DebugShapeRenderer.AddLine(pos, forwardVec, forwardColor);
            DebugShapeRenderer.AddLine(pos, leftVec, leftColor);
            DebugShapeRenderer.AddLine(pos, rightVec, rightColor);
        }
コード例 #12
0
        public void KillOwner(int killer_id)
        {
            //ZZWTODO Resurrect

            if (m_die_task != null)
            {
                m_die_task.Cancel();
            }
            LogicWorld logic_world = GetLogicWorld();

            Entity killer = logic_world.GetEntityManager().GetObject(killer_id);

            if (!DieSilently && killer_id != ParentObject.ID && m_killer_generator != null && killer != null)
            {
                EffectApplicationData app_data = RecyclableObject.Create <EffectApplicationData>();
                app_data.m_original_entity_id = ParentObject.ID;
                app_data.m_source_entity_id   = ParentObject.ID;
                m_killer_generator.Activate(app_data, killer);
                RecyclableObject.Recycle(app_data);
            }

            var schedeler = logic_world.GetTaskScheduler();

            if (DieSilently)
            {
                logic_world.AddSimpleRenderMessage(RenderMessageType.Hide, ParentObject.ID);
            }
            else
            {
                HideEntityTask hide_task = LogicTask.Create <HideEntityTask>();
                hide_task.Construct(ParentObject.ID);
                schedeler.Schedule(hide_task, GetCurrentTime(), m_hide_delay);
            }

            ParentObject.DeletePending = true;
            ParentObject.SendSignal(SignalType.Die);
            logic_world.AddSimpleRenderMessage(RenderMessageType.Die, ParentObject.ID);

            StateComponent state_component = ParentObject.GetComponent(StateComponent.ID) as StateComponent;

            if (state_component != null)
            {
                state_component.AddState(StateSystem.DEAD_STATE, 0);
            }

            if (!m_can_resurrect)
            {
                DeleteEntityTask delete_task = LogicTask.Create <DeleteEntityTask>();
                delete_task.Construct(ParentObject.ID);
                schedeler.Schedule(delete_task, GetCurrentTime(), m_delete_delay);
            }

            logic_world.OnKillEntity(killer, GetOwnerEntity());
        }
コード例 #13
0
        public virtual void Draw(GameTime gameTime)
        {
            if (!Visible)
            {
                return;
            }

            Matrix lightViewProj = SystemCore.ShadowMapRenderer.LightViewProj;

            effect.Parameters["LightWorldViewProjection"].SetValue(Matrix.CreateScale(ParentObject.Transform.Scale) * ParentObject.Transform.AbsoluteTransform * lightViewProj);


            var renderGeometry = ParentObject.GetComponent <RenderGeometryComponent>();

            if (renderGeometry != null)
            {
                SystemCore.GraphicsDevice.SetVertexBuffer(renderGeometry.VertexBuffer);
                SystemCore.GraphicsDevice.Indices = renderGeometry.IndexBuffer;

                GameObjectManager.verts      += renderGeometry.VertexBuffer.VertexCount;
                GameObjectManager.primitives += renderGeometry.PrimitiveCount;


                for (int i = 0; i < effect.CurrentTechnique.Passes.Count; i++)
                {
                    effect.CurrentTechnique.Passes[i].Apply();
                    SystemCore.GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, renderGeometry.VertexBuffer.VertexCount, 0, renderGeometry.PrimitiveCount);
                }
            }

            var modelComponent = ParentObject.GetComponent <ModelComponent>();

            if (modelComponent != null)
            {
                Model m = modelComponent.Model;
                foreach (var mesh in m.Meshes)
                {
                    foreach (ModelMeshPart p in mesh.MeshParts)
                    {
                        SystemCore.GraphicsDevice.SetVertexBuffer(p.VertexBuffer);
                        SystemCore.GraphicsDevice.Indices = p.IndexBuffer;

                        GameObjectManager.verts      += p.VertexBuffer.VertexCount;
                        GameObjectManager.primitives += p.IndexBuffer.IndexCount;

                        for (int i = 0; i < effect.CurrentTechnique.Passes.Count; i++)
                        {
                            effect.CurrentTechnique.Passes[i].Apply();
                            SystemCore.GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, p.PrimitiveCount);
                        }
                    }
                }
            }
        }
コード例 #14
0
        private void GenerateBoxCollider()
        {
            RenderGeometryComponent geometry = ParentObject.GetComponent <RenderGeometryComponent>();
            List <Vector3>          verts    = geometry.GetVertices();
            BoundingBox             testBox  = BoundingBox.CreateFromPoints(verts);
            float width  = testBox.Max.X - testBox.Min.X;
            float height = testBox.Max.Y - testBox.Min.Y;
            float depth  = testBox.Max.Z - testBox.Min.Z;

            PhysicsEntity = new Box(new BEPUutilities.Vector3(ParentObject.Transform.AbsoluteTransform.Translation.X,
                                                              ParentObject.Transform.AbsoluteTransform.Translation.X,
                                                              ParentObject.Transform.AbsoluteTransform.Translation.X), width, height, depth, 1);
        }
コード例 #15
0
 protected override void PostInitializeComponent()
 {
     m_target_gathering_param           = new TargetGatheringParam();
     m_target_gathering_param.m_type    = TargetGatheringType.SurroundingRing;
     m_target_gathering_param.m_param1  = m_guard_range;
     m_target_gathering_param.m_faction = FactionRelation.Enemy;
     m_targeting_component = ParentObject.GetComponent(TargetingComponent.ID) as TargetingComponent;
     if (m_targeting_component == null)
     {
         return;
     }
     m_listener_context = SignalListenerContext.CreateForEntityComponent(GetLogicWorld().GenerateSignalListenerID(), ParentObject.ID, m_component_type_id);
     Schedule();
 }
コード例 #16
0
ファイル: Player.cs プロジェクト: veyvin/SystemWars
        public void PostInitialise()
        {
            player = ParentObject as Player;
            this.physicsComponent = ParentObject.GetComponent <PhysicsComponent>();

            mover   = new EntityMover(physicsComponent.PhysicsEntity);
            rotator = new EntityRotator(physicsComponent.PhysicsEntity);
            SystemCore.PhysicsSimulation.Add(mover);
            SystemCore.PhysicsSimulation.Add(rotator);


            mover.LinearMotor.Settings.Servo.SpringSettings.Stiffness /= 10000;
            mover.LinearMotor.Settings.Servo.SpringSettings.Damping   /= 1000;
        }
コード例 #17
0
        protected override void PostInitializeComponent()
        {
            LogicWorld logic_world = GetLogicWorld();
            var        enumerator  = m_index2id.GetEnumerator();

            while (enumerator.MoveNext())
            {
                int skill_index = enumerator.Current.Key;
                int skill_cfgid = enumerator.Current.Value;
                CreateSkill(skill_index, skill_cfgid);
            }
            m_locomotor_cmp    = ParentObject.GetComponent(LocomotorComponent.ID) as LocomotorComponent;
            m_listener_context = SignalListenerContext.CreateForEntityComponent(logic_world.GenerateSignalListenerID(), ParentObject.ID, m_component_type_id);
            ParentObject.AddListener(SignalType.StartMoving, m_listener_context);
        }
コード例 #18
0
        public override EntityComponent Create()
        {
            if (TypeObject.Naming?.Value)
            {
                var namingFactory = new NamingFactory(TypeObject.Naming.Value, GameObject);
                namingFactory.Create();
            }

            var parentLocationComponent = ParentObject.GetComponent <LocationComponent>();

            if (parentLocationComponent)
            {
                Component.Position = parentLocationComponent.EntryCell.ToWorld();
            }

            return(Component);
        }
コード例 #19
0
ファイル: ShipParts.cs プロジェクト: bionick7/4040Machines
    public ShipPart(float initial_health, GameObject obj, float mass)
    {
        OwnObject = obj;
        Transform = obj.transform;
        Mass      = mass;

        ParentObject  = obj.transform.root.gameObject;
        parent_script = ParentObject.GetComponent <ShipControl>();
        if (parent_script == null)
        {
            throw new System.NullReferenceException("No ShipControl here");
        }
        HP                = InitHP = initial_health;
        ParentShip        = parent_script.myship;
        parent_collection = ParentShip.Parts;
        parent_collection.Add(this);
    }
コード例 #20
0
        void ActivateState(StateData data)
        {
            for (int i = 0; i < data.m_disable_componnets.Count; ++i)
            {
                Component component = ParentObject.GetComponent(data.m_disable_componnets[i]);
                if (component != null)
                {
                    component.Disable();
                }
            }
#if COMBAT_CLIENT
            if (data.m_render_effect_cfgid > 0)
            {
                PlayRenderEffectMessage msg = RenderMessage.Create <PlayRenderEffectMessage>();
                msg.ConstructAsPlay(GetOwnerEntityID(), data.m_render_effect_cfgid, FixPoint.MinusOne);
                GetLogicWorld().AddRenderMessage(msg);
            }
#endif
        }
コード例 #21
0
        void StopMoveAnimation()
        {
            if (m_locomotor_component.IsAnimationBlocked)
            {
                return;
            }
            AnimationComponent animation_component = ParentObject.GetComponent(AnimationComponent.ID) as AnimationComponent;

            if (animation_component != null)
            {
                animation_component.PlayerAnimation(AnimationName.IDLE, true);
            }
            AnimatorComponent animator_component = ParentObject.GetComponent(AnimatorComponent.ID) as AnimatorComponent;

            if (animator_component != null)
            {
                animator_component.PlayAnimation(AnimationName.IDLE);
            }
        }
コード例 #22
0
        public override void Awake()
        {
            Parent = ReinterpretObject <DatabaseObject>(ParentObject);
            SynchronizedContexts = new ConcurrentDictionary <int, DatabaseContext>();
            RemovableIdentifiers = new ConcurrentStack <int>();

            var visualUpdater = ParentObject.GetComponent <DatabaseVisualUpdaterComponent>();

            if (visualUpdater != null)
            {
                visualUpdater.AddUpdatabableControl(new UpdatableControl("SyncContextsInfoLabel", (control) =>
                {
                    control.Text = $"Synchronized contexts: {SynchronizedContexts.Count}";
                }));

                visualUpdater.AddUpdatabableControl(new UpdatableControl("QueriesProgress", (control) =>
                {
                    if (control is Guna2ProgressBar progress)
                    {
                        progress.Maximum = Settings.Read <int>("max_queries_limiter", "statistics");
                        progress.Value   = CurrentQueriesSummaryInfo;
                    }
                }));
                visualUpdater.AddUpdatabableControl(new UpdatableControl("QueriesCountLabel", (control) =>
                {
                    control.Text = $"{CurrentQueriesSummaryInfo} / {Settings.Read<int>("max_queries_limiter", "statistics")}";
                }));

                visualUpdater.AddUpdatabableControl(new UpdatableControl("AccessesProgress", (control) =>
                {
                    if (control is Guna2ProgressBar progress)
                    {
                        progress.Maximum = Settings.Read <int>("max_accesses_limiter", "statistics");
                        progress.Value   = CurrentAccessesSummaryInfo;
                    }
                }));
                visualUpdater.AddUpdatabableControl(new UpdatableControl("AccessesCountLabel", (control) =>
                {
                    control.Text = $"{CurrentAccessesSummaryInfo} / {Settings.Read<int>("max_accesses_limiter", "statistics")}";
                }));
            }
        }
コード例 #23
0
        protected override void PostInitializeComponent()
        {
            m_model_component = ParentObject.GetComponent(ModelComponent.ID) as ModelComponent;
            if (m_model_component == null)
            {
                return;
            }
            GameObject go = m_model_component.GetUnityGameObject();

            if (go == null)
            {
                return;
            }
            m_interpolation_tr = go.transform;
            m_model_component.SetPredictComponent(this);
            Entity entity = GetLogicEntity();

            m_position_component  = entity.GetComponent(PositionComponent.ID) as PositionComponent;
            m_locomotor_component = entity.GetComponent(LocomotorComponent.ID) as LocomotorComponent;
        }
コード例 #24
0
        FixPoint CalculateFinalDamageAmount(Damage damage, Entity attacker)
        {
            FixPoint damage_amount = damage.m_damage_amount;

            if (attacker != null)
            {
                DamageModificationComponent attacker_cmp = attacker.GetComponent(DamageModificationComponent.ID) as DamageModificationComponent;
                if (attacker_cmp != null)
                {
                    damage_amount = attacker_cmp.ApplyModifiersToDamage(damage, damage_amount, ParentObject, true);
                }
            }
            DamageModificationComponent self_cmp = ParentObject.GetComponent(DamageModificationComponent.ID) as DamageModificationComponent;

            if (self_cmp != null)
            {
                damage_amount = self_cmp.ApplyModifiersToDamage(damage, damage_amount, attacker, false);
            }
            return(damage_amount);
        }
コード例 #25
0
        void PlayMoveAnimation(Vector3 direction)
        {
            if (m_locomotor_component.IsAnimationBlocked)
            {
                return;
            }
            m_model_component.SetBaseAngle(Mathf.Atan2(-direction.z, direction.x) * 180 / Mathf.PI);
            AnimationComponent animation_component = ParentObject.GetComponent(AnimationComponent.ID) as AnimationComponent;

            if (animation_component != null)
            {
                animation_component.PlayerAnimation(animation_component.LocomotorAnimationName, true);
            }
            AnimatorComponent animator_component = ParentObject.GetComponent(AnimatorComponent.ID) as AnimatorComponent;

            if (animator_component != null)
            {
                animator_component.PlayAnimation(animator_component.LocomotorAnimationName);
            }
        }
コード例 #26
0
        //FixPoint m_tolerance = FixPoint.One / FixPoint.Ten;
        //Vector3FP m_destination = new Vector3FP(new FixPoint(99999), FixPoint.Zero, new FixPoint(99999));

        public bool FindPath(Vector3FP destination)
        {
            if (!IsEnable())
            {
                return(false);
            }
            //if (FixPoint.Abs(destination.x - m_destination.x) + FixPoint.Abs(destination.z - m_destination.z) < m_tolerance)
            //    return true;
            LocomotorComponent locomotor_cmp = ParentObject.GetComponent(LocomotorComponent.ID) as LocomotorComponent;

            if (locomotor_cmp == null)
            {
                return(false);
            }
            PositionComponent position_cmp = ParentObject.GetComponent(PositionComponent.ID) as PositionComponent;

            if (position_cmp == null)
            {
                return(false);
            }
            GridGraph graph = position_cmp.GetGridGraph();

            if (graph == null)
            {
                return(false);
            }
            if (!graph.FindPath(position_cmp.CurrentPosition, destination))
            {
                locomotor_cmp.StopMoving();
                return(false);
            }
            List <Vector3FP> path = graph.GetPath();

            if (!locomotor_cmp.MoveAlongPath(path, false))
            {
                return(false);
            }
            //m_destination = destination;
            return(true);
        }
コード例 #27
0
        public virtual void AssignMatrixParameters()
        {
            var    transform     = ParentObject.GetComponent <TransformComponent>();
            Matrix worldViewProj = Matrix.CreateScale(ParentObject.Transform.Scale) * transform.AbsoluteTransform;

            worldViewProj *= SystemCore.GetCamera(Camera).View;
            worldViewProj *= SystemCore.GetCamera(Camera).Projection;

            if (ParameterExists("World"))
            {
                effect.Parameters["World"].SetValue(Matrix.CreateScale(ParentObject.Transform.Scale) * transform.AbsoluteTransform);
            }

            if (ParameterExists("View"))
            {
                effect.Parameters["View"].SetValue(SystemCore.GetCamera(Camera).View);
            }

            if (ParameterExists("Projection"))
            {
                effect.Parameters["Projection"].SetValue(SystemCore.GetCamera(Camera).Projection);
            }

            if (ParameterExists("WorldViewProjection"))
            {
                effect.Parameters["WorldViewProjection"].SetValue(worldViewProj);
            }

            if (ParameterExists("CameraPosition"))
            {
                effect.Parameters["CameraPosition"].SetValue(SystemCore.GetCamera(Camera).Position);
            }

            if (ParameterExists("ViewInvert"))
            {
                effect.Parameters["ViewInvert"].SetValue(Matrix.Invert(SystemCore.GetCamera(Camera).View));
            }
        }
コード例 #28
0
        public virtual void Draw(GameTime gameTime)
        {
            if (!Visible)
            {
                return;
            }

            PreDraw(gameTime);

            var renderGeometry = ParentObject.GetComponent <RenderGeometryComponent>();

            SystemCore.GraphicsDevice.SetVertexBuffer(renderGeometry.VertexBuffer);
            SystemCore.GraphicsDevice.Indices = renderGeometry.IndexBuffer;

            GameObjectManager.verts      += renderGeometry.VertexBuffer.VertexCount;
            GameObjectManager.primitives += renderGeometry.PrimitiveCount;


            for (int i = 0; i < effect.CurrentTechnique.Passes.Count; i++)
            {
                effect.CurrentTechnique.Passes[i].Apply();
                SystemCore.GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, renderGeometry.VertexBuffer.VertexCount, 0, renderGeometry.PrimitiveCount);
            }
        }
コード例 #29
0
        private void AssignTextureParameters()
        {
            //check it has a texture

            var material = ParentObject.GetComponent <MaterialComponent>();

            if (material != null)
            {
                if (!string.IsNullOrEmpty(material.TextureName))
                {
                    Texture2D t = SystemCore.ContentManager.Load <Texture2D>(material.TextureName);

                    if (ParameterExists("ModelTexture"))
                    {
                        effect.Parameters["ModelTexture"].SetValue(t);
                    }

                    if (ParameterExists("TextureIntensity"))
                    {
                        effect.Parameters["TextureIntensity"].SetValue(material.TextureIntensity);
                    }
                }
            }
        }
コード例 #30
0
        public virtual void Draw(GameTime gameTime)
        {
            if (!Visible)
            {
                return;
            }

            var tempDepthState = new DepthStencilState();

            tempDepthState.DepthBufferWriteEnable       = false;
            SystemCore.GraphicsDevice.DepthStencilState = tempDepthState;
            PreDraw(gameTime);

            var renderGeometry = ParentObject.GetComponent <RenderGeometryComponent>();

            SystemCore.GraphicsDevice.SetVertexBuffer(renderGeometry.VertexBuffer);
            SystemCore.GraphicsDevice.Indices = renderGeometry.IndexBuffer;

            GameObjectManager.verts      += renderGeometry.VertexBuffer.VertexCount;
            GameObjectManager.primitives += renderGeometry.PrimitiveCount;


            foreach (EffectPass pass in effect.CurrentTechnique.Passes)
            {
                pass.Apply();
                SystemCore.GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, renderGeometry.VertexBuffer.VertexCount, 0, renderGeometry.PrimitiveCount);
            }

            PostDraw(gameTime);

            var depthState = new DepthStencilState();

            depthState.DepthBufferEnable                = true;
            depthState.DepthBufferWriteEnable           = true;
            SystemCore.GraphicsDevice.DepthStencilState = depthState;
        }