예제 #1
0
        /// <summary>Overridden from <see cref="Engine.EntitySystem.Entity.OnPostCreate(Boolean)"/>.</summary>
        protected override void OnPostCreate(bool loaded)
        {
            base.OnPostCreate(loaded);

            SubscribeToTickEvent();

            //init doorBodyInitPosition and doorBody
            if (PhysicsModel != null)
            {
                for (int n = 0; n < PhysicsModel.Bodies.Length; n++)
                {
                    if (PhysicsModel.Bodies[n].Name == "door" || PhysicsModel.Bodies[n].Name == "door1")
                    {
                        Mat4 transform = PhysicsModel.ModelDeclaration.Bodies[n].GetTransform();
                        doorBody1InitPosition = transform.Item3.ToVec3();
                    }
                    else if (PhysicsModel.Bodies[n].Name == "door2")
                    {
                        Mat4 transform = PhysicsModel.ModelDeclaration.Bodies[n].GetTransform();
                        doorBody2InitPosition = transform.Item3.ToVec3();
                    }
                }

                doorBody1 = PhysicsModel.GetBody("door1");
                if (doorBody1 == null)
                {
                    doorBody1 = PhysicsModel.GetBody("door");
                }
                doorBody2 = PhysicsModel.GetBody("door2");
            }

            UpdateDoorBodies();
            UpdateAttachedObjects();
        }
예제 #2
0
        protected override void OnTick()
        {
            base.OnTick();

            if (firstWay == true)
            {
                ActivateWayMovement();
            }

            UpdateGeneralTask();
            CalculateThings();

            chassisBody = PhysicsModel.GetBody("main");
            if (chassisBody == null)
            {
                Log.Error("Emrah Helli: \"main\" chassisBody dose not exists.");
                return;
            }

            float diff  = Position.Z - flyHeight;
            float force = -diff - chassisBody.LinearVelocity.Z;

            MathFunctions.Clamp(ref force, -10, 10);

            chassisBody.AddForce(ForceType.GlobalAtLocalPos, TickDelta,
                                 new Vec3(0, 0, force * 3) * chassisBody.Mass, new Vec3(0, 0, 1));

            chassisBody.AngularDamping = 1;

            this.flyHeight = TaskPosition.Z;

            float ZA = ZADiffAngle * 4;

            if (ZA < 20 && ZA > -20)
            {
                chassisBody.AngularVelocity = new Vec3
                                                  (chassisBody.AngularVelocity.X, chassisBody.AngularVelocity.Y, ZA);
            }
            else if (ZA > 20)
            {
                chassisBody.AngularVelocity = new Vec3
                                                  (chassisBody.AngularVelocity.X, chassisBody.AngularVelocity.Y, -2);
            }
            else if (ZA < -20)
            {
                chassisBody.AngularVelocity = new Vec3
                                                  (chassisBody.AngularVelocity.X, chassisBody.AngularVelocity.Y, 2);
            }

            chassisBody.AddForce(ForceType.LocalAtLocalPos, TickDelta, new Vec3(Velocity * chassisBody.Mass, 0, 0), new Vec3(-1, 0, 0));
            chassisBody.LinearDamping = 1;
            //check outside Map position
            Bounds checkBounds = Map.Instance.InitialCollisionBounds;

            checkBounds.Expand(new Vec3(300, 300, 10000));
            if (!checkBounds.IsContainsPoint(Position))
            {
                SetDeleted();
            }
        }
예제 #3
0
        private void Client_ReceiveHitCall(RemoteEntityWorld sender, ReceiveDataReader reader)
        {
            Vec3      hitPosition      = reader.ReadVec3();
            string    hitShapeBodyName = reader.ReadString();
            string    hitShapeName     = reader.ReadString();
            Vec3      hitNormal        = reader.ReadVec3();
            MapObject hitMapObject     = Entities.Instance.GetByNetworkUIN(reader.ReadVariableUInt32()) as MapObject;

            if (!reader.Complete())
            {
                return;
            }

            Position = hitPosition;
            Shape hitShape = null;

            if (PhysicsModel != null)
            {
                Body body = PhysicsModel.GetBody(hitShapeBodyName);
                if (body != null)
                {
                    hitShape = body.GetShape(hitShapeName);
                }
            }
            OnHit(hitShape, hitNormal, hitMapObject);
        }
