예제 #1
0
        ///<summary>
        ///initialize using associated entity
        ///</summary>
        ///<param name="entity">associated entity</param>
        public void Initialize(Entity entity)
        {
            _botEntity = entity as BotEntity;

            switch (_team)
            {
                case GameManager.GameManager.Teams.Blue:
                    Color = Microsoft.Xna.Framework.Graphics.Color.Blue.ToVector4();
                    break;
                case GameManager.GameManager.Teams.Red:
                    Color = Microsoft.Xna.Framework.Graphics.Color.Red.ToVector4();
                    break;
                case GameManager.GameManager.Teams.Green:
                    Color = Microsoft.Xna.Framework.Graphics.Color.Green.ToVector4();
                    break;
                case GameManager.GameManager.Teams.Yellow:
                    Color = Microsoft.Xna.Framework.Graphics.Color.Yellow.ToVector4();
                    break;
            }

            Primitive = 6;

            //set the layer
            Layer = 0;
            Size = new Vector2(32, 32);

            T2DPhysicsComponent physics = new T2DPhysicsComponent();
            physics.InverseMass = 0.1f;
            Components.AddComponent(physics);

            if (null == _minimapComponent)
                return;

            _minimapComponent.MiniCam.Mount(this, "", false);
            _minimapComponent.MiniCam.TrackMountRotation = false;
            switch (_team)
            {
                case GameManager.GameManager.Teams.Blue:
                    _minimapComponent.BorderColor =
                        MinimapComponent.BorderColors.Blue;
                    break;
                case GameManager.GameManager.Teams.Red:
                    _minimapComponent.BorderColor =
                        MinimapComponent.BorderColors.Red;
                    break;
                case GameManager.GameManager.Teams.Green:
                    _minimapComponent.BorderColor =
                        MinimapComponent.BorderColors.Green;
                    break;
                case GameManager.GameManager.Teams.Yellow:
                    _minimapComponent.BorderColor =
                        MinimapComponent.BorderColors.Yellow;
                    break;
                default:
                    _minimapComponent.BorderColor =
                        MinimapComponent.BorderColors.Black;
                    break;
            }
            Components.AddComponent(_minimapComponent);
        }
