예제 #1
0
        public static bool Prefix(RagdollManager __instance, Vector3 pos, Quaternion rot, int classId, PlayerStats.HitInfo ragdollInfo, bool allowRecall, string ownerID, string ownerNick, int playerId)
        {
            if (Configs.ragdoll_cleanup < 0)
            {
                return(true);
            }

            Log.Debug($"[RagdollCleanupPatch] {Enum.Parse(typeof(RoleType), classId.ToString())}{pos} Time:{Time.time} Cleanuptimes:{Configs.ragdoll_cleanup}");

            Role role = __instance.ccm.Classes.SafeGet(classId);

            if (role.model_ragdoll != null)
            {
                GameObject gameObject = UnityEngine.Object.Instantiate(role.model_ragdoll, pos + role.ragdoll_offset.position, Quaternion.Euler(rot.eulerAngles + role.ragdoll_offset.rotation));
                NetworkServer.Spawn(gameObject);
                gameObject.GetComponent <Ragdoll>().Networkowner       = new Ragdoll.Info(ownerID, ownerNick, ragdollInfo, role, playerId);
                gameObject.GetComponent <Ragdoll>().NetworkallowRecall = allowRecall;
                ragdolls.Add(gameObject, Time.time);
            }
            if (ragdollInfo.GetDamageType().isScp || ragdollInfo.GetDamageType() == DamageTypes.Pocket)
            {
                __instance.RegisterScpFrag();
            }
            else if (ragdollInfo.GetDamageType() == DamageTypes.Grenade)
            {
                RoundSummary.kills_by_frag++;
            }

            return(false);
        }
예제 #2
0
        /// <summary>
        /// setup projectile for fireing
        /// </summary>
        public virtual void setup()
        {
            OnHit = () =>
            {
                if (hitInfo.hitObject)
                {
                    RagdollManager ragMan = null;
                    ragMan = hitInfo.hitObject.GetComponent <RagdollManager>();

                    if (!ragMan)
                    {
#if DEBUG_INFO
                        Debug.LogError("Ball::OnHit cannot find RagdollManager component on " +
                                       hitInfo.hitObject.name + ".");
#endif
                        return;
                    }

                    if (!ragMan.acceptHit)
                    {
                        return;
                    }

                    Vector3 force = hitInfo.hitDirection * CurrentHitStrength;
                    ragMan.startHitReaction(hitInfo.bodyPartIndices, force);
                }
            };
        }
예제 #3
0
    public void Update()
    {
        if (!base.isLocalPlayer)
        {
            return;
        }
        string     text = string.Empty;
        RaycastHit raycastHit;

        if (Physics.Raycast(new Ray(this.cam.position, this.cam.forward), out raycastHit, 3f, this.inspectionMask))
        {
            Ragdoll componentInParent = raycastHit.transform.GetComponentInParent <Ragdoll>();
            if (componentInParent != null)
            {
                text = TranslationReader.Get("Death_Causes", 12);
                text = text.Replace("[user]", componentInParent.owner.steamClientName);
                text = text.Replace("[cause]", RagdollManager.GetCause(componentInParent.owner.deathCause, false));
                text = text.Replace("[class]", string.Concat(new string[]
                {
                    "<color=",
                    this.GetColor(this.ccm.klasy[componentInParent.owner.charclass].classColor),
                    ">",
                    this.ccm.klasy[componentInParent.owner.charclass].fullName,
                    "</color>"
                }));
            }
        }
        this.txt.text = text;
    }
예제 #4
0
        public Turret(Vector2 farseerLoc, World w, RagdollManager r, Fixture f)
        {
            DebugMaterial gray = new DebugMaterial(MaterialType.Blank)
            {
                Color = Color.DarkGray
            };

            body  = new Body(w);
            pivot = FixtureFactory.AttachCircle(.9f, 1, body, gray);
            FixtureFactory.AttachRectangle(barrelLength, .5f, 1, new Vector2(barrelLength / 2, 0), body, gray);
            body.Position = farseerLoc;
            body.BodyType = BodyType.Dynamic;
            //b.CollidesWith = Category.None;

            if (f == null)
            {
                motor = JointFactory.CreateFixedRevoluteJoint(w, body, Vector2.Zero, farseerLoc);
            }
            else
            {
                motor = new RevoluteJoint(body, f.Body, Vector2.Zero, f.Body.GetLocalPoint(farseerLoc));
                w.AddJoint(motor);
            }

            motor.MotorEnabled   = true;
            motor.MaxMotorTorque = 5000;

            Init(w, r);
        }
예제 #5
0
        private static bool Prefix(RagdollManager __instance, ref Vector3 pos, ref Quaternion rot, ref int classId, ref PlayerStats.HitInfo ragdollInfo, ref bool allowRecall, ref string ownerID, ref string ownerNick, ref int playerId)
        {
            var ev = new SpawningRagdollEventArgs(
                ragdollInfo.PlayerId == 0 ? null : API.Features.Player.Get(ragdollInfo.PlayerId),
                API.Features.Player.Get(__instance.gameObject),
                pos,
                rot,
                (RoleType)classId,
                ragdollInfo,
                allowRecall,
                ownerID,
                ownerNick,
                playerId);

            Player.OnSpawningRagdoll(ev);

            pos         = ev.Position;
            rot         = ev.Rotation;
            classId     = (int)ev.RoleType;
            ragdollInfo = ev.HitInformations;
            allowRecall = ev.IsRecallAllowed;
            ownerID     = ev.DissonanceId;
            ownerNick   = ev.PlayerNickname;
            playerId    = ev.PlayerId;

            return(ev.IsAllowed);
        }