예제 #4
0
        ///////////////////////////////////////////

        /// <summary>Overridden from <see cref="Engine.EntitySystem.Entity.OnPostCreate(Boolean)"/>.</summary>
        protected override void OnPostCreate(bool loaded)
        {
            base.OnPostCreate(loaded);
            SubscribeToTickEvent();
            CreateThreads();

            magnetBody = PhysicsModel.GetBody("magnet");
            if (magnetBody != null)
            {
                magnetBody.Collision += magnetBody_Collision;
            }
        }
예제 #5
0
        /// <summary>Overridden from <see cref="Engine.EntitySystem.Entity.OnPostCreate(Boolean)"/>.</summary>
        protected override void OnPostCreate(bool loaded)
        {
            base.OnPostCreate(loaded);

            SetTurnToPosition(Position + Rotation.GetForward() * 100);
            if (PhysicsModel != null)
            {
                PhysicsModel.PopFromWorld();

                Damager_Ball        = PhysicsModel.GetBody("Damager_Ball");
                Damager_Ball_Player = PhysicsModel.GetBody("CT");

                //if (Damager_Ball_Player != null)
                //{
                //    //this.Type.BallRadius = .5f;//((Damager_Ball_Player.Shapes[0].Volume * 3f) / (4f * (float)Math.PI) * .333333f);
                //    foreach (Body body in PhysicsModel.Bodies)
                //        body.Collision += new Body.CollisionDelegate(body_Collision);
                //}

                if (!EntitySystemWorld.Instance.IsEditor())
                {
                    Damager_Ball_Player.Shapes[0].Density              = PhysicsDensity;
                    Damager_Ball_Player.Shapes[0].DynamicFriction      = PhysicsDynamicFriction;
                    Damager_Ball_Player.Shapes[0].Restitution          = PhysicsBounciness; //Bounciness
                    Damager_Ball_Player.Shapes[0].StaticFriction       = PhysicsStaticFriction;
                    Damager_Ball_Player.Shapes[0].SpecialLiquidDensity = PhysicsLiquidDensity;
                    Damager_Ball_Player.Shapes[0].ContactGroup         = (int)ContactGroup.Dynamic;
                    Damager_Ball_Player.EnableGravity  = true;
                    Damager_Ball_Player.LinearVelocity = linearVelocityForSerialization;
                }

                if (!EntitySystemWorld.Instance.IsEditor())
                {
                    if (Damager_Ball_Player == null)
                    {
                        Log.Error("Damager_Ball.type: \"Damager_Ball\" body does not exist. The Physics Body is Named incorrectly?");
                    }
                }
                SubscribeToTickEvent();
                CheckPhysicsProperties();
                PhysicsModel.PushToWorld();
            }

            //Incin
            //if activeMaxTurrets turret was out from before RemoveMiniTurret it
            //if (turret != null)
            //{
            //    turret.SetForDeletion(false);
            //    turretTimer = 0; //reset remove timer
            //    activeturrets = 0;  //reset turret counts
            //}
        }
예제 #6
0
        protected override void OnPostCreate(bool loaded)
        {
            base.OnPostCreate(loaded);

            AKJetBody = PhysicsModel.GetBody("Jet");
            if (AKJetBody == null)
            {
                Log.Error("AKJet: \"AKJet\" AKJetBody does not exist.");
                return;
            }
            Stall = false;
            AddTimer();
        }
예제 #7
0
        protected override void OnPostCreate(bool loaded)
        {
            base.OnPostCreate(loaded);

            HelliBody = PhysicsModel.GetBody("Helli");
            if (HelliBody == null)
            {
                Log.Error("Helli: \"Helli\" HelliBody dose not exists.");
                return;
            }

            SubscribeToTickEvent();
        }