예제 #2
0
        ///<summary>
        ///initialize using associated entity
        ///</summary>
        ///<param name="entity">associated entity</param>
        public void Initialize(Entity entity)
        {
            _botEntity = entity as BotEntity;

            //switch (_team)
            //{
            //    case GameManager.Teams.Blue:
            AnimationData =
                Manager.FindObject<T2DAnimationData>("microbeAnimation");
            //        break;
            //    case GameManager.Teams.Red:
            //        AnimationData =
            //            Manager.FindObject<T2DAnimationData>("microbeAnimation");
            //        break;
            //    case GameManager.Teams.Green:
            //        AnimationData =
            //            Manager.FindObject<T2DAnimationData>("microbeAnimation");
            //        break;
            //    case GameManager.Teams.Yellow:
            //        AnimationData =
            //            Manager.FindObject<T2DAnimationData>("microbeAnimation");
            //        break;
            //}

            //set the layer
            Layer = 0;
            Size = new Vector2(24, 24);

            T2DPhysicsComponent physics = new T2DPhysicsComponent();
            physics.InverseMass = 0.1f;
            Components.AddComponent(physics);

            if (null == _minimapComponent)
                return;

            _minimapComponent.MiniCam.Mount(this, "", false);
            _minimapComponent.MiniCam.TrackMountRotation = false;
            switch (_team)
            {
                case GameManager.GameManager.Teams.Blue:
                    _minimapComponent.BorderColor =
                        MinimapComponent.BorderColors.Blue;
                    break;
                case GameManager.GameManager.Teams.Red:
                    _minimapComponent.BorderColor =
                        MinimapComponent.BorderColors.Red;
                    break;
                case GameManager.GameManager.Teams.Green:
                    _minimapComponent.BorderColor =
                        MinimapComponent.BorderColors.Green;
                    break;
                case GameManager.GameManager.Teams.Yellow:
                    _minimapComponent.BorderColor =
                        MinimapComponent.BorderColors.Yellow;
                    break;
                default:
                    _minimapComponent.BorderColor =
                        MinimapComponent.BorderColors.Black;
                    break;
            }
            Components.AddComponent(_minimapComponent);
        }
 public override void UpdateForce(T2DPhysicsComponent physics, float strength, Vector2 offset, Vector2 direction, float dt)
 {
     strength = strength * (MaxStrength - MinStrength) + MinStrength;
     if (offset.LengthSquared() < 0.0001f || physics.Immovable)
         // skip the mass route -- will work on immovable
         physics.Velocity -= direction * strength * dt;
     else
         // have to use real impulse, multiply by mass
         physics.ApplyImpulse(-direction * strength * physics.Mass * dt, offset);
 }
 public virtual void UpdateForce(T2DPhysicsComponent physics, float strength, Vector2 offset, Vector2 direction, float dt)
 {
     strength = strength * (MaxStrength - MinStrength) + MinStrength;
     // will be modified by inverse mass (and inverse rot inertia)
     physics.ApplyImpulse(-direction * strength * dt, offset);
 }
            public override void UpdateForce(T2DPhysicsComponent physics, float strength, Vector2 offset, Vector2 direction, float dt)
            {
                float rotStrength = strength * (MaximumRotationDrag - MinimumRotationDrag) + MinimumRotationDrag;
                strength = strength * (MaxStrength - MinStrength) + MinStrength;

                // figure velocity due to rotation
                Vector2 vel = new Vector2(-offset.Y, offset.X);
                vel *= 6.28f * physics.AngularVelocity / 360.0f;

                // add in linear velocity
                vel += physics.Velocity;

                float dot = Vector2.Dot(vel, direction);
                if (dot < 0.0f)
                    _ApplyDrag(dot * direction, physics, strength, rotStrength, offset, direction, dt);
            }
            protected void _ApplyDrag(Vector2 vel, T2DPhysicsComponent physics, float strength, float rotStrength, Vector2 offset, Vector2 direction, float dt)
            {
                // adjust rotation velocity based on rotation drag
                if (rotStrength < 0.0f)
                    // handle case where negative force is set
                    rotStrength = 0.0f;
                if (!ConstantDrag)
                    rotStrength *= Math.Abs(physics.AngularVelocity);
                if (rotStrength > AbsoluteDragRotationCap)
                    rotStrength = AbsoluteDragFactor * AbsoluteDragRotationCap;
                rotStrength *= dt;
                if (rotStrength > Math.Abs(physics.AngularVelocity))
                    physics.AngularVelocity = 0.0f;
                else if (physics.AngularVelocity > 0.0f)
                    physics.AngularVelocity -= rotStrength;
                else
                    physics.AngularVelocity += rotStrength;

                float velLen = vel.Length();
                if (velLen > Epsilon.Value)
                    vel.Normalize();

                // adjust by velocity and update interval
                if (!ConstantDrag)
                    strength *= velLen;
                if (strength > AbsoluteDragCap)
                    strength = AbsoluteDragFactor * AbsoluteDragCap;
                strength *= dt;

                // make sure we don't overshoot
                if (strength > velLen)
                    strength = velLen;

                if (!physics.Immovable)
                    physics.ApplyImpulse(-strength * vel * physics.Mass, offset);
                else
                    physics.Velocity -= strength * vel;
            }
            public override void UpdateForce(T2DPhysicsComponent physics, float strength, Vector2 offset, Vector2 direction, float dt)
            {
                float rotStrength = strength * (MaximumRotationDrag - MinimumRotationDrag) + MinimumRotationDrag;
                strength = strength * (MaxStrength - MinStrength) + MinStrength;

                _ApplyDrag(physics.Velocity, physics, strength, rotStrength, offset, direction, dt);
            }