예제 #6
0
        private static bool Prefix(RagdollManager __instance, ref Vector3 pos, ref Quaternion rot, ref Vector3 velocity, ref int classId, ref PlayerStats.HitInfo ragdollInfo, ref bool allowRecall, ref string ownerID, ref string ownerNick, ref int playerId)
        {
            try
            {
                var ev = new SpawningRagdollEventArgs(
                    ragdollInfo.PlayerId == 0 ? null : API.Features.Player.Get(ragdollInfo.PlayerId), API.Features.Player.Get(__instance.gameObject), pos, rot, velocity, (RoleType)classId, ragdollInfo, allowRecall, ownerID, ownerNick, playerId);

                Player.OnSpawningRagdoll(ev);

                pos         = ev.Position;
                rot         = ev.Rotation;
                velocity    = ev.Velocity;
                classId     = (int)ev.RoleType;
                ragdollInfo = ev.HitInformations;
                allowRecall = ev.IsRecallAllowed;
                ownerID     = ev.DissonanceId;
                ownerNick   = ev.PlayerNickname;
                playerId    = ev.PlayerId;

                return(ev.IsAllowed);
            }
            catch (Exception e)
            {
                Exiled.API.Features.Log.Error($"Exiled.Events.Patches.Events.Player.SpawningRagdoll: {e}\n{e.StackTrace}");

                return(true);
            }
        }
예제 #7
0
    void Start()
    {
        if (GetComponent <PlayerController>())
        {
            if (!GetComponent <PlayerController>().isActiveAndEnabled)
            {
                enemy            = true;
                playerControlled = false;
            }
            else
            {
                playerControlled = true;
            }
        }

        playerController = GetComponent <PlayerController>();
        capCol           = GetComponent <CapsuleCollider>();
        rigidbody        = GetComponent <Rigidbody>();
        anim             = GetComponent <Animator>();
        ragMan           = GetComponent <RagdollManager>();
        wepMan           = GetComponent <WeaponManager>();
        arMan            = GetComponent <ArmorManager>();
        gamMan           = GetComponent <GameManager>();

        if (playerControlled && playerController.isEnabled)
        {
            camLook = GameObject.FindGameObjectWithTag("CameraHolder").GetComponent <FreeCameraLook>();
        }
    }
예제 #8
0
    void Awake()
    {
        rb              = GetComponent <Rigidbody2D>();
        myRagdoll       = GetComponentInParent <RagdollManager>();
        footStartXRight = RightFoot.transform.localPosition.x;
        footStartXLeft  = LeftFoot.transform.localPosition.x;
        rightLegLimits  = RightLeg.limits;
        leftLegLimits   = LeftLeg.limits;

        rightArmLimits = RightArm.limits;
        leftArmLimits  = LeftArm.limits;

        //Player Specific Movement added by Kate
        if (transform.parent.CompareTag("PlayerOne"))
        {
            playerInt = 1;
        }
        else if (transform.parent.CompareTag("PlayerTwo"))
        {
            playerInt = 2;
        }

        if (playerInt < 1)
        {
            throw new SystemException("Player Missing Correct Tag: " + transform.name);
        }

        //Gun Control added by Kate
        gunLocation = gunLocationRight.transform;
    }
예제 #9
0
        public KinectRagdollGame()
        {
            Main = this;

            graphics = new GraphicsDeviceManager(this);
            graphics.PreferredBackBufferWidth  = WIDTH;
            graphics.PreferredBackBufferHeight = HEIGHT;


            Content.RootDirectory = "Content";

            FarseerTextures.Init();
            FarseerTextures.SetGame(this);

            kinectManager  = new KinectManager();
            farseerManager = new FarseerManager(true, this);
            ragdollManager = new RagdollManager();

            actionCenter = new ActionCenter(this);
            inputManager = new InputManager(this);

            //spriteHelper = new SpriteHelper();
            objectiveManager      = new ObjectiveManager(this);
            powerupManager        = new PowerupManager(ragdollManager, farseerManager);
            jukebox               = new Jukebox();
            hazardManager         = new HazardManager(farseerManager, ragdollManager);
            particleEffectManager = new ParticleEffectManager(graphics, ref farseerProjection);

            toolbox = new Toolbox(this);


            this.IsMouseVisible = true;
            bkColor             = Color.CornflowerBlue;
        }
