/// <summary> /// Initialize damage text to the array. /// </summary> private void InitDamageTextToArray() { mDamageTexts = new JCS_Vector <JCS_DamageText>(mNumberOfHandle); if (mDamageText == null) { return; } for (int count = 0; count < mNumberOfHandle; ++count) { // spawn a new game object, // and get the component JCS_DamageText dt = JCS_Util.SpawnGameObject( mDamageText, mDamageText.transform.position, mDamageText.transform.rotation) as JCS_DamageText; // add to array mDamageTexts.set(count, dt); // set parent dt.transform.SetParent(this.transform); } }
/// <summary> /// Spawn all particle base on the count. /// </summary> public void SpawnParticles() { // check if particles already spawned? if (mParticleSpawned) { return; } if (mParticle == null) { JCS_Debug.Log( "No particle assign!"); return; } for (int index = 0; index < mNumOfParticle; ++index) { JCS_Particle trans = (JCS_Particle)JCS_Util.SpawnGameObject(mParticle); mParticles.push(trans); // disable the object trans.gameObject.SetActive(false); if (mSetChild) { // set parent trans.transform.SetParent(this.transform); } } mParticleSpawned = true; }
/// <summary> /// Initialize the focus selector. /// </summary> /// <param name="rbs"></param> public void SetFocusSelector(JCS_RollSelectorButton rbs) { // if still animating disabled. if (mAnimating) { return; } // record down the last focus buttons index. mLastScrollIndex = mFocusBtn.ScrollIndex; // assign new focus button! this.mFocusBtn = rbs; foreach (JCS_RollSelectorButton btn in mButtons) { btn.SetInteractable(false); } // only enable this mFocusBtn.SetInteractable(true); // show in front. JCS_Util.MoveToTheLastChild(mFocusBtn.transform); // Active anim, so can set the focused button to center. FindScrollIndex(); }
/* Functions */ private void Awake() { this.mEventTrigger = this.GetComponent <EventTrigger>(); this.mButton = this.GetComponent <Button>(); this.mJCS_Button = this.GetComponent <JCS_Button>(); // Try find it. if (this.mText == null) { this.mText = this.GetComponentInChildren <Text>(); } JCS_Util.AddEventTriggerEvent(mEventTrigger, EventTriggerType.PointerEnter, OnPointerEnter); JCS_Util.AddEventTriggerEvent(mEventTrigger, EventTriggerType.PointerExit, OnPointerExit); JCS_Util.AddEventTriggerEvent(mEventTrigger, EventTriggerType.PointerDown, OnPointerDown); JCS_Util.AddEventTriggerEvent(mEventTrigger, EventTriggerType.PointerUp, OnPointerUp); // Initialize the first color. if (IsButtonInteractable()) { mText.color = mNormalColor; } else { mText.color = mDisabledColor; } }
/* Functions */ protected void Awake() { mTargetList = new JCS_Vector <JCS_Player>(); mAudioListener = this.GetComponent <AudioListener>(); // find the camera in the scene first mJCS_2DCamera = (JCS_2DCamera)FindObjectOfType(typeof(JCS_2DCamera)); // if still null spawn a default one! if (mJCS_2DCamera == null) { JCS_Debug.LogError("There is not JCS_2DCamera attach to, spawn a default one!"); // Spawn a Default one! this.mJCS_2DCamera = JCS_Util.SpawnGameObject( JCS_2DCamera.JCS_2DCAMERA_PATH, transform.position, transform.rotation).GetComponent <JCS_2DCamera>(); } mJCS_2DCamera.SetFollowTarget(this.transform); // record down the fild of view mTargetFieldOfView = mJCS_2DCamera.fieldOfView; }
/// <summary> /// /// </summary> private void DoAbsorbEffect() { if (mAbsorbEffect) { mAbsorbEffectTimer += Time.deltaTime; if (mTimeToAbsorb < mAbsorbEffectTimer) { // start the effect mGoStraightAction.MoveSpeed += (0.1f - mGoStraightAction.MoveSpeed) / mTimeToAbsorb * Time.deltaTime; if (JCS_Util.WithInRange(-mAcceptTimeRange, mAcceptTimeRange, mGoStraightAction.MoveSpeed)) { //mGoStraightAction.MoveSpeed = mRecordMoveSpeed; // end the effect. mAbsorbEffect = false; } } } else { mGoStraightAction.MoveSpeed += (mRecordMoveSpeed - mGoStraightAction.MoveSpeed) / mAbsorbBackFriction * Time.deltaTime; } }
/// <summary> /// Input setting for XBox 360's gamepad. /// </summary> public static void SetupXBox360Joystick() { float defalutSenstivity = JCS_InputSettings.DEFAULT_SENSITIVITY; float defaultDead = JCS_InputSettings.DEFAULT_DEAD; float defaultGravity = JCS_InputSettings.DEFAULT_GRAVITY; for (int joystickNum = 0; joystickNum < GAMEPAD_COUNT; ++joystickNum) { foreach (JCS_JoystickButton val in JCS_Util.GetValues <JCS_JoystickButton>()) { if (val == JCS_JoystickButton.NONE) { continue; } // add axis definition. AddAxis(new InputAxis() { name = JCS_InputSettings.GetJoystickButtonIdName(joystickNum, val), positiveButton = JCS_InputSettings.GetPositiveNameByLabel(val), dead = defaultDead, gravity = defaultGravity, sensitivity = defalutSenstivity, type = JCS_InputSettings.GetAxisType(val), invert = JCS_InputSettings.IsInvert(val), axis = (int)JCS_InputSettings.GetAxisChannel(val), joyNum = joystickNum, }); } } }
/// <summary> /// Active the skill. /// </summary> public void ActiveSkill() { if (mSkillAnim == null) { JCS_Debug.LogReminder( "Assigning active skill action without animation is not allowed."); return; } GameObject obj = JCS_Util.SpawnAnimateObject(mSkillAnim, mOrderLayer); if (mSamePosition) { obj.transform.position = this.transform.position; } if (mSameRotation) { obj.transform.rotation = this.transform.rotation; } // if stay with player, simple set the position to // same position and set to child so it will follows // the active target! if (mStayWithActiveTarget) { obj.transform.SetParent(this.transform); } // add anim death event, // so when animation ends destroy itself. obj.AddComponent <JCS_DestroyAnimEndEvent>(); }
/// <summary> /// Spawn a support animation. /// </summary> private void SpawnSupAnim() { for (int index = 0; index < mAnimDesity; ++index) { // get a random animate from pool RuntimeAnimatorController anim = mAnimPoolSupAnim.GetRandomAnim(); GameObject obj = JCS_Util.SpawnAnimateObjectDeathEvent(anim, mOrderLayer); #if (UNITY_EDITOR) obj.name = "JCS_2DFullScreenAtkAction"; #endif if (mSamePosition) { obj.transform.position = this.transform.position; } if (mSameRotation) { obj.transform.rotation = this.transform.rotation; } if (mSameScale) { obj.transform.localScale = this.transform.localScale; } AddHitSound(ref obj); SetToRandomPos(ref obj); } }
/// <summary> /// Move the last child of the current child will make the /// panel in front of any other GUI in the current panel. /// </summary> public void MoveToTheLastChild() { JCS_Util.MoveToTheLastChild(this.transform); // Once it move to the last child, meaning the window have been focus. SwapToTheLastOpenWindowList(); }
private void Start() { // pop the fade screen. string path = JCS_UISettings.FADE_SCREEN_PATH; this.mFadeScreen = JCS_Util.SpawnGameObject(path).GetComponent <JCS_FadeScreen>(); }
/* Functions */ private void Start() { // Only need it for the UI. if (GetObjectType() == JCS_UnityObjectType.UI || GetObjectType() == JCS_UnityObjectType.TEXT) { // Get panel root, in order to calculate the correct distance // base on the resolution. mPanelRoot = this.GetComponentInParent <JCS_PanelRoot>(); if (mAutoAddEvent) { // Event trigger is the must if we need to add the // event to event trigger system. { this.mEventTrigger = this.GetComponent <EventTrigger>(); if (this.mEventTrigger == null) { this.mEventTrigger = this.gameObject.AddComponent <EventTrigger>(); } } JCS_Util.AddEventTriggerEvent(mEventTrigger, mActiveEventTriggerType, JCS_OnMouseOver); JCS_Util.AddEventTriggerEvent(mEventTrigger, mDeactiveEventTriggerType, JCS_OnMouseExit); } } Vector3 currentScale = this.transform.localScale; // record down the scale. mRecordScale = currentScale; mTargetScale = currentScale; SetTargetScale(); }
/// <summary> /// Show the resize panel, for debugging usage. /// </summary> public void ShowResizePanel() { if (mImage == null) { mImage = JCS_Util.ForceGetComponent <Image>(this); } else { if (mShowResizePanel && mImage.enabled) { return; } } // Show it. mImage.enabled = true; // Set image. Just a white sprite! mImage.sprite = mImageSprite; // Set color. mImage.color = mResizePanelColor; mShowResizePanel = true; }
/// <summary> /// Remove linked node from the managed list. /// </summary> /// <param name="n"> Number of linked object to remove. </param> /// <param name="startIndex"> Starting index to remove. </param> /// <returns> List of removed linked object. </returns> public List <JCS_TransformLinkedObject> RemoveLinked(int n = 1, int startIndex = 0) { if (!JCS_Util.WithInArrayRange(startIndex, mManagedList)) { JCS_Debug.LogReminder("Can't remove linked node with index lower than 0"); return(null); } var lst = new List <JCS_TransformLinkedObject>(); int maxIndex = startIndex + n; List <int> ids = new List <int>(); for (int index = startIndex; index < mManagedList.Count && index < maxIndex; ++index) { JCS_TransformLinkedObject node = mManagedList[index]; ids.Add(index); // First record it down. lst.Add(node); // Added to the remove list, and ready to return. } for (int index = 0; index < ids.Count; ++index) { int id = ids[index]; JCS_TransformLinkedObject node = mManagedList[id]; Destroy(node.gameObject); mManagedList.RemoveAt(id); } OrganizedLinked(); return(lst); }
/// <summary> /// Source: http://wiki.unity3d.com/index.php?title=LookAtMouse /// </summary> private void LookAtMouse() { float speed = 10; Vector3 direction = JCS_Util.VectorDirection(mDirection); // Generate a plane that intersects the transform's position with an upwards normal. Plane playerPlane = new Plane(direction, mShootAction.SpawnPoint.position); // Generate a ray from the cursor position Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); // Determine the point where the cursor ray intersects the plane. // This will be the point that the object must look towards to be looking at the mouse. // Raycasting to a Plane object only gives us a distance, so we'll have to take the distance, // then find the point along that ray that meets that distance. This will be the point // to look at. float hitdist = 0.0f; // If the ray is parallel to the plane, Raycast will return false. if (playerPlane.Raycast(ray, out hitdist)) { // Get the point along the ray that hits the calculated distance. Vector3 targetPoint = ray.GetPoint(hitdist); // Determine the target rotation. This is the rotation if the transform looks at the target point. Quaternion targetRotation = Quaternion.LookRotation(targetPoint - mShootAction.SpawnPoint.position); // Smoothly rotate towards the target point. mShootAction.SpawnPoint.rotation = Quaternion.Slerp(mShootAction.SpawnPoint.rotation, targetRotation, speed * Time.deltaTime); } }
/// <summary> /// Refresh all languages text in game. /// </summary> public void RefreshLangTexts() { this.mLangTexts = JCS_Util.RemoveEmptySlotIncludeMissing(this.mLangTexts); foreach (JCS_LangText txt in mLangTexts) { txt.Refresh(); } }
/* Functions */ private void Awake() { /* Down compatible. */ this.mSpriteRenderer = this.GetComponent <SpriteRenderer>(); // clean up empty slot. mSpriteRenderers = JCS_Util.RemoveEmptySlot <SpriteRenderer>(mSpriteRenderers); }
private void Start() { // everytime it reload the scene. // move to the last child make sure everything get cover by this. JCS_Util.MoveToTheLastChild(this.transform); this.mStartingPosition = this.transform.localPosition; }
/// <summary> /// Iterate through children and move them all to the last child /// once so the rendering order is preserved. /// </summary> private void ReorderChildren() { for (int count = 0; count < mRectTransform.childCount; ++count) { var trans = mRectTransform.GetChild(count); JCS_Util.MoveToTheLastChild(trans); } }
/// <summary> /// Last screenshot image's file index. /// </summary> public static int LastImageFileIndex() { var gs = JCS_GameSettings.instance; var prefix = gs.SCREENSHOT_FILENAME; var ext = gs.SCREENSHOT_EXTENSION; return(JCS_Util.LastFileIndex(SavePath(), prefix, ext)); }
/* Setter & Getter */ /* Functions */ private void Awake() { instance = this; // get all the scene layer in the scene. // so it could be manage mJCSOrderLayer = JCS_Util.FindObjectsOfTypeAllInHierarchy <JCS_OrderLayer>(); }
/// <summary> /// Apply SPRITE to all indicator's image containers. /// </summary> /// <param name="sprite"> The sprite to apply. </param> private void SetSprite(Sprite sprite) { this.mIndicators = JCS_Util.RemoveEmptySlotIncludeMissing(this.mIndicators); foreach (Image ind in mIndicators) { ind.sprite = sprite; } }
/// <summary> /// Decide what item to drop base on /// the array list we have! /// </summary> /// <returns> item to drop. </returns> private JCS_Item ItemDropped() { JCS_Item item = null; float totalChance = 0; // add all possiblity chance together. for (int index = 0; index < mItemSet.Length; ++index) { totalChance += mItemSet[index].dropRate; } float dropIndex = JCS_Random.Range(0, totalChance + 1); float accumMaxDropRate = 0; float accumMinDropRate = 0; for (int index = 0; index < mItemSet.Length; ++index) { accumMaxDropRate += mItemSet[index].dropRate; if (index == 0) { if (JCS_Util.WithInRange(0, mItemSet[0].dropRate, dropIndex)) { item = mItemSet[0].item; break; } continue; } // 比如: 10, 20, 30, 40 // Loop 1: 0 ~ 10 // Loop 2: 20(30-10) ~ 30 // Loop 3: 30(60-30) ~ 60 // Loop 4: 40(100-60) ~ 100 每個都減掉上一個的Drop Rate! if (JCS_Util.WithInRange(accumMinDropRate, accumMaxDropRate, dropIndex)) { item = mItemSet[index].item; break; } accumMinDropRate += mItemSet[index].dropRate; } // meaning the last one. if (item == null && mItemSet.Length != 0 && mItemSet[mItemSet.Length - 1].dropRate != 0) { item = mItemSet[mItemSet.Length - 1].item; } return(item); }
/* Functions */ private void Awake() { if (mTextContainer == null) { mTextContainer = this.GetComponentInChildren <Text>(); } mDistanceTileAction = JCS_Util.ForceGetComponent <JCS_3DDistanceTileAction>(mTextContainer); }
/* Functions */ protected override void Awake() { base.Awake(); // get all function pointer/formula. this.mEasingRed = JCS_Util.GetEasing(mEaseTypeR); this.mEasingGreen = JCS_Util.GetEasing(mEaseTypeG); this.mEasingBlue = JCS_Util.GetEasing(mEaseTypeB); this.mEasingAlpha = JCS_Util.GetEasing(mEaseTypeA); }
/** * Utils */ /// <summary> /// Create the Game Object during editing time. /// </summary> /// <returns></returns> private static GameObject CreateHierarchyObject(string settingPath) { // spawn the game object. GameObject hierarchyObj = JCS_Util.SpawnGameObject(settingPath); // take away clone sign. hierarchyObj.name = hierarchyObj.name.Replace("(Clone)", ""); return(hierarchyObj); }
//** In Game Dialogue (Game Layer) /// <summary> /// Spawn the setting dialogue. /// </summary> public static void PopSettingDialogue() { if (!CheckIfOkayToSpawnDialogue(JCS_DialogueType.PLAYER_DIALOGUE)) { return; } JCS_Util.SpawnGameObject(SETTING_PANEL); //PauseGame(true); }
/* Setter & Getter */ /* Functions */ private void Awake() { SpriteRenderer sp = this.GetComponent <SpriteRenderer>(); Vector2 spriteRect = JCS_Util.GetSpriteRendererRectWithNoScale(sp); mWidth = spriteRect.x; mHeight = spriteRect.y; mOriginPosition = this.transform.position; }
/// <summary> /// Re-order all the object. /// </summary> /// <param name="arr"> sorted object. </param> private void OriganizeChildOrder(JCS_GUIComponentLayer[] arr) { for (int index = 0; index < arr.Length; ++index) { // this will make gui ontop of each other. JCS_Util.MoveToTheLastChild(arr[index].transform); // make sure is sorted already. arr[index].Sorted = true; } }
/// <summary> /// Spawn the talke dialogue. /// </summary> public static void PopTalkDialogue() { if (!CheckIfOkayToSpawnDialogue(JCS_DialogueType.PLAYER_DIALOGUE)) { return; } JCS_Util.SpawnGameObject(TALK_DIALOGUE); PauseGame(true); }