示例#1
0
    public void InsertDetailIntoModule()
    {
        isAllowedToRotate = false;

        RaycastHit2D rayHit2d = Physics2D.Raycast(currentPoint, currentPoint * 2);

        float distanceTemp = Head.localPosition.magnitude;

        if (rayHit2d.transform != null)
        {
            RepairModule module = rayHit2d.transform.GetComponent <RepairModule>();
            if (module.Repairtype == currentDetail.Robot.breakageType)
            {
                isDetailRepaierd = true;
                HeadAnimator.SetTrigger("Repair");
                PerformAction = ReturnFromInserting;
            }
            else
            {
                isRobotFuckedUp = true;
            }
        }
        else if (distanceTemp > 0.4f && distanceTemp != 0)
        {
            isDetailRepaierd = false;
            HeadAnimator.SetTrigger("ReturnFromInserting");
            PerformAction = ReturnFromInserting;
        }
    }
示例#2
0
 private void OnTriggerEnter2D(Collider2D other)
 {
     if (other.transform.GetComponent <RepairModule>())
     {
         lastTouchedModule = other.transform.GetComponent <RepairModule>();
     }
 }
示例#3
0
    public static Module sample(ModuleType type)
    {
        switch (type)
        {
        case ModuleType.Core:
            return(CoreModule.sample());

        case ModuleType.Energy:
            return(EnergyModule.sample());

        case ModuleType.Armor:
            return(ArmorModule.sample());

        case ModuleType.Computation:
            return(ComputationModule.sample());

        case ModuleType.Power:
            return(PowerModule.sample());

        case ModuleType.Weapon:
            return(WeaponModule.sample());

        case ModuleType.Repair:
            return(RepairModule.sample());

        case ModuleType.Battery:
            return(BatteryModule.sample());

        default:
            return(new Module(ModuleType.None, 0, 0, 0));
        }
    }
示例#4
0
        public bool DockIfDesired()
        {
            // Is there available Docking space accomodating this ship?
            DockModuleQuery dockModuleQuery = new DockModuleQuery {
                IsOccupied = false, MinimumTier = Tier, SizeClass = SizeClass
            };
            List <DockModule> dockingSpaces = dockModuleQuery.FindAllMatches(Station);
            List <Action>     onSuccess     = new List <Action>();
            List <IModule>    modulesUsed   = new List <IModule>();

            if (dockingSpaces.Count == 0)
            {
                Station.LogEvent("The ship passes by after finding your station does not meet it's docking needs.");
                return(false);
            }
            else
            {
                modulesUsed.Add(dockingSpaces[0]);
                onSuccess.Add(() => dockingSpaces[0].OccupyingShip = this);
            }

            // TODO: Fuel?

            // Is there available repair services for this ship?
            if (RequiredRepairLevel > 0)
            {
                RepairModuleQuery repairModuleQuery = new RepairModuleQuery {
                    MinimumTier = Tier
                };
                RepairModule repairModule = repairModuleQuery.FindFirstMatch(Station);
                if (repairModule == null)
                {
                    Station.LogEvent("The ship passes by after finding your station does not meet it's repair needs.");
                    return(false);
                }
                else
                {
                    modulesUsed.Add(repairModule);
                    onSuccess.Add(() => repairModule.OccupyWithShip(this));
                }

                if (RequiredRepairLevel > 1)
                {
                    // Repair level requires boarding
                    HabitationModuleQuery habitationModuleQuery = new HabitationModuleQuery {
                        MinimumSpace = Crew.Count, MinimumTier = Tier
                    };
                    HabitationModule habitationModule = habitationModuleQuery.FindFirstMatch(Station);
                    if (habitationModule == null)
                    {
                        Station.LogEvent("The ship passes by after finding your station does not meet it's crew habitation needs.");
                        return(false);
                    }
                    else
                    {
                        modulesUsed.Add(habitationModule);
                        onSuccess.Add(() => habitationModule.AddCrew(Crew));
                    }
                }
            }

            // update all the modules with the docking ship (this could be done waaaay better)
            foreach (Action action in onSuccess)
            {
                action.Invoke();
            }

            List <string> moduleNames = modulesUsed.Select((IModule module) => {
                activeShipModules.Add(module);
                return(module.GetType().Name);
            }).ToList();

            Station.LogEvent($"The ship arrived and is making use of the following services: [{string.Join(", ", moduleNames)}]");
            return(true);
        }