/// <summary> /// On init, we grab our character type and playerID and store them for later /// </summary> protected override void Initialization() { base.Initialization(); _savedCharacterType = _character.CharacterType; _savedPlayerID = _character.PlayerID; _aiBrain = this.gameObject.GetComponent <AIBrain>(); }
/// <summary> /// On init, we grab our character type and playerID and store them for later /// </summary> protected override void Initialization() { base.Initialization(); _savedCharacterType = _character.CharacterType; _savedPlayerID = _character.PlayerID; _aiBrain = _character.CharacterBrain; }
/// <summary> /// Adds all the possible components to a character /// </summary> protected virtual void GenerateCharacter(Character.CharacterTypes type, Modes mode) { Character character = (Character)target; Debug.LogFormat(character.name + " : Character Autobuild Start"); if (type == Character.CharacterTypes.Player) { character.CharacterType = Character.CharacterTypes.Player; // sets the layer character.gameObject.layer = LayerMask.NameToLayer("Player"); // sets the tag character.gameObject.tag = "Player"; // sets the player ID character.PlayerID = "Player1"; } if (type == Character.CharacterTypes.AI) { character.CharacterType = Character.CharacterTypes.AI; // sets the layer character.gameObject.layer = LayerMask.NameToLayer("Enemies"); } if (mode == Modes.TwoD) { // Adds the rigidbody2D Rigidbody2D rigidbody2D = (character.GetComponent <Rigidbody2D>() == null) ? character.gameObject.AddComponent <Rigidbody2D>() : character.GetComponent <Rigidbody2D>(); rigidbody2D.bodyType = RigidbodyType2D.Dynamic; rigidbody2D.simulated = true; rigidbody2D.useAutoMass = false; rigidbody2D.mass = 1; rigidbody2D.drag = 1; rigidbody2D.angularDrag = 0.05f; rigidbody2D.gravityScale = 0; rigidbody2D.interpolation = RigidbodyInterpolation2D.Interpolate; rigidbody2D.sleepMode = RigidbodySleepMode2D.StartAwake; rigidbody2D.collisionDetectionMode = CollisionDetectionMode2D.Continuous; rigidbody2D.constraints = RigidbodyConstraints2D.FreezeRotation; SortingGroup sortingGroup = (character.GetComponent <SortingGroup>() == null) ? character.gameObject.AddComponent <SortingGroup>() : character.GetComponent <SortingGroup>(); sortingGroup.sortingLayerName = "Characters"; // Adds the boxcollider2D if needed BoxCollider2D boxcollider2D = (character.GetComponent <BoxCollider2D>() == null) ? character.gameObject.AddComponent <BoxCollider2D>() : character.GetComponent <BoxCollider2D>(); boxcollider2D.isTrigger = false; // adds the top down controller 2D TopDownController2D topDownController2D = (character.GetComponent <TopDownController2D>() == null) ? character.gameObject.AddComponent <TopDownController2D>() : character.GetComponent <TopDownController2D>(); topDownController2D.Gravity = -30; topDownController2D.GroundLayerMask = LayerMask.GetMask("Ground"); topDownController2D.HoleLayerMask = LayerMask.GetMask("Hole"); // adds 2D specific components if (character.GetComponent <CharacterOrientation2D>() == null) { character.gameObject.AddComponent <CharacterOrientation2D>(); } if (character.GetComponent <CharacterDash2D>() == null) { character.gameObject.AddComponent <CharacterDash2D>(); } if (character.GetComponent <CharacterJump2D>() == null) { character.gameObject.AddComponent <CharacterJump2D>(); } } if (mode == Modes.ThreeD) { // adds a capsule collider if needed CapsuleCollider capsuleCollider = (character.GetComponent <CapsuleCollider>() == null) ? character.gameObject.AddComponent <CapsuleCollider>() : character.GetComponent <CapsuleCollider>(); capsuleCollider.isTrigger = true; // adds a character controller CharacterController characterController = (character.GetComponent <CharacterController>() == null) ? character.gameObject.AddComponent <CharacterController>() : character.GetComponent <CharacterController>(); characterController.slopeLimit = 45f; characterController.stepOffset = 0.3f; characterController.skinWidth = 0.08f; characterController.minMoveDistance = 0.001f; characterController.radius = 0.5f; // adds a rigidbody Rigidbody rigidbody = (character.GetComponent <Rigidbody>() == null) ? character.gameObject.AddComponent <Rigidbody>() : character.GetComponent <Rigidbody>(); rigidbody.mass = 1; rigidbody.drag = 0; rigidbody.angularDrag = 0.05f; rigidbody.interpolation = RigidbodyInterpolation.None; rigidbody.collisionDetectionMode = CollisionDetectionMode.Discrete; rigidbody.useGravity = true; rigidbody.isKinematic = true; // adds the top down controller 3D TopDownController3D topDownController3D = (character.GetComponent <TopDownController3D>() == null) ? character.gameObject.AddComponent <TopDownController3D>() : character.GetComponent <TopDownController3D>(); topDownController3D.Gravity = 40; topDownController3D.GroundLayerMask = LayerMask.GetMask("Ground"); topDownController3D.ObstaclesLayerMask = LayerMask.GetMask("Obstacles"); // adds 3D specific components if (character.GetComponent <CharacterOrientation3D>() == null) { character.gameObject.AddComponent <CharacterOrientation3D>(); } if (character.GetComponent <CharacterCrouch>() == null) { character.gameObject.AddComponent <CharacterCrouch>(); } if (character.GetComponent <CharacterJump3D>() == null) { character.gameObject.AddComponent <CharacterJump3D>(); } if (character.GetComponent <CharacterDash3D>() == null) { character.gameObject.AddComponent <CharacterDash3D>(); } } // adds components common to 2D and 3D if (character.GetComponent <CharacterMovement>() == null) { character.gameObject.AddComponent <CharacterMovement>(); } if (character.GetComponent <CharacterRun>() == null) { character.gameObject.AddComponent <CharacterRun>(); } // adds (usually) player specific components if (type == Character.CharacterTypes.Player) { if (character.GetComponent <CharacterButtonActivation>() == null) { character.gameObject.AddComponent <CharacterButtonActivation>(); } if (character.GetComponent <CharacterPause>() == null) { character.gameObject.AddComponent <CharacterPause>(); } if (character.GetComponent <CharacterTimeControl>() == null) { character.gameObject.AddComponent <CharacterTimeControl>(); } } // adds health Health health = (character.GetComponent <Health>() == null) ? character.gameObject.AddComponent <Health>() : character.GetComponent <Health>(); health.MaximumHealth = 100; health.CurrentHealth = 100; Debug.LogFormat(character.name + " : Character Autobuild Complete"); }
/// <summary> /// Adds all the possible components to a character /// </summary> protected virtual void GenerateCharacter(Character.CharacterTypes type) { Character character = (Character)target; Debug.LogFormat(character.name + " : Character Autobuild Start"); if (type == Character.CharacterTypes.Player) { character.CharacterType = Character.CharacterTypes.Player; // sets the layer character.gameObject.layer = LayerMask.NameToLayer("Player"); // sets the tag character.gameObject.tag = "Player"; // sets the player ID character.PlayerID = "Player1"; } if (type == Character.CharacterTypes.AI) { character.CharacterType = Character.CharacterTypes.AI; // sets the layer character.gameObject.layer = LayerMask.NameToLayer("Enemies"); } // Adds the rigidbody2D Rigidbody2D rigidbody2D = (character.GetComponent <Rigidbody2D>() == null) ? character.gameObject.AddComponent <Rigidbody2D>() : character.GetComponent <Rigidbody2D>(); rigidbody2D.useAutoMass = false; rigidbody2D.mass = 1; rigidbody2D.drag = 0; rigidbody2D.angularDrag = 0.05f; rigidbody2D.gravityScale = 1; rigidbody2D.interpolation = RigidbodyInterpolation2D.None; rigidbody2D.sleepMode = RigidbodySleepMode2D.StartAwake; rigidbody2D.collisionDetectionMode = CollisionDetectionMode2D.Discrete; rigidbody2D.isKinematic = true; // Adds the boxcollider 2D BoxCollider2D boxcollider2D = (character.GetComponent <BoxCollider2D>() == null) ? character.gameObject.AddComponent <BoxCollider2D>() : character.GetComponent <BoxCollider2D>(); boxcollider2D.isTrigger = true; // Adds the Corgi Controller CorgiController corgiController = (character.GetComponent <CorgiController>() == null) ? character.gameObject.AddComponent <CorgiController>() : character.GetComponent <CorgiController>(); corgiController.PlatformMask = LayerMask.GetMask("Platforms"); corgiController.MovingPlatformMask = LayerMask.GetMask("MovingPlatforms"); corgiController.OneWayPlatformMask = LayerMask.GetMask("OneWayPlatforms"); corgiController.MovingOneWayPlatformMask = LayerMask.GetMask("MovingOneWayPlatforms"); corgiController.MidHeightOneWayPlatformMask = LayerMask.GetMask("MidHeightOneWayPlatforms"); if (character.GetComponent <Health>() == null) { character.gameObject.AddComponent <Health>(); } if (character.GetComponent <CharacterLevelBounds>() == null) { character.gameObject.AddComponent <CharacterLevelBounds>(); } if (character.GetComponent <CharacterHorizontalMovement>() == null) { character.gameObject.AddComponent <CharacterHorizontalMovement>(); } if (character.GetComponent <CharacterCrouch>() == null) { character.gameObject.AddComponent <CharacterCrouch>(); } if (character.GetComponent <CharacterDash>() == null) { character.gameObject.AddComponent <CharacterDash>(); } if (character.GetComponent <CharacterDive>() == null) { character.gameObject.AddComponent <CharacterDive>(); } if (character.GetComponent <CharacterDangling>() == null) { character.gameObject.AddComponent <CharacterDangling>(); } if (character.GetComponent <CharacterJump>() == null) { character.gameObject.AddComponent <CharacterJump>(); } if (character.GetComponent <CharacterRun>() == null) { character.gameObject.AddComponent <CharacterRun>(); } if (character.GetComponent <CharacterJetpack>() == null) { character.gameObject.AddComponent <CharacterJetpack>(); } if (character.GetComponent <CharacterLookUp>() == null) { character.gameObject.AddComponent <CharacterLookUp>(); } if (character.GetComponent <CharacterGrip>() == null) { character.gameObject.AddComponent <CharacterGrip>(); } if (character.GetComponent <CharacterWallClinging>() == null) { character.gameObject.AddComponent <CharacterWallClinging>(); } if (character.GetComponent <CharacterWalljump>() == null) { character.gameObject.AddComponent <CharacterWalljump>(); } if (character.GetComponent <CharacterLadder>() == null) { character.gameObject.AddComponent <CharacterLadder>(); } if (character.GetComponent <CharacterPause>() == null) { character.gameObject.AddComponent <CharacterPause>(); } if (character.GetComponent <CharacterButtonActivation>() == null) { character.gameObject.AddComponent <CharacterButtonActivation>(); } if (character.GetComponent <CharacterHandleWeapon>() == null) { character.gameObject.AddComponent <CharacterHandleWeapon>(); } if (type == Character.CharacterTypes.AI) { // Adds Damage on touch DamageOnTouch damageOnTouch = (character.GetComponent <DamageOnTouch>() == null) ? character.gameObject.AddComponent <DamageOnTouch>() : character.GetComponent <DamageOnTouch>(); damageOnTouch.TargetLayerMask = LayerMask.GetMask("Player"); if (character.GetComponent <AIWalk>() == null) { character.gameObject.AddComponent <AIWalk>(); } } Debug.LogFormat(character.name + " : Character Autobuild Complete"); }