예제 #8
0
파일: Forklift.cs 프로젝트: gsaone/forklift
        /// <summary>Overridden from <see cref="Engine.EntitySystem.Entity.OnPostCreate(Boolean)"/>.</summary>
        protected override void OnPostCreate(bool loaded)
        {
            base.OnPostCreate(loaded);
            AddTimer();
            if (!EngineApp.Instance.IsResourceEditor)
            {
                if (PhysicsModel == null)
                {
                    Log.Error("Forklift: Physics model not exists.");
                    return;
                }

                forkliftBody = PhysicsModel.GetBody("forklift");
                if (forkliftBody == null)
                {
                    Log.Error("Forklift: \"forklift\" body not exists.");
                    return;
                }

                leftwheelBody      = PhysicsModel.GetBody("leftwheel");
                rightwheelBody     = PhysicsModel.GetBody("rightwheel");
                forkBody           = PhysicsModel.GetBody("fork");
                up1Body            = PhysicsModel.GetBody("up1");
                up2Body            = PhysicsModel.GetBody("up2");
                b2Body             = PhysicsModel.GetBody("b2");
                b1Body             = PhysicsModel.GetBody("b1");
                wheelRearRightBody = PhysicsModel.GetBody("wheelRearRight");
                wheelRearLeftBody  = PhysicsModel.GetBody("wheelRearLeft");
                foreach (MapObjectAttachedObject attachedObject in AttachedObjects)
                {
                    if (attachedObject.Alias == "leftWheel")
                    {
                        leftWheel.wheelHelpers.Add((MapObjectAttachedHelper)attachedObject);
                    }
                    if (attachedObject.Alias == "rightWheel")
                    {
                        rightWheel.wheelHelpers.Add((MapObjectAttachedHelper)attachedObject);
                    }
                }

                if (leftWheel.wheelHelpers.Count != 0)
                {
                    wheelsPositionYOffset = Math.Abs(leftWheel.wheelHelpers[0].PositionOffset.Y);
                }
            }
            //initialize currentGear
            currentGear = Type.Gears.Find(delegate(ForkliftType.Gear gear)
            {
                return(gear.Number == 0);
            });
        }
예제 #9
0
        protected override void OnPostCreate(bool loaded)
        {
            base.OnPostCreate(loaded);

            AKVTOLBody = PhysicsModel.GetBody("Jet");
            if (AKVTOLBody == null)
            {
                Log.Error("AKVTOL: \"AKVTOL\" AKVTOLBody dose not exists.");
                return;
            }

            AddTimer();

            EngineDir = 90f;
        }
예제 #10
0
        protected override void OnPostCreate(bool loaded)
        {
            base.OnPostCreate(loaded);

            SubscribeToTickEvent();

            if (EntitySystemWorld.Instance.WorldSimulationType != WorldSimulationTypes.Editor)
            {
                if (PhysicsModel == null)
                {
                    Log.Error("Class AKCar: Physics model not exists.");
                    return;
                }

                chassisBody = PhysicsModel.GetBody("AKCar");
                if (chassisBody == null)
                {
                    Log.Error("Class AKCar: \"AKCar\" body dose not exists.");
                    return;
                }

                //chassisBody.Collision += chassisBody_Collision;

                foreach (MapObjectAttachedObject attachedObject in AttachedObjects)
                {
                    if (attachedObject.Alias == "leftTrack")
                    {
                        leftTrack.trackHelpers.Add((MapObjectAttachedHelper)attachedObject);
                    }
                    if (attachedObject.Alias == "rightTrack")
                    {
                        rightTrack.trackHelpers.Add((MapObjectAttachedHelper)attachedObject);
                    }
                }

                if (leftTrack.trackHelpers.Count != 0)
                {
                    tracksPositionYOffset = Math.Abs(leftTrack.trackHelpers[0].PositionOffset.Y);
                }
            }

            //initialize currentGear
            currentGear = Type.Gears.Find(delegate(AKCarType.Gear gear)
            {
                return(gear.Number == 0);
            });
        }