예제 #10
0
        bool _createRagdollManager()
        {
            RagdollManager ragMan = character.GetComponent <RagdollManager>();

            if (!ragMan)
            {
                //ragMan = character.AddComponent<RagdollManager>();
                ragMan = Undo.AddComponent <RagdollManager>(character);
            }
            if (useHumanoidSetupForRagdollBones)
            {
                Animator anim = character.GetComponent <Animator>();
                if (!anim)
                {
                    Debug.LogError("Cannot find 'animator' component." + " < " + this.ToString() + ">"); return(false);
                }

                ragdollCreator.pelvis      = anim.GetBoneTransform(HumanBodyBones.Hips);
                ragdollCreator.leftHips    = anim.GetBoneTransform(HumanBodyBones.LeftUpperLeg);
                ragdollCreator.leftKnee    = anim.GetBoneTransform(HumanBodyBones.LeftLowerLeg);
                ragdollCreator.leftFoot    = anim.GetBoneTransform(HumanBodyBones.LeftFoot);
                ragdollCreator.rightHips   = anim.GetBoneTransform(HumanBodyBones.RightUpperLeg);
                ragdollCreator.rightKnee   = anim.GetBoneTransform(HumanBodyBones.RightLowerLeg);
                ragdollCreator.rightFoot   = anim.GetBoneTransform(HumanBodyBones.RightFoot);
                ragdollCreator.leftArm     = anim.GetBoneTransform(HumanBodyBones.LeftUpperArm);
                ragdollCreator.leftElbow   = anim.GetBoneTransform(HumanBodyBones.LeftLowerArm);
                ragdollCreator.rightArm    = anim.GetBoneTransform(HumanBodyBones.RightUpperArm);
                ragdollCreator.rightElbow  = anim.GetBoneTransform(HumanBodyBones.RightLowerArm);
                ragdollCreator.middleSpine = anim.GetBoneTransform(HumanBodyBones.Chest);
                ragdollCreator.head        = anim.GetBoneTransform(HumanBodyBones.Head);

                ragdollCreator.totalMass = totalMass;

                ragdollCreator.CheckConsistency();
                ragdollCreator.CalculateAxes();
                ragdollCreator.Create();

                ragMan.RagdollBones = new Transform[(int)BodyParts.BODY_PART_COUNT];
                ragMan.RagdollBones[(int)BodyParts.Spine]         = ragdollCreator.pelvis;
                ragMan.RagdollBones[(int)BodyParts.Chest]         = ragdollCreator.middleSpine;
                ragMan.RagdollBones[(int)BodyParts.Head]          = ragdollCreator.head;
                ragMan.RagdollBones[(int)BodyParts.LeftShoulder]  = ragdollCreator.leftArm;
                ragMan.RagdollBones[(int)BodyParts.LeftElbow]     = ragdollCreator.leftElbow;
                ragMan.RagdollBones[(int)BodyParts.RightShoulder] = ragdollCreator.rightArm;
                ragMan.RagdollBones[(int)BodyParts.RightElbow]    = ragdollCreator.rightElbow;
                ragMan.RagdollBones[(int)BodyParts.LeftHip]       = ragdollCreator.leftHips;
                ragMan.RagdollBones[(int)BodyParts.LeftKnee]      = ragdollCreator.leftKnee;
                ragMan.RagdollBones[(int)BodyParts.RightHip]      = ragdollCreator.rightHips;
                ragMan.RagdollBones[(int)BodyParts.RightKnee]     = ragdollCreator.rightKnee;
                RagdollManager.AddBodyColliderScripts(ragMan);


                ragdollCreator = null;
            }

            return(true);
        }
예제 #11
0
    // Use this for initialization
    void Start()
    {
        ragdoll = GetComponent <RagdollManager>();
        ragdoll.setRagdollActive(false);

        col = GetComponent <Collider>();

        Alive = true;
    }
예제 #12
0
        public override void Init(World w, RagdollManager r)
        {
            world  = w;
            target = r.ragdoll;
            body.setWorld(w);


            IsOperational = true;


            state = State.Scanning;
        }
예제 #13
0
        internal Pickup(Body b, RagdollManager ragdollManager, FarseerManager farseerManager) : this(ragdollManager, farseerManager)
        {
            this.Body = b;


            foreach (Fixture f in b.FixtureList)
            {
                f.BeforeCollision += new BeforeCollisionEventHandler(f_BeforeCollision);
            }

            ApplyTexture();
        }
예제 #14
0
    protected override IEnumerator OnDeathFeedBack()
    {
        foreach (Component componet in componentstoRemoveOnDeath)
        {
            Destroy(componet);
        }
        RagdollManager ragdollManager = GetComponent <RagdollManager>();

        ragdollManager.EnableRagdoll();
        ragdollManager.ApplyRagdollForce(lastCollisionPoint, lastCollisionImpactforce);
        yield return(StartCoroutine(OnHitDrops(minOnDeathDrop, maxOnDeathDrop)));

        uiCanvas.gameObject.SetActive(false);
        playerUi.StopTrackingStatus();
        this.enabled = false;
    }
예제 #15
0
        public static bool Prefix(RagdollManager __instance, ref Vector3 pos, ref Quaternion rot, ref int classId, ref PlayerStats.HitInfo ragdollInfo, ref bool allowRecall, ref string ownerID, ref string ownerNick, ref int playerId)
        {
            try
            {
                bool allow = true;

                Events.InvokeSpawnRagdoll(__instance.gameObject, ref pos, ref rot, ref classId, ref ragdollInfo, ref allowRecall, ref ownerID, ref ownerNick, ref playerId, ref allow);

                return(allow);
            }
            catch (Exception exception)
            {
                Log.Error($"SpawnRagdollEvent error: {exception}");
                return(true);
            }
        }
예제 #16
0
        private static bool Prefix(RagdollManager __instance, ref Vector3 pos, ref Quaternion rot, ref Vector3 velocity, ref int classId, ref PlayerStats.HitInfo ragdollInfo, ref bool allowRecall, ref string ownerID, ref string ownerNick, ref int playerId)
        {
            try
            {
                var ev = new SpawningRagdollEventArgs(
                    ragdollInfo.PlayerId == 0 ? null : API.Features.Player.Get(ragdollInfo.PlayerId), API.Features.Player.Get(playerId), pos, rot, velocity, (RoleType)classId, ragdollInfo, allowRecall, ownerID, ownerNick, playerId);

                Player.OnSpawningRagdoll(ev);

                pos         = ev.Position;
                rot         = ev.Rotation;
                velocity    = ev.Velocity;
                classId     = (int)ev.RoleType;
                ragdollInfo = ev.HitInformations;
                allowRecall = ev.IsRecallAllowed;
                ownerID     = ev.DissonanceId;
                ownerNick   = ev.PlayerNickname;
                playerId    = ev.PlayerId;

                if (!ev.IsAllowed)
                {
                    return(false);
                }

                Role role = __instance.hub.characterClassManager.Classes.SafeGet(classId);
                if (role.model_ragdoll == null)
                {
                    return(false);
                }
                GameObject gameObject = UnityEngine.Object.Instantiate(role.model_ragdoll, pos + role.ragdoll_offset.position, Quaternion.Euler(rot.eulerAngles + role.ragdoll_offset.rotation));
                Ragdoll    component  = gameObject.GetComponent <Ragdoll>();
                component.Networkowner       = new Ragdoll.Info(ownerID, ownerNick, ragdollInfo, role, playerId);
                component.NetworkallowRecall = allowRecall;
                component.NetworkPlayerVelo  = velocity;
                Exiled.API.Features.Ragdoll ragdoll = new Exiled.API.Features.Ragdoll(component);
                Mirror.NetworkServer.Spawn(ragdoll.GameObject);
                Exiled.API.Features.Map.RagdollsValue.Add(ragdoll);

                return(false);
            }
            catch (Exception e)
            {
                Exiled.API.Features.Log.Error($"Exiled.Events.Patches.Events.Player.SpawningRagdoll: {e}\n{e.StackTrace}");

                return(true);
            }
        }
