// 创建一个金币柱. void CreateCylinder(CylinderParam _cp) { Transform _cylinder = Factory.Create(cylinderPrefab, Vector3.zero, Quaternion.identity); _cylinder.parent = transform; _cylinder.localScale = Vector3.one; cylinderNumInScene++; if (cylinderHaveCreatedList.Count > 0) { _cylinder.localPosition = new Vector3(cylinderHaveCreatedList[cylinderHaveCreatedList.Count - 1].localPosition.x, 0f, 0f) - new Vector3(cylinderDistance, 0f, 0f); } else { _cylinder.position = _cp.showupPos; } // _cylinder.rotation = _cp.showupRot; _cylinder.localEulerAngles = Vector3.zero; _cylinder.GetComponent <SingleCylinder>().Init(_cp.multi, _cp.value, dir); cylinderHaveCreatedList.Add(_cylinder); if (curCylinderState == CylinderState.finish) { lerpPercent = 0f; curStepPos = curTrans.localPosition; switch (dir) { case 0: nextStepPos = curTrans.localPosition + new Vector3(cylinderDistance, 0f, 0f); break; case 1: nextStepPos = curTrans.localPosition + new Vector3(0f, cylinderDistance, 0f); break; case 2: nextStepPos = curTrans.localPosition - new Vector3(cylinderDistance, 0f, 0f); break; case 3: nextStepPos = curTrans.localPosition - new Vector3(0f, cylinderDistance, 0f); break; } curCylinderState = CylinderState.jump; } }
// Update is called once per frame void Update() { if (Input.GetKey(KeyCode.LeftArrow)) { if (cylinderState != CylinderState.P_LEFT && cylinderState == CylinderState.REST || cylinderState == CylinderState.M_BACK || cylinderState == CylinderState.M_LEFT) { cylinderState = CylinderState.M_LEFT; MoveStick(cylinderState); } } else if (Input.GetKey(KeyCode.RightArrow)) { if (cylinderState != CylinderState.P_RIGHT && cylinderState == CylinderState.REST || cylinderState == CylinderState.M_BACK || cylinderState == CylinderState.M_RIGHT) { cylinderState = CylinderState.M_RIGHT; MoveStick(cylinderState); } } else if (Input.GetKey(KeyCode.UpArrow)) { if (cylinderState != CylinderState.P_UP && cylinderState == CylinderState.REST || cylinderState == CylinderState.M_BACK || cylinderState == CylinderState.M_UP) { cylinderState = CylinderState.M_UP; MoveStick(cylinderState); } } else if (Input.GetKey(KeyCode.DownArrow)) { if (cylinderState != CylinderState.P_DOWN && cylinderState == CylinderState.REST || cylinderState == CylinderState.M_BACK || cylinderState == CylinderState.M_DOWN) { cylinderState = CylinderState.M_DOWN; MoveStick(cylinderState); } } else if (!Input.GetKeyDown(KeyCode.DownArrow) && !Input.GetKeyDown(KeyCode.UpArrow) && !Input.GetKeyDown(KeyCode.LeftArrow) && !Input.GetKeyDown(KeyCode.RightArrow)) { if (cylinderState != CylinderState.REST) { cylinderState = CylinderState.M_BACK; MoveStick(cylinderState); } } }
private void MoveStick(CylinderState state) { switch (state) { case CylinderState.M_UP: Vector3 upPos = new Vector3(restPosition.x, restPosition.y + 0.5f, restPosition.z); cylinderTransform.position = Vector3.MoveTowards(cylinderTransform.position, upPos, stickSpeed * Time.deltaTime); if (Vector3.Distance(cylinderTransform.position, upPos) < 0.005f) { cylinderTransform.position = upPos; cylinderState = CylinderState.P_UP; } break; case CylinderState.M_DOWN: Vector3 downPos = new Vector3(restPosition.x, restPosition.y - 0.5f, restPosition.z); cylinderTransform.position = Vector3.MoveTowards(cylinderTransform.position, downPos, stickSpeed * Time.deltaTime); if (Vector3.Distance(cylinderTransform.position, downPos) < 0.005f) { cylinderTransform.position = downPos; cylinderState = CylinderState.P_DOWN; } break; case CylinderState.M_LEFT: Vector3 leftPos = new Vector3(restPosition.x, restPosition.y, restPosition.z - 0.5f); cylinderTransform.position = Vector3.MoveTowards(cylinderTransform.position, leftPos, stickSpeed * Time.deltaTime); if (Vector3.Distance(cylinderTransform.position, leftPos) < 0.005f) { cylinderTransform.position = leftPos; cylinderState = CylinderState.P_LEFT; } break; case CylinderState.M_RIGHT: Vector3 rightPos = new Vector3(restPosition.x, restPosition.y, restPosition.z + 0.5f); cylinderTransform.position = Vector3.MoveTowards(cylinderTransform.position, rightPos, stickSpeed * Time.deltaTime); if (Vector3.Distance(cylinderTransform.position, rightPos) < 0.005f) { cylinderTransform.position = rightPos; cylinderState = CylinderState.P_RIGHT; } break; case CylinderState.M_BACK: cylinderTransform.position = Vector3.MoveTowards(cylinderTransform.position, restPosition, stickSpeed * Time.deltaTime); if (Vector3.Distance(cylinderTransform.position, restPosition) < 0.005f) { cylinderTransform.position = restPosition; cylinderState = CylinderState.REST; } break; default: break; } }
void Update() { // 超过五个就要等待. if (cylinderNumInScene < 5 && cylinder2CreateList.Count > 0) { if (Time.time >= targetTime) { CreateCylinder(cylinder2CreateList[0]); cylinder2CreateList.Remove(cylinder2CreateList[0]); targetTime = Time.time + cylinderCreateTimeGap; } } switch (curCylinderState) { case CylinderState.jump: lerpPercent += Time.deltaTime; if (lerpPercent > wait4CylinderMoveUpTimeLength) { lerpPercent = 0f; curCylinderState = CylinderState.moveWait; } break; case CylinderState.move: lerpPercent += Time.deltaTime * cylinderMoveSpeed; curTrans.localPosition = Vector3.Lerp(curStepPos, nextStepPos, lerpPercent); if (lerpPercent > 1f) { lerpPercent = 0f; curStepPos = curTrans.localPosition; switch (dir) { case 0: nextStepPos = curTrans.localPosition + new Vector3(cylinderDistance, 0f, 0f); break; case 1: nextStepPos = curTrans.localPosition + new Vector3(0f, cylinderDistance, 0f); break; case 2: nextStepPos = curTrans.localPosition - new Vector3(cylinderDistance, 0f, 0f); break; case 3: nextStepPos = curTrans.localPosition - new Vector3(0f, cylinderDistance, 0f); break; } curCylinderState = CylinderState.moveWait; } break; case CylinderState.moveWait: lerpPercent += Time.deltaTime; if (lerpPercent >= moveOneStepWaitLength) { lerpPercent = 0f; int _count = cylinderHaveCreatedList.Count; for (int i = 0; i < _count; i++) { switch (dir) { case 0: if (cylinderHaveCreatedList[i].position.x >= targetPos.x) { cylinderHaveCreatedList[i].GetComponent <SingleCylinder>().Recycle(); cylinderNumInScene--; cylinderHaveCreatedList.Remove(cylinderHaveCreatedList[i]); if (cylinderHaveCreatedList.Count == 0) { curTrans.position = showUpPos; curCylinderState = CylinderState.finish; } return; } break; case 1: if (cylinderHaveCreatedList[i].position.y >= targetPos.y) { cylinderHaveCreatedList[i].GetComponent <SingleCylinder>().Recycle(); cylinderNumInScene--; cylinderHaveCreatedList.Remove(cylinderHaveCreatedList[i]); if (cylinderHaveCreatedList.Count == 0) { curTrans.position = showUpPos; curCylinderState = CylinderState.finish; } return; } break; case 2: if (cylinderHaveCreatedList[i].position.x <= targetPos.x) { cylinderHaveCreatedList[i].GetComponent <SingleCylinder>().Recycle(); cylinderNumInScene--; cylinderHaveCreatedList.Remove(cylinderHaveCreatedList[i]); if (cylinderHaveCreatedList.Count == 0) { curTrans.position = showUpPos; curCylinderState = CylinderState.finish; } return; } break; case 3: if (cylinderHaveCreatedList[i].position.y <= targetPos.y) { cylinderHaveCreatedList[i].GetComponent <SingleCylinder>().Recycle(); cylinderNumInScene--; cylinderHaveCreatedList.Remove(cylinderHaveCreatedList[i]); if (cylinderHaveCreatedList.Count == 0) { curTrans.position = showUpPos; curCylinderState = CylinderState.finish; } return; } break; } } curCylinderState = CylinderState.move; } break; default: break; } }
void Start (){ disable_springs = false; if(transform.FindChild("slide")){ var slide= transform.FindChild("slide"); has_slide = true; slide_rel_pos = slide.localPosition; if(slide.FindChild("auto mod toggle")){ has_auto_mod = true; auto_mod_rel_pos = slide.FindChild("auto mod toggle").localPosition; if(Random.Range(0,2) == 0){ auto_mod_amount = 1.0f; auto_mod_stage = AutoModStage.ENABLED; } } } var hammer= GetHammer(); if(hammer){ has_hammer = true; hammer_rel_pos = hammer.localPosition; hammer_rel_rot = hammer.localRotation; } var yolk_pivot= transform.FindChild("yolk_pivot"); Transform extractor_rod = null; if(yolk_pivot){ yolk_pivot_rel_rot = yolk_pivot.localRotation; var yolk= yolk_pivot.FindChild("yolk"); if(yolk){ var cylinder_assembly= yolk.FindChild("cylinder_assembly"); if(cylinder_assembly){ extractor_rod = cylinder_assembly.FindChild("extractor_rod"); if(extractor_rod){ extractor_rod_rel_pos = extractor_rod.localPosition; } } } } if(gun_type == GunType.AUTOMATIC){ magazine_instance_in_gun = Instantiate(magazine_obj); magazine_instance_in_gun.transform.parent = transform; var renderers= magazine_instance_in_gun.GetComponentsInChildren<Renderer>(); foreach(Renderer renderer in renderers){ renderer.shadowCastingMode = ShadowCastingMode.Off; } if(Random.Range(0,2) == 0){ round_in_chamber = Instantiate(casing_with_bullet, transform.FindChild("point_chambered_round").position, transform.FindChild("point_chambered_round").rotation) as GameObject; round_in_chamber.transform.parent = transform; round_in_chamber.transform.localScale = new Vector3(1.0f,1.0f,1.0f); renderers = round_in_chamber.GetComponentsInChildren<Renderer>(); foreach(Renderer renderer in renderers){ renderer.shadowCastingMode = ShadowCastingMode.Off; } } if(Random.Range(0,2) == 0){ slide_amount = kSlideLockPosition; slide_lock = true; } } if(gun_type == GunType.REVOLVER){ cylinders = new CylinderState[cylinder_capacity]; for(var i=0; i<cylinder_capacity; ++i){ cylinders[i] = new CylinderState(); if(Random.Range(0,2) == 0){ continue; } var name= "point_chamber_"+(i+1); cylinders[i]._object = Instantiate(casing_with_bullet, extractor_rod.FindChild(name).position, extractor_rod.FindChild(name).rotation) as GameObject; cylinders[i]._object.transform.localScale = new Vector3(1.0f,1.0f,1.0f); cylinders[i].can_fire = true; cylinders[i].seated = Random.Range(0.0f,0.5f); var renderers = cylinders[i]._object.GetComponentsInChildren<Renderer>(); foreach(Renderer renderer in renderers){ renderer.shadowCastingMode = ShadowCastingMode.Off; } } } if(Random.Range(0,2) == 0 && has_hammer){ hammer_cocked = 0.0f; } if(transform.FindChild("safety")){ has_safety = true; safety_rel_pos = transform.FindChild("safety").localPosition; safety_rel_rot = transform.FindChild("safety").localRotation; if(Random.Range(0,4) == 0){ safety_off = 0.0f; safety = Safety.ON; slide_amount = 0.0f; slide_lock = false; } } }
public override void ManipulateRight() { if(state == CylinderState.Open){ state = CylinderState.Closed; } }
public override void ManipulateLeft() { if(state == CylinderState.Closed){ state = CylinderState.Open; } }
void OnEnable() { ui.gameObject.SetActive (true); state = CylinderState.Closed; for(int i = 0; i < chambers.Length; i++){ chambers[i] = BulletState.Live; } Update(); }