예제 #11
0
        /// <summary>Overridden from <see cref="Engine.EntitySystem.Entity.OnPostCreate(Boolean)"/>.</summary>
        protected override void OnPostCreate(bool loaded)
        {
            base.OnPostCreate(loaded);

            if (PhysicsModel != null)
            {
                turretBody = PhysicsModel.GetBody("turret");
                baseBody   = PhysicsModel.GetBody("base");
            }

            if (!EntitySystemWorld.Instance.IsEditor())
            {
                if (turretBody == null)
                {
                    Log.Error("Turret: \"turret\" body not exists.");
                }
                if (baseBody == null)
                {
                    Log.Error("Turret: \"base\" body not exists.");
                }
            }

            //mainGun
            foreach (MapObjectAttachedObject attachedObject in AttachedObjects)
            {
                MapObjectAttachedMapObject attachedMapObject = attachedObject as MapObjectAttachedMapObject;
                if (attachedMapObject == null)
                {
                    continue;
                }

                mainGun = attachedMapObject.MapObject as Gun;
                if (mainGun != null)
                {
                    mainGunAttachedObject = attachedMapObject;
                    mainGunOffsetPosition = attachedMapObject.PositionOffset;
                    break;
                }
            }

            SubscribeToTickEvent();
        }
예제 #12
0
        /// <summary>Overridden from <see cref="Engine.EntitySystem.Entity.OnPostCreate(Boolean)"/>.</summary>
        protected override void OnPostCreate(bool loaded)
        {
            base.OnPostCreate(loaded);
            AddTimer();

            //init doorBodyInitPosition and doorBody
            if (PhysicsModel != null)
            {
                for (int n = 0; n < PhysicsModel.Bodies.Length; n++)
                {
                    if (PhysicsModel.Bodies[n].Name == "door")
                    {
                        Mat4 transform = PhysicsModel.ModelDeclaration.Bodies[n].GetTransform();
                        doorBodyInitPosition = transform.Item3.ToVec3();
                        break;
                    }
                }

                doorBody = PhysicsModel.GetBody("door");
            }

            UpdateDoorBody();
        }
예제 #13
0
        /// <summary>Overridden from <see cref="Engine.EntitySystem.Entity.OnPostCreate(Boolean)"/>.</summary>
        protected override void OnPostCreate(bool loaded)
        {
            base.OnPostCreate(loaded);

            AddTimer();

            if (EntitySystemWorld.Instance.WorldSimulationType != WorldSimulationTypes.Editor)
            {
                if (PhysicsModel == null)
                {
                    Log.Error("AKtank: Physics model not exists.");
                    return;
                }

                chassisBody = PhysicsModel.GetBody("chassis");
                if (chassisBody == null)
                {
                    Log.Error("AKtank: \"chassis\" body not exists.");
                    return;
                }

                foreach (MapObjectAttachedObject attachedObject in AttachedObjects)
                {
                    if (attachedObject.Alias == "leftTrack")
                    {
                        leftTrack.trackHelpers.Add((MapObjectAttachedHelper)attachedObject);
                    }
                    if (attachedObject.Alias == "rightTrack")
                    {
                        rightTrack.trackHelpers.Add((MapObjectAttachedHelper)attachedObject);
                    }

                    if (attachedObject.Alias == "leftWheel")
                    {
                        Track.WheelObject wo = new Track.WheelObject();
                        wo.mesh = (MapObjectAttachedMesh)attachedObject;
                        float rad = wo.mesh.MeshObject.Bounds.GetRadius();
                        wo.circumference = 2 * MathFunctions.PI * rad;
                        leftTrack.wheels.Add(wo);
                    }
                    if (attachedObject.Alias == "rightWheel")
                    {
                        Track.WheelObject wo = new Track.WheelObject();
                        wo.mesh = (MapObjectAttachedMesh)attachedObject;
                        float rad = wo.mesh.MeshObject.Bounds.GetRadius();
                        wo.circumference = 2 * MathFunctions.PI * rad;
                        leftTrack.wheels.Add(wo);
                    }
                }

                if (leftTrack.trackHelpers.Count != 0)
                {
                    tracksPositionYOffset = Math.Abs(leftTrack.trackHelpers[0].PositionOffset.Y);
                }
            }

            //initialize currentGear
            currentGear = Type.Gears.Find(delegate(AKtankType.Gear gear)
            {
                return(gear.Number == 0);
            });

            //replace track materials
            if (EntitySystemWorld.Instance.WorldSimulationType != WorldSimulationTypes.Editor)
            {
                InitTracksAnimation();
            }
        }