예제 #17
0
        public WallPopper(Vector2 farseerLoc, World w, RagdollManager r)
        {
            DebugMaterial gray = new DebugMaterial(MaterialType.Blank)
            {
                Color = Color.DarkGray
            };

            body          = new Body(w);
            body.Rotation = -(float)Math.PI / 2;
            Vertices popperShape = new Vertices(new Vector2[] { new Vector2(-1.2f, .8f), new Vector2(-1.2f, -.8f), new Vector2(1.2f, -.4f), new Vector2(1.2f, .4f) });

            FixtureFactory.AttachPolygon(popperShape, 1, body, gray);
            body.Position = farseerLoc;
            body.BodyType = BodyType.Dynamic;
            body.IsBullet = true;
            //b.CollidesWith = Category.None;

            Init(w, r);
        }
예제 #18
0
        private static bool Prefix(RagdollManager __instance, Vector3 pos, Quaternion rot, Vector3 velocity, int classId, global::PlayerStats.HitInfo ragdollInfo, bool allowRecall, string ownerID, string ownerNick, int playerId)
        {
            Role role = __instance.hub.characterClassManager.Classes.SafeGet(classId);

            if (role.model_ragdoll == null)
            {
                return(false);
            }

            var gameObject = Object.Instantiate(role.model_ragdoll, pos + role.ragdoll_offset.position, Quaternion.Euler(rot.eulerAngles + role.ragdoll_offset.rotation));

            NetworkServer.Spawn(gameObject);

            Ragdoll component = gameObject.GetComponent <Ragdoll>();

            component.Networkowner       = new Ragdoll.Info(ownerID, ownerNick, ragdollInfo, role, playerId);
            component.NetworkallowRecall = allowRecall;
            component.NetworkPlayerVelo  = velocity;

            var synapseragdoll = new Synapse.Api.Ragdoll(component);

            Map.Get.Ragdolls.Add(synapseragdoll);
            return(false);
        }
예제 #19
0
    public void Start()
    {
        game = GameManager.instance;
        navigation = GetComponent<EnemyNavigation>();
        enemyManager = EnemyManager.instance;
        ragdolls = RagdollManager.instance;

        GameObject player = GameObject.Find("playerFocus");
        GameObject treasureObj = game.treasure.gameObject;
        GameObject focusPoint = treasureObj.transform.FindChild("treasureFocus").gameObject;

        treasureTransform = focusPoint.transform;
        playerTransform = player.transform;
        enemyTransform = this.transform;

        // if treasure is on ground and enemy can loot, set first target as treasure
        if (game.treasure.OnGround() && canLoot){
            target = focusTarget.TRESAURE;
            navigation.target = treasureTransform;
        } else {
            target = focusTarget.PLAYER;
            navigation.target = playerTransform;
        }
    }
예제 #20
0
 public void RegisterManager(RagdollManager rm)
 {
     _rm = rm;
 }
예제 #21
0
 public Powerup(Body b, RagdollManager ragdollManager, FarseerManager farseerManager) : base(b, ragdollManager, farseerManager)
 {
 }
예제 #22
0
 public RocketTurret(Vector2 farseerLoc, World w, RagdollManager r, Fixture f)
     : base(farseerLoc, w, r, f)
 {
 }
예제 #23
0
 protected Pickup(RagdollManager r, FarseerManager f)
 {
     this.ragdollManager = r;
     this.farseerManager = f;
 }
예제 #24
0
 public RocketTurret(Vector2 farseerLoc, World w, RagdollManager r)
     : base(farseerLoc, w, r)
 {
 }
예제 #25
0
 public Powerup(RagdollManager r, FarseerManager f) : base(r, f)
 {
 }
