public override void Start() { var daddy = get_parent_script(); // 获得父对象 base.Start(); if (!daddy.childObjects.dests.Contains(this)) { daddy.childObjects.dests.Add(this); } // bkg_ctrl = this.gameObject.transform.parent.gameObject.GetComponent<BackgroundController> (); bkg_ctrl = daddy; if (!bkg_ctrl) { // if background controller is null // Debug.Log ("Lift should be a component of the background!"); return; } else { Debug.Log(this.gameObject.name + " and father " + get_parent_script().gameObject + " and is ele " + IsElescator + " and is stair " + IsStair + " and ele up " + elescator_up); var lift = to.GetComponent <LiftController> (); lift.to = this.gameObject; } }
public static GameObject add_human(Vector2 pos, GameObject parent) { GameObject instance = Instantiate(Resources.Load("GamePrefab/LittleHuman"), pos, Quaternion.identity, parent.transform) as GameObject; instance.transform.localScale = new Vector3(0.005f, 0.04f, 1f); instance.tag = "Human"; // var colid = instance.GetComponent<BoxCollider2D> (); // colid.isTrigger = true; instance.transform.parent = parent.transform; BackgroundController hc = parent.GetComponent <BackgroundController> (); if (hc == null) { Debug.LogError("Parent we sent to add_human is null"); } else { instance.layer = hc.gameObject.layer; } var cur_pos = instance.transform.position; cur_pos.z = -0.41f; instance.transform.position = cur_pos; return(instance); }
/* * 变换对象的父对象、 * 非我别动 */ public void change_new_father_container(MonoBehaviour to_script) { BackgroundController new_father_script = to_script as BackgroundController; this.transform.parent = new_father_script.transform; father_containers = new_father_script.childObjects; if (father_containers == null) { Debug.Log("Fathers are null."); } }
/* * 获得父对象的脚本 */ public BackgroundController get_parent_script() { BackgroundController bkg = null; Transform parentTrans = transform.parent; // init parentTrans while (bkg == null) { bkg = parentTrans.GetComponent <BackgroundController> (); parentTrans = parentTrans.parent; } return(bkg); }
private void static_init(BackgroundController bkg_script) { int cnt = 0; foreach (float[,] farr in bkg_script.APF16) { if (farr == null) { continue; } float_arr [cnt++] = farr; if (cnt == 6) { break; } } foreach (float[,] farr in float_arr) { Debug.Log("Farr " + farr); } max_fixed_apf_count = cnt; corespond_color [0] = Color.blue; corespond_color [1] = Color.yellow; corespond_color [2] = Color.cyan; corespond_color [3] = Color.magenta; corespond_color [4] = new Color(0.2f, 0.3f, 0.4f); corespond_color [5] = new Color(1.0f, 0.3f, 0.8f); upper_corespond_color [0] = new Color(0.2f, 0.3f, 0.4f); upper_corespond_color [1] = new Color(1.0f, 0.3f, 0.8f); upper_corespond_color [2] = new Color(0.5f, 1.0f, 0.25f); upper_corespond_color [3] = new Color(0.7f, 0.5f, 0.3f); // 构造对应的映射字典。 for (int i = 0; i < 4; i++) { color_to_num [corespond_color [i]] = i; upper_color_to_num [upper_corespond_color [i]] = i; } }
// 按照一定的可能性,生成对应的fixed_apf private void generate_fixed_apf() { BackgroundController bkg_script = get_parent_script(); // 如果小与这个概率 if (rnd.NextDouble() <= 0.5) { fixed_apf = true; int to_choose = (int)(rnd.NextDouble() * max_fixed_apf_count); fixed_already_apf = float_arr [to_choose]; // change color var renderer = this.GetComponent <SpriteRenderer>(); // TODO:颜色转变(为什么不用状态及) if (in_disaster) { renderer.color = upper_corespond_color [to_choose]; } else { renderer.color = corespond_color [to_choose]; } } }
protected virtual void OnTriggerEnter2D(Collider2D other) { if (other.gameObject.CompareTag("Human")) { GameObject game_obj = other.gameObject; HumanController script = game_obj.GetComponent <HumanController> (); if (!script.lift_available(this)) { Debug.Log("Lift not availabe"); return; } string parent_name = script.get_parent_script().name; if (in_cross_channel && !ConfigConstexpr.get_instance().has_disaster) { if (parent_name.Contains("First")) { if (script.in_disaster) { return; } if (!script.take_subway) { // 一楼,乘地铁 return; } // 判断是向上的扶梯还是向下的扶梯 if (IsElescator && elescator_up) { // 向上扶梯 return; } } else if (parent_name.Contains("Second")) { if (script.take_subway && !script.in_disaster) { Debug.Log("二楼,乘地铁"); return; } if (IsElescator && !elescator_up) { return; } } } if (script == null) { Debug.Log("Bad Human! Human here don't have script!"); return; } // 变换主从关系 /* * 更换父对象的代码 * 考虑父对象使用自己的生成算法 */ // 更改game_obj的父对象 var rotate = other.transform.localRotation; var localscale = other.transform.localScale; { ++pass_by_cnt; bkg_ctrl.childObjects.humans.Remove(game_obj); // 获得Link对象的父脚本to_script var to_s = to.GetComponent <LiftController>(); BackgroundController to_script = to_s.get_parent_script(); // BackgroundController to_script = to.transform.parent.GetComponent<BackgroundController> (); if (to_script == null) { var lifts = GameObject.FindGameObjectsWithTag("Lift"); foreach (GameObject lift_go in lifts) { LiftController lc = lift_go.GetComponent <LiftController> (); if (lc.to == this) { to_script = lc.get_parent_script(); } } if (to_script == null) { Debug.LogError("Empty1"); } } // 更新 used_lift LiftController to_controller = to.GetComponent <LiftController> (); if (to_controller != null) { script.used_list = un_allowed_lifts; } Rigidbody2D rb = GetComponent <Rigidbody2D> (); game_obj.transform.parent = to.transform.parent; to_script.add_person(game_obj); // 改变位置 other.transform.position = to.transform.position; // 更换目标 script.change_new_father_container(to_script); script.change_destine(); game_obj.layer = to_script.gameObject.layer; /* * need to change layer. */ script.transform.rotation = rotate; PersonAdder.LayerChange(script, to_script); } } }
private float[,] get_apf() { // // DEBUG: temporary mark this if (fixed_apf) { if (fixed_already_apf != null) { Debug.Log("Fixed apf!"); return(fixed_already_apf); } else { Debug.LogError("你这还有问题..."); } } // 背景脚本 BackgroundController bkg_script = get_parent_script(); float[,] needed_apf; var pos = bkg_script.pos2mapv(transform.position); // 获得现在的x y坐标 int cur_x = (int)pos.x, cur_y = (int)pos.y; bool if_print = false; string debug_str; int pos_in_list = 0; if (bkg_script.gameObject.name.Contains("Second")) { if_print = true; } if (!bkg_script.on_stair_or_not()) { // 在楼层上 // 楼梯扶梯可用 if (has_app) { // 有app if (take_subway) { // 要乘车 if (in_disaster) { needed_apf = bkg_script.APF01; debug_str = ("Choose APF01"); } else { needed_apf = bkg_script.APF11; debug_str = ("Choose APF11"); } } else { if (in_disaster) { needed_apf = bkg_script.APF02; debug_str = ("Choose APF02"); } else { needed_apf = bkg_script.APF12; debug_str = ("Choose APF12"); } } } else { List <float[, ]> search_list; // 根据有无app选择对应的list if (take_subway) { if (in_disaster) { search_list = bkg_script.APF05; debug_str = ("Choose APF05"); } else { search_list = bkg_script.APF15; debug_str = ("Choose APF15"); } } else { if (in_disaster) { search_list = bkg_script.APF06; debug_str = ("Choose APF06"); } else { search_list = bkg_script.APF16; debug_str = ("Choose APF16"); } } const float MIN_V = 30.0f; // 找到最小的数组 float[,] min_arr = find_min_apf(search_list, cur_y, cur_x, ref pos_in_list); needed_apf = min_arr; // 先直接找最近的出口吧,这个逻辑恨坑的 init_destine(); } if (if_print) { Debug.Log(debug_str + " and pos " + pos_in_list); } } else { // 如果在楼梯/扶梯上 if (ConfigConstexpr.get_instance().es_is_running) { // 楼梯扶梯可用 if (has_app) { // 有app if (take_subway) { needed_apf = bkg_script.APF01; } else { needed_apf = bkg_script.APF02; } } else { if (take_subway) { needed_apf = bkg_script.APF03; } else { needed_apf = bkg_script.APF04; } } } else { // 扶梯不能运行 if (has_app) { // 有app if (take_subway) { needed_apf = bkg_script.APF11; } else { needed_apf = bkg_script.APF12; } } else { if (take_subway) { needed_apf = bkg_script.APF13; } else { needed_apf = bkg_script.APF14; } } } } return(needed_apf); }