예제 #14
0
        /// <summary>Overridden from <see cref="Engine.EntitySystem.Entity.OnPostCreate(Boolean)"/>.</summary>
        protected override void OnPostCreate(bool loaded)
        {
            base.OnPostCreate(loaded);
            if (!EntitySystemWorld.Instance.IsEditor())
            {
                if (PhysicsModel == null)
                {
                    Log.Error("Vehicle: Physics model not exists.");
                    return;
                }

                chassisBody = PhysicsModel.GetBody("chassis");
                if (chassisBody == null)
                {
                    Log.Error("Vehicle: \"chassis\" body not exists.");
                    return;
                }

                foreach (MapObjectAttachedObject attachedObject in AttachedObjects)
                {
                    if (attachedObject.Alias == "LFWheel")
                    {
                        LFWheel.wheelHelpers.Add((MapObjectAttachedHelper)attachedObject);
                    }
                    if (attachedObject.Alias == "RFWheel")
                    {
                        RFWheel.wheelHelpers.Add((MapObjectAttachedHelper)attachedObject);
                    }
                    if (attachedObject.Alias == "LRWheel")
                    {
                        LRWheel.wheelHelpers.Add((MapObjectAttachedHelper)attachedObject);
                    }
                    if (attachedObject.Alias == "RRWheel")
                    {
                        RRWheel.wheelHelpers.Add((MapObjectAttachedHelper)attachedObject);
                    }
                }
                if (LFWheel.wheelHelpers.Count != 0)
                {
                    LFWheelPositionYOffset = Math.Abs(LFWheel.wheelHelpers[0].PositionOffset.Y);
                }
                if (LRWheel.wheelHelpers.Count != 0)
                {
                    LRWheelPositionYOffset = Math.Abs(LRWheel.wheelHelpers[0].PositionOffset.Y);
                }
                if (RFWheel.wheelHelpers.Count != 0)
                {
                    RFWheelPositionYOffset = Math.Abs(RFWheel.wheelHelpers[0].PositionOffset.Y);
                }
                if (RRWheel.wheelHelpers.Count != 0)
                {
                    RRWheelPositionYOffset = Math.Abs(RRWheel.wheelHelpers[0].PositionOffset.Y);
                }

                //initialize currentGear
                currentGear = Type.Gears.Find(delegate(CarType.Gear gear)
                {
                    return(gear.Number == 0);
                });
            }

            AddTimer();
        }