예제 #26
0
    private void initParams(GameObject targetObj)
    {
        ragdollManager = targetObj.GetComponent <RagdollManager>();
        if (useDismember)
        {
            dismember = targetObj.GetComponent <Dismemberment>();
            if (dismember == null)
            {
                return;
            }

            dismemberNum  = dismember.BoomParamsNum;
            limbTransRoot = dismember.LimbRoot;
            var boomParam = dismember.boomParam;

            //init nums
            dismemberTarget     = new GameObject[dismemberParamNum];
            bodyPart            = new Dismemberment.BodyPartHint[dismemberParamNum];
            dismemberColliders  = new Collider[dismemberParamNum];
            dismemberRigidbodys = new Rigidbody[dismemberParamNum];


            particleNum   = new int[dismemberParamNum];
            particleNames = new string[particleParamNum];
            particleRoot  = new Transform[particleParamNum];
            initPos       = new Vector3[particleParamNum];
            initEurler    = new Vector3[particleParamNum];
            initScale     = new Vector3[particleParamNum];

            //forceParam
            forceNum  = new int[particleParamNum];
            drag      = new float[particleParamNum];
            angleDrag = new float[particleParamNum];
            force     = new Vector3[particleParamNum];
            torque    = new Vector3[particleParamNum];

            for (int i = 0; i < particleParamNum; i++)
            {
                initScale[i] = Vector3.one;
            }

            //ignoreRagdollNum = new int[dismemberParamNum];
            //ignoreRagdollTrans = new Transform[particleParamNum];

            for (int i = 0; i < dismemberNum; i++)
            {
                var temp = boomParam[i];
                dismemberTarget[i]     = temp.targetObj;
                dismemberColliders[i]  = temp.collider;
                dismemberRigidbodys[i] = temp.rigidbody;
                bodyPart[i]            = temp.bodyPart;
                //particle
                particleNum[i] = temp.ParticleNum;
                for (int j = 0; j < particleNum[i]; j++)
                {
                    var particleParm = temp.particles[j];
                    particleNames[dismemberParamNum * i + j] = particleParm.ParticleName;
                    particleRoot[dismemberParamNum * i + j]  = particleParm.particleRoot;
                    initPos[dismemberParamNum * i + j]       = particleParm.initPos;
                    initScale[dismemberParamNum * i + j]     = particleParm.initScale;
                    initEurler[dismemberParamNum * i + j]    = particleParm.initEurler;
                }

                //force
                forceNum[i] = temp.ForceNum;
                for (int j = 0; j < forceNum[i]; j++)
                {
                    var forceParam = temp.forceParams[j];
                    drag[dismemberParamNum * i + j]      = forceParam.drag;
                    angleDrag[dismemberParamNum * i + j] = forceParam.angleDrag;
                    force[dismemberParamNum * i + j]     = forceParam.force;
                    torque[dismemberParamNum * i + j]    = forceParam.torque;
                }

                ////ignore ragdoll
                //ignoreRagdollNum[i] = temp.IgnoreRagdollEffectNum;
                //for (int k = 0; k < ignoreRagdollNum[i]; k++)
                //{
                //    ignoreRagdollTrans[dismemberParamNum * i + k] = temp.ignoreRagdollTrans[k];
                //}
            }
        }
    }
예제 #27
0
 void Awake()
 {
     RagdollManager.instance = this;
 }
예제 #28
0
        // unity OnInspectorGUI method
        public override void OnInspectorGUI()
        {
            RagdollManager ragMan = (RagdollManager)target;

            DrawDefaultInspector();

            if (ragMan.hitInterval == RagdollManager.HitIntervals.Timed)
            {
                float hitInterval = (float)EditorGUILayout.FloatField("Hit Interval", ragMan.hitTimeInterval);
                ragMan.hitTimeInterval = hitInterval;
            }

            bool enableGetUp = (bool)EditorGUILayout.Toggle("Enable Get Up Animation", ragMan.enableGetUpAnimation);

            ragMan.enableGetUpAnimation = enableGetUp;

            string text = (string)EditorGUILayout.TextField("Name Of Get Up From Back State", ragMan.nameOfGetUpFromBackState);

            ragMan.nameOfGetUpFromBackState = text;

            text = (string)EditorGUILayout.TextField("Name Of Get Up From Front State", ragMan.nameOfGetUpFromFrontState);
            ragMan.nameOfGetUpFromFrontState = text;

            bool ragdollWizard = GUILayout.Button("Ragdoll Wizard");

            if (ragdollWizard)
            {
                RagdollCreatorWizard builderWizard = RagdollCreatorWizard.DisplayWizard();
                RagdollCreator       builder       = builderWizard.ragdollCreator;
                builder.OnWizardCreateCallback = () =>
                {
                    ragMan.RagdollBones = new Transform[(int)BodyParts.BODY_PART_COUNT];
                    ragMan.RagdollBones[(int)BodyParts.Spine]         = builder.pelvis;
                    ragMan.RagdollBones[(int)BodyParts.Chest]         = builder.middleSpine;
                    ragMan.RagdollBones[(int)BodyParts.Head]          = builder.head;
                    ragMan.RagdollBones[(int)BodyParts.LeftShoulder]  = builder.leftArm;
                    ragMan.RagdollBones[(int)BodyParts.LeftElbow]     = builder.leftElbow;
                    ragMan.RagdollBones[(int)BodyParts.RightShoulder] = builder.rightArm;
                    ragMan.RagdollBones[(int)BodyParts.RightElbow]    = builder.rightElbow;
                    ragMan.RagdollBones[(int)BodyParts.LeftHip]       = builder.leftHips;
                    ragMan.RagdollBones[(int)BodyParts.LeftKnee]      = builder.leftKnee;
                    ragMan.RagdollBones[(int)BodyParts.RightHip]      = builder.rightHips;
                    ragMan.RagdollBones[(int)BodyParts.RightKnee]     = builder.rightKnee;


                    EditorUtility.SetDirty(ragMan);
                    serializedObject.ApplyModifiedProperties();

                    RagdollManager.AddBodyColliderScripts(ragMan);

                    builder.OnWizardCreateCallback = null;
                };
            }


            bool removeRagdoll = GUILayout.Button("Remove Ragoll");

            if (removeRagdoll)
            {
                if (ragMan.RagdollBones.Length == (int)BodyParts.BODY_PART_COUNT)
                {
                    for (int i = 0; i < (int)BodyParts.BODY_PART_COUNT; i++)
                    {
                        Transform t = ragMan.RagdollBones[i];
                        if (!t)
                        {
                            continue;
                        }
                        CharacterJoint[]     t_joints = t.GetComponents <CharacterJoint>();
                        Collider[]           t_cols   = t.GetComponents <Collider>();
                        Rigidbody[]          t_rbs    = t.GetComponents <Rigidbody>();
                        BodyColliderScript[] t_bcs    = t.GetComponents <BodyColliderScript>();
                        foreach (CharacterJoint cj in t_joints)
                        {
                            DestroyImmediate(cj);
                        }
                        foreach (Collider c in t_cols)
                        {
                            DestroyImmediate(c);
                        }
                        foreach (Rigidbody rb in t_rbs)
                        {
                            DestroyImmediate(rb);
                        }
                        foreach (BodyColliderScript b in t_bcs)
                        {
                            DestroyImmediate(b);
                        }
                        ragMan.RagdollBones[i] = null;
                    }
                    ragMan.RagdollBones = null;
                    EditorUtility.SetDirty(ragMan);
                    serializedObject.ApplyModifiedProperties();
                }
            }



            bool addColSc = GUILayout.Button("Add Collider Scripts");

            if (addColSc)
            {
                RagdollManager.AddBodyColliderScripts(ragMan);
            }

            if (GUI.changed)
            {
                EditorUtility.SetDirty(ragMan);
                serializedObject.ApplyModifiedProperties();
            }
        }