예제 #15
0
        private void TickRotation()
        {
            bool onGround = LFWheel.onGround || RFWheel.onGround;

            float carspeed        = GetWheelsSpeed();
            float LFWheelThrottle = 0;
            float RFWheelThrottle = 0;

            if (Intellect != null)
            {
                Body WFR = PhysicsModel.GetBody("FR");
                Body WFL = PhysicsModel.GetBody("FL");
                Body WRR = PhysicsModel.GetBody("RR");
                Body WRL = PhysicsModel.GetBody("RL");

                float wheelspeed = GetWheelsSpeed() * 2;
                Vec3  Wspeed     = new Vec3(0, wheelspeed,
                                            0) * chassisBody.Rotation.GetNormalize();

                if (onGround)
                {
                    WFR.AngularVelocity = Wspeed;
                    WFL.AngularVelocity = Wspeed;
                    WRR.AngularVelocity = Wspeed;
                    WRL.AngularVelocity = Wspeed;
                }
                {
                    ServoMotor motor_1 = PhysicsModel.GetMotor("wheel1") as ServoMotor;
                    ServoMotor motor_2 = PhysicsModel.GetMotor("wheel2") as ServoMotor;

                    if (motor_1 != null)
                    {
                        if (motor_2 != null)
                        {
                            float turnspeed = 0.5f;
                            MathFunctions.Clamp(ref turnspeed, 0.5f, 0.5f);
                            Radian needAngle = motor_1.DesiredAngle;
                            if (Intellect.IsControlKeyPressed(GameControlKeys.Left))
                            {
                                if (carspeed > 2)
                                {
                                    LFWheelThrottle -= turnspeed;
                                    RFWheelThrottle += turnspeed;
                                }
                                if (carspeed < -1)
                                {
                                    LFWheelThrottle += turnspeed;
                                    RFWheelThrottle -= turnspeed;
                                }
                                needAngle -= 0.2f;
                            }
                            else if (Intellect.IsControlKeyPressed(GameControlKeys.Right))
                            {
                                if (carspeed > 2)
                                {
                                    LFWheelThrottle += turnspeed;
                                    RFWheelThrottle -= turnspeed;
                                }
                                if (carspeed < -1)
                                {
                                    LFWheelThrottle -= turnspeed;
                                    RFWheelThrottle += turnspeed;
                                }
                                needAngle += 0.2f;
                            }
                            else
                            {
                                needAngle = 0f;
                            }

                            MathFunctions.Clamp(ref needAngle, new Degree(-37.0f).InRadians(),
                                                new Degree(37.0f).InRadians());
                            motor_1.DesiredAngle = needAngle;
                            motor_2.DesiredAngle = needAngle;
                        }
                    }
                }
            }
        }
예제 #16
0
        protected override void OnPostCreate(bool loaded)
        {
            base.OnPostCreate(loaded);
            current_gears = Type.CONF.SoundGears.Find(delegate(SSDCType.SSDC_CONF.SoundGear gear)
            {
                return(gear.Number == 0);
            });
            if (EngineApp.Instance.ApplicationType != EngineApp.ApplicationTypes.ResourceEditor)
            {
                if (PhysicsModel == null)
                {
                    Log.Error("Car: Physics model not exists.");
                    return;
                }

                car_body  = PhysicsModel.GetBody("chassis");
                dmd_shape = car_body.GetShape("dmd");
                if (car_body == null)
                {
                    Log.Error("Car: \"chassis\" body not exists.");
                    return;
                }
                if (dmd_shape == null)
                {
                    Log.Error("Car: \"dmd\" shape not exists.");
                    return;
                }
                attached_mesh = GetFirstAttachedObjectByAlias("dmd") as MapObjectAttachedMesh;
                if (attached_mesh == null)
                {
                    Log.Error("Car: mesh by \"dmd\" alias not exists.");
                    return;
                }
                else
                {
                    mesh_name = this.Name;
                    attached_mesh.MeshObject.Mesh.Save("Data\\" + mesh_name + ".mesh");
                    attached_mesh.MeshName = mesh_name + ".mesh";
                    mesh = attached_mesh.MeshObject.Mesh;
                    if (Type.CONF.RandomMaterials.Any())
                    {
                        attached_mesh.MeshObject.SetMaterialNameForAllSubObjects(Type.CONF.RandomMaterials[World.Instance.Random.Next(0, Type.CONF.RandomMaterials.Count)].Path);
                    }
                }

                if (Type.CONF.Deformation)
                {
                    ParsingMesh();
                }
            }
            if (EntitySystemWorld.Instance.WorldSimulationType != WorldSimulationTypes.Editor)
            {
                SubscribeToTickEvent();

                MapObjectAttachedObject[] ortbrake = GetAllAttachedObjectsByAlias("brake");
                for (int i = 0; i < ortbrake.Length; i++)
                {
                    MapObjectAttachedRibbonTrail rt = ortbrake[i] as MapObjectAttachedRibbonTrail;
                    if (rt != null)
                    {
                        rtbrake.Add(rt.RibbonTrail);
                    }
                }
            }

            if (car_body != null)
            {
                car_body.Collision += OnCollision;
            }
        }