예제 #29
0
 void SetRagdollManager()
 {
     RagdollManager = GetComponent <RagdollManager>();
 }
예제 #30
0
 public Turret(Vector2 farseerLoc, World w, RagdollManager r) : this(farseerLoc, w, r, null)
 {
 }
예제 #31
0
 public LaserTurret(Vector2 farseerLoc, World w, RagdollManager r, Fixture f)
     : base(farseerLoc, w, r, f)
 {
     reloadTime = 50;
 }
예제 #32
0
    void OnGUI()
    {
        if (normalStyle == null)
        {
            normalStyle = new GUIStyle();
            normalStyle.normal.textColor = Color.red;
        }

        if (particleStyle == null)
        {
            particleStyle = new GUIStyle();
            particleStyle.normal.textColor = Color.green;
        }

        if (ragdollStyle == null)
        {
            ragdollStyle = new GUIStyle();
            ragdollStyle.normal.textColor = Color.white;
        }

        targetObj = (GameObject)EditorGUILayout.ObjectField("目标角色", targetObj, typeof(GameObject), true);
        if (targetObj != null)
        {
            ////init
            if (orignObj == null)
            {
                initParams(targetObj);
                orignObj = targetObj;
                return;
            }

            if (targetObj != orignObj)
            {
                EditorGUILayout.BeginHorizontal();
                if (GUILayoutEx.Button("更换模型", Color.red))
                {
                    initParams(targetObj);
                    orignObj = targetObj;
                }

                if (GUILayoutEx.Button("恢复模型", Color.green))
                {
                    targetObj = orignObj;
                }
                EditorGUILayout.EndHorizontal();
                return;
            }

            useDismember = EditorGUILayout.Toggle("是否使用Dismember", useDismember);
            if (useDismember)
            {
                //////init components
                if (dismember == null)
                {
                    if (targetObj.GetComponent <Dismemberment>() == null)
                    {
                        dismember = targetObj.AddComponent <Dismemberment>();
                        CreateWithDefaultParam();
                    }
                    else
                    {
                        dismember = targetObj.GetComponent <Dismemberment>();
                    }
                    initParams(targetObj);
                }
            }

            if (ragdollManager == null)
            {
                //todo:动物布娃娃不初始化,只进行操作
                if (targetObj.GetComponent <RagdollManagerGen>() != null)
                {
                    ragdollManager = targetObj.GetComponent <RagdollManagerGen>();
                }
                else
                {
                    if (targetObj.GetComponent <RagdollManagerHum>() == null)
                    {
                        ragdollManager = targetObj.AddComponent <RagdollManagerHum>();
                        ragdollManager.onCreateCompeleted = CreateWithDefaultParam;
                        ((RagdollManagerHum)ragdollManager).DefaultInitialize();
                    }
                    else
                    {
                        ragdollManager = targetObj.GetComponent <RagdollManagerHum>();
                    }
                }
                initParams(targetObj);
            }

            //Copy from copyTarget
            copyTarget = (GameObject)EditorGUILayout.ObjectField("拷贝角色", copyTarget, typeof(GameObject), true);

            if (copyTarget != null && copyTarget.GetComponent <Dismemberment>() != null &&
                copyTarget.GetComponent <RagdollManagerHum>() != null && isCopying == false)
            {
                if (GUILayoutEx.Button("拷贝参数", Color.yellow))
                {
                    isCopying = true;
                }
            }
            if (isCopying == true)
            {
                EditorGUILayout.BeginHorizontal();
                if (GUILayoutEx.Button("确认拷贝", Color.red))
                {
                    CopyParamFromTarget(targetObj, copyTarget);
                    initParams(targetObj);
                    copyParam = true;
                    isCopying = false;
                }
                if (GUILayoutEx.Button("恢复", Color.green))
                {
                    isCopying = false;
                }
                EditorGUILayout.EndHorizontal();
                return;
            }

            scrollPos = EditorGUILayout.BeginScrollView(scrollPos);
            if (useDismember)
            {
                //////Dismember
                GUILayout.Label("肢解设置", EditorStyles.boldLabel);

                limbTransRoot      = (Transform)EditorGUILayout.ObjectField("肢解根节点:", limbTransRoot, typeof(Transform), true);
                dismember.LimbRoot = limbTransRoot;

                dismemberNum = EditorGUILayout.IntField("肢解方案个数:", dismemberNum);
                if (dismemberNum != dismember.BoomParamsNum && !copyParam)
                {
                    EditorGUILayout.BeginHorizontal();
                    if (GUILayoutEx.Button("确定更改方案数", Color.red))
                    {
                        dismember.BoomParamsNum = dismemberNum;
                    }
                    if (GUILayoutEx.Button("恢复方案数", Color.green))
                    {
                        dismemberNum = dismember.BoomParamsNum;
                    }
                    EditorGUILayout.EndHorizontal();
                }
                //Scroll Dismember
                else
                {
                    copyParam = false;
                    if (dismemberNum > 0)
                    {
                        var boomParam = dismember.boomParam;
                        for (int i = 0; i < dismemberNum; i++)
                        {
                            string normalText = string.Format("-------------------------方案{0}-------------------------", i + 1);
                            EditorGUILayout.LabelField(normalText, normalStyle);
                            var temp = boomParam[i];
                            dismemberTarget[i]     = (GameObject)EditorGUILayout.ObjectField("被肢解目标:", dismemberTarget[i], typeof(GameObject), true);
                            temp.targetObj         = dismemberTarget[i];
                            dismemberColliders[i]  = (Collider)EditorGUILayout.ObjectField("肢解碰撞体:", dismemberColliders[i], typeof(Collider), true);
                            temp.collider          = dismemberColliders[i];
                            dismemberRigidbodys[i] = (Rigidbody)EditorGUILayout.ObjectField("被肢解目标:", dismemberRigidbodys[i], typeof(Rigidbody), true);
                            temp.rigidbody         = dismemberRigidbodys[i];
                            bodyPart[i]            = (Dismemberment.BodyPartHint)EditorGUILayout.EnumPopup("肢解部位:", bodyPart[i]);
                            temp.bodyPart          = (Dismemberment.BodyPartHint)bodyPart[i];

                            ////ignore Ragdoll Effect
                            //ignoreRagdollNum[i] = EditorGUILayout.IntField("忽略布娃娃效果个数:", ignoreRagdollNum[i]);

                            //if (ignoreRagdollNum[i] != temp.IgnoreRagdollEffectNum)
                            //{
                            //    EditorGUILayout.BeginHorizontal();
                            //    if (GUILayoutEx.Button("确定更改", Color.red)) temp.IgnoreRagdollEffectNum = ignoreRagdollNum[i];
                            //    if (GUILayoutEx.Button("恢复", Color.green)) ignoreRagdollNum[i] = temp.IgnoreRagdollEffectNum;
                            //    EditorGUILayout.EndHorizontal();
                            //}
                            //else
                            //{
                            //    copyParam = false;
                            //    if (ignoreRagdollNum[i] > 0)
                            //    {
                            //        for (int j = 0; j < ignoreRagdollNum[i]; j++)
                            //        {
                            //            string particleText = string.Format("-------------------------忽略{0}-------------------------", j + 1);
                            //            var ignoreRagdollParam = temp.ignoreRagdollTrans[j];
                            //            ignoreRagdollTrans[dismemberParamNum * i + j] = (Transform)EditorGUILayout.ObjectField("忽略布娃娃效果:", ignoreRagdollTrans[dismemberParamNum * i + j], typeof(Transform), true);
                            //            ignoreRagdollParam = ignoreRagdollTrans[dismemberParamNum * i + j];
                            //        }
                            //    }
                            //}

                            //particle
                            particleNum[i] = EditorGUILayout.IntField("特效个数:", particleNum[i]);

                            if (particleNum[i] != temp.ParticleNum && !copyParam)
                            {
                                EditorGUILayout.BeginHorizontal();
                                if (GUILayoutEx.Button("确定更改特效数", Color.red))
                                {
                                    temp.ParticleNum = particleNum[i];
                                }
                                if (GUILayoutEx.Button("恢复特效数", Color.green))
                                {
                                    particleNum[i] = temp.ParticleNum;
                                }
                                EditorGUILayout.EndHorizontal();
                            }
                            else
                            {
                                copyParam = false;
                                if (particleNum[i] > 0)
                                {
                                    for (int j = 0; j < particleNum[i]; j++)
                                    {
                                        string particleText = string.Format("-------------------------特效{0}-------------------------", j + 1);
                                        EditorGUILayout.LabelField(particleText, particleStyle);
                                        var particleParm = temp.particles[j];
                                        particleNames[dismemberParamNum * i + j] = EditorGUILayout.TextField("特效名称", particleNames[dismemberParamNum * i + j]);
                                        particleParm.ParticleName = particleNames[dismemberParamNum * i + j];
                                        particleRoot[dismemberParamNum * i + j] = (Transform)EditorGUILayout.ObjectField("特效起始位置父节点:", particleRoot[dismemberParamNum * i + j], typeof(Transform), true);
                                        particleParm.particleRoot          = particleRoot[dismemberParamNum * i + j];
                                        initPos[dismemberParamNum * i + j] = EditorGUILayout.Vector3Field("特效初始位置:", initPos[dismemberParamNum * i + j]);
                                        particleParm.initPos = initPos[dismemberParamNum * i + j];
                                        initEurler[dismemberParamNum * i + j] = EditorGUILayout.Vector3Field("特效初始旋转位置:", initEurler[dismemberParamNum * i + j]);
                                        particleParm.initEurler = initEurler[dismemberParamNum * i + j];
                                        initScale[dismemberParamNum * i + j] = EditorGUILayout.Vector3Field("特效初始缩放:", initScale[dismemberParamNum * i + j]);
                                        particleParm.initScale = initScale[dismemberParamNum * i + j];
                                    }
                                }
                            }

                            //forceParam
                            forceNum[i] = EditorGUILayout.IntField("力参数个数:", forceNum[i]);

                            if (forceNum[i] != temp.ForceNum && !copyParam)
                            {
                                EditorGUILayout.BeginHorizontal();
                                if (GUILayoutEx.Button("确定更改特效数", Color.red))
                                {
                                    temp.ForceNum = forceNum[i];
                                }
                                if (GUILayoutEx.Button("恢复特效数", Color.green))
                                {
                                    forceNum[i] = temp.ForceNum;
                                }
                                EditorGUILayout.EndHorizontal();
                            }
                            else
                            {
                                if (forceNum[i] > 0)
                                {
                                    for (int j = 0; j < forceNum[i]; j++)
                                    {
                                        string forceParamText = string.Format("-------------------------力参数{0}-------------------------", j + 1);
                                        EditorGUILayout.LabelField(forceParamText, particleStyle);
                                        var forceParam = temp.forceParams[j];
                                        drag[dismemberParamNum * i + j] = EditorGUILayout.FloatField("摩擦力:", drag[dismemberParamNum * i + j]);
                                        forceParam.drag = drag[dismemberParamNum * i + j];
                                        angleDrag[dismemberParamNum * i + j] = EditorGUILayout.FloatField("角动量摩擦力:", angleDrag[dismemberParamNum * i + j]);
                                        forceParam.angleDrag             = angleDrag[dismemberParamNum * i + j];
                                        force[dismemberParamNum * i + j] = EditorGUILayout.Vector3Field("速度:", force[dismemberParamNum * i + j]);
                                        forceParam.force = force[dismemberParamNum * i + j];
                                        torque[dismemberParamNum * i + j] = EditorGUILayout.Vector3Field("角速度:", torque[dismemberParamNum * i + j]);
                                        forceParam.torque = torque[dismemberParamNum * i + j];
                                    }
                                }
                            }


                            EditorGUILayout.BeginHorizontal();
                            forceMethod = EditorGUILayout.IntField("肢解力方案选择:1~10:", forceMethod);
                            if (GUILayoutEx.Button("测试肢解", Color.yellow))
                            {
                                dismember.TestDismember(i * 10 + forceMethod - 1);
                            }
                            //if (GUILayoutEx.Button("恢复", Color.green)) dismember.ReCoverOne(i * 10 + forceMethod - 1);
                            EditorGUILayout.EndHorizontal();
                        }
                    }
                }
            }

            //////Ragdoll
            string ragdollText = string.Format("-------------------------布娃娃系统-------------------------");
            EditorGUILayout.LabelField(ragdollText, ragdollStyle);

            ragdollId    = EditorGUILayout.IntField("布娃娃受力点:", ragdollId);
            ragdollForce = EditorGUILayout.Vector3Field("布娃娃受力方向:", ragdollForce);

            EditorGUILayout.BeginHorizontal();

            if (GUILayout.Button("测试布娃娃"))
            {
                ragdollManager.DisableCustomRagdoll();
                var anim = targetObj.GetComponent <Animation>();
                if (anim != null)
                {
                    anim.enabled = false;
                }

                var characterControl = targetObj.GetComponent <CharacterController>();
                if (characterControl != null)
                {
                    characterControl.enabled = false;
                }

                ragdollManager.CustomRagdoll(ragdollId, ragdollForce);
            }

            if (GUILayout.Button("恢复布娃娃"))
            {
                ragdollManager.DisableCustomRagdoll();

                var anim = targetObj.GetComponent <Animation>();
                if (anim != null)
                {
                    anim.enabled = true;
                    anim.Play("idle");
                }

                var characterControl = targetObj.GetComponent <CharacterController>();
                if (characterControl != null)
                {
                    characterControl.enabled = true;
                }
            }

            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();

            //综合方案
            method = EditorGUILayout.IntField("方案选择 : 11~90:", method);
            if (GUILayout.Button("走你"))
            {
                ragdollManager.DisableCustomRagdoll();
                var anim = targetObj.GetComponent <Animation>();
                if (anim != null)
                {
                    anim.enabled = false;
                }

                var characterControl = targetObj.GetComponent <CharacterController>();
                if (characterControl != null)
                {
                    characterControl.enabled = false;
                }

                dismember.TestDismember(Mathf.Clamp(method - 10 - 1, 0, 79));

                ragdollManager.CustomRagdoll(ragdollId, ragdollForce);
            }

            if (GUILayout.Button("恢复"))
            {
                ragdollManager.DisableCustomRagdoll();

                var anim = targetObj.GetComponent <Animation>();
                if (anim != null)
                {
                    anim.enabled = true;
                    anim.Play("idle");
                }

                var characterControl = targetObj.GetComponent <CharacterController>();
                if (characterControl != null)
                {
                    characterControl.enabled = true;
                }
            }

            EditorGUILayout.EndHorizontal();
            EditorGUILayout.EndScrollView();
        }
    }
예제 #33
0
파일: Dragon.cs 프로젝트: jlonardi/igp-DnM
 void Start()
 {
     game = GameManager.instance;
     ragdolls = RagdollManager.instance;
     tr = transform;
     landingPoint = GameObject.Find("PointInGround").transform.position;
     playerTransform = GameObject.Find("playerFocus").transform;
     cameraTransform = GameObject.Find("Main Camera").transform;
     grabTransform = GameObject.Find("DragonGrab").transform;
     headTransform = GameObject.Find("head").transform;
 }